PHP: <? $text=$_POST['text'];#тут кое что пропустим if ($text==""){$res = 1;} else #предполагаем что к базе мы уже раньше законнектилсь $query = "SELECT * FROM `table1` WHERE `text` LIKE '%".$text."%' OR `descript` LIKE '%".$text."%' ORDER BY `id`;"; $find = mysql_query($query) or die("Query failed : " . mysql_error()); if ($find==""){#этот [b]if [/b]у меня вызывает смутные сомнения... $res = 2;} else {$res=3;} -------------------------------------------- switch ($res){ case 1:{echo "Введите текст для поиска !!!";break;} case 2:{echo "Ничего не найдено.";break;} case 3:{Тут вывод результатов поиска} } ?> Как сформировать более сложный запрос правильно ?
правильно вызывает Надо хоть какую-то мурзилку прочесть про использование БД. так что такое $find ? читать книги, писать, в том числе в соответствующем разделе. )) Учиццо на своем и чужом опыте. И в первую очередь написать этот "более сложный запрос" на русском.
Почитала мурзилку, не совсем поняла. PHP: <? $find=mysql_query($query);?> Ну через (!$find) мы проверим, был ли запрос успешным или нет. Если $find - FALSE то запрос не удался. А как проверить, содержит запрос что-то или не нашлось ничего, соответствующего условиям поиска ?
чтобы понять есть ли данные удовлетворяющие поиску нужно узнать сколько строк вернул результат это можно делать через mysql_num_rows( $find )
$find - ссылка на объект, который пришел из мускула. из него можно вынимать данные с помощью mysql_fetch_assoc($find) построчно. если $find==false то ничего хорошего нам не вернули )) mysql_query mysql_fetch_assoc($find) возвращает массив из строчки и перемещает указатель в $find на 1. если в $find ничего нет или указатель дошел до конца, то mysql_fetch_assoc вернет false - ссылку я давал. поэтому цикл while ($row=mysql_fetch_assoc($find)) { } переберет все строчки в $find - если их нет то ни одной. но удобнее для проверки использовать специальную функцию mysql_num_rows надеюсь навык чтения мануала сегодня продвинулся.
Как правильно обработать строку для поиска ? Думаю, вариант PHP: <?php $search = $_GET['search']; .... $query = "SELECT * FROM `table1` WHERE `text` LIKE '%".$search."%';"; ?> , в котором $search не подвергается никакой дополнительной обработке, является небезопасным.
Вот что получилось. Жду ваших комментариев. PHP: <?php $printform="<form action=\"?p=search\" method=get><br> <input type=submit value=\"Найти\"><br> <input type=text name=s><br> <input type=hidden name=p value=search><br> </form><br>"; $mpt=trim($_GET['s']);//сделала так, потому что если просто писать, как было в примере empty(trim($_GET['s'])) то вызывало ошибку. if( !isset( $_GET['s'] ) || empty($mpt)){ $res = 1; } else { $text=$_GET['s']; $link = mysql_connect($host, $login, $pass) or die("Could not connect : " . mysql_error()); mysql_select_db($dbname) or die("Could not select database"); $text=mysql_real_escape_string($text); $query = "SELECT * FROM $table WHERE `text` LIKE '%".$text."%' ORDER BY `id`;"; $find = mysql_query($query) or die("Query failed : " . mysql_error()); if ($find==FALSE){ $res = 4; } else { if (mysql_num_rows( $find )==0){ $res = 2; } else { $res = 3; } } } #-------------------------------------------- switch ($res){ case 1:{ echo "Введите текст для поиска !!!<br>",$printform; break; } case 2:{ echo "Ничего не найдено."; break; } case 3:{ echo "Тут вывод результатов поиска"; break; } default:{ echo "Ororo !!!"; } } ?>
отлично получилось только зачем ?p=search и <input type=hidden name=p value=search> ? )) да и тут $query = "SELECT * FROM $table WHERE `text` LIKE '%".$text."%' ORDER BY `id`;"; можно лишних кавычек-точек не ставить: $query = "SELECT * FROM $table WHERE `text` LIKE '%$text%' ORDER BY `id`;"; а так все хорошо только в строке $mpt=trim($_GET['s']); выдается ошибочка но ее можно законно задавить собачкой @$mpt=trim($_GET['s']) или переделать немного ))) но мне и так понравилось, хорошая работа
Ну сначала было ?p=search, но почему-то так не работает, забыла убрать ) Ну это на тот случай, когда приходится вставлять элемент массива, тогда без кавычек не обойтись: "...`text`='".arr['text']."';". Просто привычка ) Ошибка была, когда строка выглядела так: if( !isset( $_GET['search'] ) || empty(trim($_GET['search'])) Поэтому, заменила на переменную, ошибка пропала. Хотя не поняла, почему ) Просто такой метод иногда помогает ОК, спасибо всем Сча начну новую тему, участвуйте
Потому что есть методы POST и GET и соответствующие им массивы $_POST и $_GET empty Позволяет в этом случае обойтись и без isset но не терпит функций внутри (в данном случае trim) Правильная ))
у меня тоже выпала ошибка и ваше решение мне очень понравилось но при первом вызове страницы у некоторых (в зависимости от настроек php) вывалится предупреждение что индекы S пустой в выражении $mpt=trim($_GET['s']); я вот про какую ошибочку ))
PHP: <?php $text=mysql_real_escape_string($text); $text=addCslashes($text, '%_'); ?> А если так ? О_О Где-то прочитала...