Помогите проверить значение

shokk99

Новичок
Всем привет! Помогите пожалуйста проверить значение переменной в этом коде:
PHP:
include("connect.php");
$_POST['search'];
$search = $_POST['search'];
//echo $search;


$q="SELECT * FROM table WHERE name = '$search'";
$res=mysql_query($q);



while($row=mysql_fetch_array($res)) {

if ($row['name'] == 0) {

echo "Nothing found!:((";

}
else {
echo "$row['name']";

}

}


mysql_close($connect);
Загвоздку вызывает строка if ($row['name'] == 0) т.к. я не могу понять как проверить ее и определить пустая она или нет! Как следует из кода если она пуста, то выводится сообщение "Nothing found!" а у меня выводится пустой экран! Строка else работает как надо и выводит нужную мне информацию.
 

Фанат

oncle terrible
Команда форума
добавь в самый верх скрипта строчку

PHP:
error_reporting(E_ALL);
 

Фанат

oncle terrible
Команда форума
Строка else работает как надо и выводит нужную мне информацию.
А здесь ты привираешь, кстати.
Строка после else не выдает ничего, кроме ошибки.
 

shokk99

Новичок
)) ни разу не привираю т.к. значение переменной
PHP:
$_POST['search']
бывает разным и если в б.д. есть строка с совпадающим значением выполняется пункт else или печатаем пришедшее из б.д.
PHP:
 $row['name']
 

Фанат

oncle terrible
Команда форума
при чем здесь $_POST['search'] ?
я написал строка после else
PHP:
echo "$row['name']";
не выдает ничего, кроме ошибки.

потрудись впредь писать реально выполняющийся код, а не выдуманный из головы.
 

shokk99

Новичок
ну да извиняюсь, конечно же переменные распечатывают всегда без кавычек!) По error_reporting(E_ALL); не знаю точно куда ее вставлять пробовал в начало кода и в конец, ничего не выдает! Я просто только начинаю изучать php и многого не знаю.
 

Фанат

oncle terrible
Команда форума
я туплю, кстати.
никаких ошибок и не должно быть.

вместо цикла используй mysql_num_rows()
 

Фанат

oncle terrible
Команда форума
Но гораздо лучше будет, если ты станешь использовать функцию типа этой
http://phpclub.ru/talk/threads/Подскажите-задания-для-новичков.73672/#post-656859

Во-первых, она работает именно так, как ты ожидаешь. то есть, возвращает результат, который можно проверить.
А во-вторых, твой код ВНЕЗАПНО станет безопасным.

PHP:
include("connect.php");

$name = dbget(1,"SELECT name FROM table WHERE name = %s",$_GET['search']);
if ( $name ) {
    echo $name;
} else {
    echo "Not found";
}
поиск, кстати, делают методом GET, а не POST
 

shokk99

Новичок
добавил в начало кода две строчки
PHP:
error_reporting(E_ALL);
ini_set('display_errors',1);
отчетов об ошибках не видно. ini_set кстати почему то в Notepad++ не загорается синим. Версия PHP 5.4.3
Пробовал тоже
PHP:
 if (empty($row['name']))
- таким вот способом обработать не вышло...
 

SiZE

Новичок
ошибки mysql надо смотреть после mysql_query через mysql_error()
 

shokk99

Новичок
Фанат

Сделал на примере твоего кода, единственное что пока не получается так это вывести нужную информацию на экран т.е. когда пишу
PHP:
echo $name;
скрипт печатает id этой строки из б.д. а как можно вывести более подробную информацию, я уже понял, что если нужна вся строка то вместо
PHP:
 dbget(1,.......
нужно ставить 2, а как дальше?
PHP:
$name[2];
как. нибудь так?
 

Фанат

oncle terrible
Команда форума

shokk99

Новичок
блин прошу прощения за свою неграмотность, но если пишу
PHP:
echo $row['name'];
php ругается Undefined variable: row... и еще если в б.д. несколько строк с таким значением то показывает только одно.
 

Фанат

oncle terrible
Команда форума
никакой магии в РНР нету.
переменные ниоткуда не возникают.
чтобы обратиться к переменной $row, надо в неё записать данные.
Если ты записываешь данные в переменную $name, то глупо искать их $row.

Просто имя переменной должно отражать содержимое. Если там имя - $name, если строка из базы - $row или $userinfo. Если массив - то $users.

Чтобы получить несколько строк, надо поставить размерность 3 и перебирать результат через foreach()
 

shokk99

Новичок
в итоге конечно разобрался как вывести всю информацию что надо, а как быть с тем что при наличии в б.д. строк с одинаковыми значениями выводится только информация о одной из них.(сейчас попробую указанный выше метод)

P.S. спасибо вам за терпение!!!
 

Фанат

oncle terrible
Команда форума
PHP:
$data = dbget(3,"SELECT * FROM table WHERE name = %s",$_GET['search']);
foreach($data as $row) {
    var_dump($row);
}
выведет все строки, в которых встречается такое значение
 

Фанат

oncle terrible
Команда форума
я буду рад, если ты впредь вместо прямого обращения к функциям mysql_* всегда будешь использовать функцию dbget()
она, конечно, далеко не идеал, и не обеспечивает множества необходимых вещей, но по сравнению с обычным mysql_query/mysql_fetch это просто гигантский шаг вперёд.
как минимум она обеспечит безопасность в большинстве случаев. главное, ниогда не подставлять переменные в запрос напрямую, а только через % подстановки
 

VANHALEN

Новичок
В догонку ответ на первый пост. Но остальные участники форума скажут, что его лучше не использовать и скорее всего будут правы.
PHP:
if ($row['name'] == '') {

echo "Nothing found!:((";

}
else {
echo "$row['name']";

}
Загвоздка то в том была, что тебе нужно было проверить пустое ли поле, а ты проверяд равно ли оно нулю..
 
Сверху