Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как передать 0?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
nkl
Отправлено: 16 Марта, 2012 - 23:50:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Здравствуйте, у меня имеется вот такая замечательная функция:
PHP:
скопировать код в буфер обмена
  1. function createQuery($status = '', $age_from = '', $age_to = '', $cat_id = '', $type = '', $page = '')
  2. {
  3.         if ($age_from = 1) $age_from = 0;
  4.         $params = array();
  5.         if (!empty($status))
  6.     $params[] = '`status` = "'.$status.'"';
  7.     if (!empty($age_from))
  8.     $params[] = '`age_from` >= '.$age_from;
  9.     if (!empty($age_to))
  10.     $params[] = '`age_to` >= '.$age_to;
  11.     if (!empty($cat_id))
  12.     $params[] = '`cat_id` = '.$cat_id;  
  13.         if (!empty($type))
  14.     $params[] = '`type_id` = '.$type;          
  15.         if(count($params) > 0){
  16.     $query = 'SELECT * FROM `lots` WHERE '.implode(' AND ', $params);
  17.         }
  18.     else
  19.     $query = 'SELECT * FROM `lots`';
  20.         return($query);
  21. }

Проблема в том, что если переменная $age_from = 0, то empty считает её пустой. Как мне доказать этому емпти, что переменная не пуста, а равняется 0?

(Отредактировано автором: 16 Марта, 2012 - 23:51:44)

 
 Top
DelphinPRO
Отправлено: 17 Марта, 2012 - 00:07:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. function createQuery($status = null, $age_from = null, $age_to = null, $cat_id = null, $type = null, $page = null)


все empty() заменить на isset() или is_null()

(Отредактировано автором: 17 Марта, 2012 - 00:08:13)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
DeepVarvar Супермодератор
Отправлено: 17 Марта, 2012 - 00:33:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Ахах - а вот и тот самый косяк милого empty Закатив глазки
 
 Top
DlTA
Отправлено: 17 Марта, 2012 - 11:39:39
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




DelphinPRO пишет:
заменить на isset() или is_null()

правильней таки на is_null
так как $a=null, такая переменная существует но имеет специфическое значение
(Добавление)
или же проверку типа
($status !== null)
 
 Top
DelphinPRO
Отправлено: 17 Марта, 2012 - 11:44:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




да, согласен, хотя в текущих версиях php isset для таких переменных возращает false


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 17 Марта, 2012 - 11:56:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DelphinPRO пишет:
хотя в текущих версиях php isset для таких переменных возращает false

Так ничего не поменялось. Всё так же false будет.
http://ru.php.net/manual/en/function.isset.php пишет:
Determine if a variable is set and is not NULL.


-----
PostgreSQL DBA
 
 Top
DelphinPRO
Отправлено: 17 Марта, 2012 - 12:16:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Мелкий пишет:
Так ничего не поменялось

так я ж и не говорю, что поменялось Улыбка просто немного не так выразился


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Bio man
Отправлено: 17 Марта, 2012 - 13:43:32
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




nkl пишет:
if ($age_from = 1) $age_from = 0;
сразу бросилось в глаза. тут не явная ошибка, исправь.


PHP:
скопировать код в буфер обмена
  1. if (!empty($age_from) || $age_from !== 0)
 
 Top
nkl
Отправлено: 18 Марта, 2012 - 17:15:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




DelphinPRO пишет:
PHP:
скопировать код в буфер обмена
  1. function createQuery($status = null, $age_from = null, $age_to = null, $cat_id = null, $type = null, $page = null)


все empty() заменить на isset() или is_null()

Переделал так, с применением is_null, так мне теперь выдается запрос такого вида:
Цитата:
SELECT * FROM `lots` WHERE `visible` = 1 AND `status` = "" AND `age_from` >= AND `age_to` >= AND `cat_id` = AND `type_id` =

Вот как теперь выглядит функция:
PHP:
скопировать код в буфер обмена
  1. function createQuery($status = NULL, $age_from = NULL, $age_to = NULL, $cat_id = NULL, $type = NULL, $page = NULL)
  2. {
  3.         if ($age_from == 1) $age_from = 0;
  4.         $params = array();
  5.         if (!is_null($status))
  6.     $params[] = '`status` = "'.$status.'"';
  7.     if (!is_null($age_from))
  8.     $params[] = '`age_from` >= '.$age_from;
  9.     if (!is_null($age_to))
  10.     $params[] = '`age_to` >= '.$age_to;
  11.     if (!is_null($cat_id))
  12.     $params[] = '`cat_id` = '.$cat_id;  
  13.         if (!is_null($type))
  14.     $params[] = '`type_id` = '.$type;          
  15.         if(count($params) > 0){
  16.     $query = 'SELECT * FROM `lots` WHERE `visible` = 1 AND '.implode(' AND ', $params);
  17.         }
  18.     else
  19.     $query = 'SELECT * FROM `lots` WHERE `visible` = 1';
  20.         return($query);
  21. }

И она при любых введенных значениях выдает одну и ту же строку. В чем прикол я не пойму? Условия ведь должно выполнятся только в тех случаях, когда переменная не равна null, а оно почему-то всегда выполняется.
(Добавление)
Я так понимаю регистр в котором пишется слово null не имеет значения или имеет?
 
 Top
Bio man
Отправлено: 18 Марта, 2012 - 17:29:07
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




nkl пишет:
Я так понимаю регистр в котором пишется слово null не имеет значения или имеет?
не имеет.
не понимаю что у тебя не работает! у меня все прекрасно работает!
(Добавление)
и кстати путая строка это не тоже самое что NULL
 
 Top
DelphinPRO
Отправлено: 18 Марта, 2012 - 17:30:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




если условие выполняется - значит переменная не равна NULL
смотрите как вы вызываете функцию. т.е. проблемы в другом месте.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
nkl
Отправлено: 18 Марта, 2012 - 17:47:32
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Цитата:
и кстати путая строка это не тоже самое что NULL

Вот оно, ключевая фраза Радость , у меня там проверка шла, типа если какая-то переменная не получена из массива _GET, то ей присваивалось значение '' - пустой строки. Теперь все работает.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB