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

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
Как выйти из положения, а?
 

Reader

Guest
Вышел из положения:
PHP:
$rs = mysql_query( "SELECT * FROM `my_shop` WHERE name LIKE '%$search%' or `bukwa`='$bukwa'", $openConn2db );
 

Reader

Guest
Спасибо! А вот еще вариант:
(Ответил хостинг-провайдер)
Наш программист исправил
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
}
 

Reader

Guest
В итоге получилось вот так:
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']);
 

valyala

Новичок
SQL-injection прямо-таки прет изо всех щелей!
Reader, а что будет, если твоему скрипту скормить вот такую query string:
?bukwa=%27+UNION+SELECT+login%2C+password%2C+credit_number%2C+etc+FROM+secret_table+%23+
А теперь по поводу твоего вопроса. Для проверки наличия переменной надо использовать оператор isset() вместо функции empty().
 

Фанат

oncle terrible
Команда форума
ОСТАНОВИТЕ ЕГО!!!
Он ведь даже не возвращается к темам, которые осчастливил своим ответом!
он как танк прет дальше!
 

lucas

Guest
valyala

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

:) :)
 

netdog

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

valyala

Новичок
2 lucas. Спасибо, что указал на мою ошибку. Конечно же, empty() - тоже оператор :)
 

Фанат

oncle terrible
Команда форума
а по поводу инжекшена?
из каких "всех" щелей он "прет"?

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

гоша

Guest
> empty() тоже можно использовать

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

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