Если не работает empty($var)

  • Автор темы Автор темы Reader
  • Дата начала Дата начала

Reader

Guest
Если не работает empty($var)

У меня простенький код в функции:

PHP:
 global $bukwa, $search;

if (!empty($search)) {$rs = mysql_query( "SELECT * FROM `my_shop` WHERE name LIKE '%$search%'", $openConn2db );
} else {
$rs = mysql_query( "SELECT * FROM `my_shop` where `bukwa`='$bukwa'", $openConn2db );
}
Должно работать так: если есть переменная $search то запускается поиск по базе, если нет, то все данные удовлетворяющие второму условию.
Но замечено, что empty не срабатывает, видимо, потому, что обьявлена в global
Как выйти из положения, а?
 
Вышел из положения:
PHP:
$rs = mysql_query( "SELECT * FROM `my_shop` WHERE name LIKE '%$search%' or `bukwa`='$bukwa'", $openConn2db );
 
Спасибо! А вот еще вариант:
(Ответил хостинг-провайдер)
Наш программист исправил
PHP:
if ($search!='') $rs = mysql_query( "SELECT * FROM my_shop WHERE name LIKE '%".$search."%'" );
 else $rs = mysql_query( "SELECT * FROM my_shop WHERE bukwa='".$bukwa."'" );
Но вот так еще правильнее:
Автор оригинала: admin
PHP:
if (strlen(trim($search))<1) { 
// some
}
 
В итоге получилось вот так:
PHP:
if (strlen(trim($search))<1) $rs = mysql_query( "SELECT * FROM my_shop WHERE bukwa='".$bukwa."'" ); else  $rs = mysql_query( "SELECT * FROM my_shop WHERE name LIKE '%".$search."%'" );
но еще в начале были сделаны изменения:
PHP:
function price() {
//global ///
	$bukwa=$_GET['bukwa'];
	$search=trim($_GET['search']);
 
SQL-injection прямо-таки прет изо всех щелей!
Reader, а что будет, если твоему скрипту скормить вот такую query string:
?bukwa=%27+UNION+SELECT+login%2C+password%2C+credit_number%2C+etc+FROM+secret_table+%23+
А теперь по поводу твоего вопроса. Для проверки наличия переменной надо использовать оператор isset() вместо функции empty().
 
ОСТАНОВИТЕ ЕГО!!!
Он ведь даже не возвращается к темам, которые осчастливил своим ответом!
он как танк прет дальше!
 
valyala

Для проверки наличия переменной надо использовать оператор isset() вместо функции empty().
Раз уж это было так авторитетно заявлено, то буду рад увидеть здесь два примера кода:
1. Вызов empty() как variable function.
2. Вызов empty() через call_user_func().

:) :)
 
valyala
А теперь по поводу твоего вопроса. Для проверки наличия переменной надо использовать оператор isset() вместо функции empty().
empty() тоже можно использовать.
раньше надо было для правильности и не появления нотайса if (isset($var) && !empty($var) ) ... Сейчас, в более менее последних версиях, это отфиксено. AFAIK.
 
2 lucas. Спасибо, что указал на мою ошибку. Конечно же, empty() - тоже оператор :)
 
а по поводу инжекшена?
из каких "всех" щелей он "прет"?

или ты хотел сказать "а ты не забыл проверить - прослешил ли данные РНР, и, если нет, то сделать это самому?"
Тогда так и надо было писать, а не про щели.
 
> empty() тоже можно использовать

Нет, нельзя. Надо про нее забыть и никогда не писать.

isset + strlen рулит
 
Сверху