Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите пожалуйста найти ошибку в коде
 
 автор: kaya   (09.03.2010 в 15:03)   письмо автору
 
 

if (ACCOUNT_STATE == 'true') {
          $zone_id = 0;
          $check_query = tep_db_query("select count(*) as total from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country . "'");
          $check = tep_db_fetch_array($check_query);
          $entry_state_has_zones = ($check['total'] > 0);
          if ($entry_state_has_zones == true) {
            $zone_query = tep_db_query("select distinct zone_id from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country . "' and (zone_name = '" . tep_db_input($state) . "' or zone_code = '" . tep_db_input($state) . "')");
            if (tep_db_num_rows($zone_query) == 1) {
              $zone = tep_db_fetch_array($zone_query);
              $zone_id = $zone['zone_id'];
            } else {
              $error = true;

              $messageStack->add('checkout_address', ENTRY_STATE_ERROR_SELECT);
            }
          } else {
            if (strlen($state) < ENTRY_STATE_MIN_LENGTH) {
              $error = true;

              $messageStack->add('checkout_address', ENTRY_STATE_ERROR);
            }
          }
        }


Есть такой код,чего-то не хватает ,а чего не пойму,
не работает.

  Ответить  
 
 автор: .exp   (09.03.2010 в 17:05)
 
   для: kaya   (09.03.2010 в 15:03)
 

программа внутри этого блоа вообще начинает выполняться ?
сделайте в самом начале блока вывод какошо-нибудь сообщения
if (ACCOUNT_STATE == 'true') {
         exit("Сработало условие ACCOUNT_STATE == 'true'");

  Ответить  
 
 автор: kaya   (09.03.2010 в 17:22)   письмо автору
 
   для: .exp   (09.03.2010 в 17:05)
 

Ona voobshe ne vipolnyaetsya.Ya dumayu, chto ne xvataet esho odnogo"if...else", a vot chto pisat ne znayu.Pishu sleduyushee:

if(tep_not_null(if ($entry_state_has_zones) == true){
    $zone = tep_db_fetch_array($zone_query);
              $zone_id = $zone['zone_id'];
            } else {
              $error = true;

              $messageStack->add('checkout_address', ENTRY_STATE_ERROR_SELECT);
            }




No dumayu chto ne pravilno,ne rabotaet:(
Chto delat ne znayu:(

  Ответить  
 
 автор: oliss   (09.03.2010 в 17:28)   письмо автору
 
   для: kaya   (09.03.2010 в 17:22)
 

Это поможет :
error_reporting(E_ALL);

  Ответить  
 
 автор: kaya   (09.03.2010 в 17:44)   письмо автору
 
   для: oliss   (09.03.2010 в 17:28)
 

Eto ne pomoglo:):(

Chto proisxodit- kogda user vibiraet shtat(npr: Arizona),country: usa--to kogda delayu submit, to pochemu-to "Arizona" menyaetsya na grugoi shtat, i daeyot oshibku "Please entry your state"
Ne znayu chto delat:(:(

  Ответить  
 
 автор: heed   (09.03.2010 в 17:50)   письмо автору
 
   для: kaya   (09.03.2010 в 17:44)
 

происходит то что данные отправляемые формой или ещё как-то передаются скрипту (на сервер).
В скрипте они должны приниматься, например как $shtate = $_GET['shtate']; или $shtate = $_POST['shtate']; или $shtate = $_COOKIE['shtate'];

// upd

в запросе есть (int)$country
,откуда раньше этого появляется $country ?

  Ответить  
 
 автор: kaya   (09.03.2010 в 18:26)   письмо автору
 
   для: heed   (09.03.2010 в 17:50)
 

   $state = tep_db_prepare_input($HTTP_POST_VARS['billto_state']);
          $city = tep_db_prepare_input($HTTP_POST_VARS['billto_city']);

Dumayu otsyuda

Kod pisala ne ya, a ya novaya v etom, i voobshe na etoi rabote.Dali vot zadanie razobratsya

A ya na grani sriva, potomushto, to chto uchila, to chto est na samom dele----sovershenno raznie veshi:(

Izvinite za sumbur,prosto ne znayu s chego nachat voobshe i v chastnosti:(

Spasibo zaranee:)

  Ответить  
 
 автор: .heed   (09.03.2010 в 19:03)
 
   для: kaya   (09.03.2010 в 18:26)
 

хотябы так :)
а то бывают вообще скрипты написанные под включенный register_globals, и там даже нет этих $HTTP_POST_VARS.

заменяйте сразу все такие надписи на $_POST.
массив $HTTP_POST_VARS это устаревшее название
обьявилен как [deprecated] и скоро его вообще не станет совсем.

функция tep_db_prepare_input() объявлена где-то во включеных файлах.
Можно пока просто проверить поступают ли данные после того как отправлена форма
Например посмотреть сразу после этих двух строк например так.
///*
echo '<pre>';
var_dump($state, $city);
//exit;
//*/

Но тот блок совсем не выполняется потому-что константа ACCOUNT_STATE оказывается не равна 'true'
где-то ещё должно быть присвоение ей значения функцией define()
, Вы же проверяли уже что содержится в ACCOUNT_STATE ? :)

  Ответить  
 
 автор: heed   (09.03.2010 в 19:21)   письмо автору
 
   для: kaya   (09.03.2010 в 18:26)
 

Я вообще-то вспомнил один момент связаный с php5.3,( у Вас-же 5.3 ?) и с некоторыми операционными системами.
Бывали случаи когда php вообще не подключалось к mysql, а просто зависало.
И никаких сообщений о ошибках. У Вас установлен phpMyAdmin ? он нормально работает ?

  Ответить  
 
 автор: kaya   (09.03.2010 в 19:25)   письмо автору
 
   для: heed   (09.03.2010 в 19:21)
 

Da u nas php5.3
PhpAdmin funkcaniruet
no ya ne proverila ACCOUNT_STATE, esli on pustoi
Poidu proveryat

Spasibo vam za potderjku:)

  Ответить  
 
 автор: kaya   (10.03.2010 в 10:50)   письмо автору
 
   для: kaya   (09.03.2010 в 19:25)
 

Zdraste vsem:)
funcciya ACCOUNT_STATE voobshe ne nashla nigde define
Znayu chto vetom kode ne xvataet fubnccii if , prichom s primeneniem funccii tep_not_null(), pravda kak pict i guda, i glavnoe chto proveryat etoi funkciei , ya ne znayu:(:(

  Ответить  
 
 автор: heed   (10.03.2010 в 12:08)   письмо автору
 
   для: kaya   (10.03.2010 в 10:50)
 

Или просто плохо искали ,) в начале этого php-файла наверное куча всяких include() и require()

или всё-таки нужно что-то делать с выводом Notice
Если ACCOUNT_STATE нигде не определена должна быть показано сообщение
Notice: Use of undefined constant ................

у меня Выводятся такие Notice даже просто если поставить
в начале скрипта error_reporting(E_ALL);
( тоже xampp только начал пробовать :))

у Вас в файле php.ini есть такая строчка
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
измените её хотя-бы так
error_reporting = E_ALL & ~E_DEPRECATED
остановите и снова запустите apache.

напишите какое-нибудь
echo RRRRXXX;
если не будет Notice , и будет просто выведено RRRRXXX , значит где-то что-то ещё переопределено.

начиная с того что в файлах .htaccess можно задавать например такое чтобы включить
php_value error_reporting 2047
php_flag display_errors On

или в скриптах бывает чего только не задают каким-нибудь ini_set().

  Ответить  
 
 автор: kaya   (10.03.2010 в 14:04)   письмо автору
 
   для: heed   (10.03.2010 в 12:08)
 

Sbasibo poprobuyu

  Ответить  
 
 автор: kaya   (11.03.2010 в 12:59)   письмо автору
 
   для: kaya   (10.03.2010 в 14:04)
 

Zdraste vsem:)

if (ACCOUNT_STATE == 'true'&&!tep_not_nul($zone_id)) {
                $zone_id = 0;
                $check_query = tep_db_query("select count(*) as total from " . TABLE_ZONES . " where zone_country_id = '" . (int)$shipping_country . "'");
                $check = tep_db_fetch_array($check_query);
                $shipping_entry_state_has_zones = ($check['total'] > 0);
                if ($shipping_entry_state_has_zones == true) {
                  $zone_query = tep_db_query("select distinct zone_id from " . TABLE_ZONES . " where zone_country_id = '" . (int)$shipping_country . "' and (zone_name = '" . tep_db_input($shipping_state) . "' or zone_code = '" . tep_db_input($shipping_state) . "')");
                  if (tep_db_num_rows($zone_query) == 1) {
                    $zone = tep_db_fetch_array($zone_query);
                    $shipping_zone_id = $zone['zone_id'];
                  } else {
                    $error = true;

                    $messageStack->add('checkout_address', ENTRY_STATE_ERROR_SELECT);
                  }
                } else {
                  if (strlen($shipping_state) < ENTRY_STATE_MIN_LENGTH) {
                    $error = true;

                    $messageStack->add('checkout_address', ENTRY_STATE_ERROR);
                  }
                }
              }

              if ( (is_numeric($shipping_country) == false) || ($shipping_country < 1) ) {
                $error = true;

                $messageStack->add('checkout_address', ENTRY_COUNTRY_ERROR);
              }

        }



Pojaluista pomogite,ne rabotaet, sdelala tak kak vi skazali,vsyo ravno ne rabotaet:(:(

  Ответить  
 
 автор: .exp   (09.03.2010 в 17:45)
 
   для: kaya   (09.03.2010 в 17:22)
 

значит не выполняется, если кроме как внутри этого блока всё остальное работает.
, можно было-бы ,как Вам здесь подсказывали ,) проедположить что в константе ACCOUNT_STATE не строка 'true' а просто true типа boolean
, но всётаки надёжнее сделать что-нибудь перед условием
var_dump(ACCOUNT_STATE);
if (ACCOUNT_STATE == 'true') { 

  Ответить  
 
 автор: heed   (11.03.2010 в 14:07)   письмо автору
 
   для: kaya   (09.03.2010 в 15:03)
 

что Вам можно сказать , не пользовавшись таким-же как у Вас скриптом
вы ещё усложнили условие при котором этот блок должен выполняться

если посмотреть большую такую простыню функций файла functions/general.php
http://www.oscdox.com/crossx/includes/functions/general.php.source.html#l1066
, и если предположить что у Вас там то-же самое
<?

   
function tep_not_null($value) {
      if (
is_array($value)) {
        if (
sizeof($value) > 0) {
         return 
true;
        } else {
          return 
false;
        }
     } else {
        if ((
$value != '') && (strtolower($value) != 'null') && (strlen(trim($value)) > 0)) {
          return 
true;
        } else {
          return 
false;
        }
      }
    }

то Вы просто сделали так что
, кроме того что ACCOUNT_STATE должно быть равно 'true'
ещё и $zone_id должно быть 'NULL', пустой строкой или пустым массивом

, Что это за скрипт ? у них там не раздают новых версий ? :)

//ups
у вас другое название tep_not_nul ,без одной буквы

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования