Поиск слова в таблице

vmnetwork

Новичок
Поиск слова в таблице

В общем-то глупый достаточно наверное вопрос, но никак не получается реализовать простешую функцию - поиск
PHP:
$search = $_REQUEST['search'];
$query = "select * from catalog where catalogtext like '%$search%'";           
$result= mysql_query($query);
while ($qry = mysql_fetch_array($result)) {
if (!$result)
print 'Результатов нет';

else {
print $qry['catalogtitle'];
print '<br>';
  } 
}
Пробовал вот так но вообще ничего не выдает :( что не праильно то?
 

Вурдалак

Продвинутый новичок
Нет, ты понял неправильно :)

-~{}~ 11.01.10 03:22:

Кстати, небольшой оффтопик по поводу статьи http://phpfaq.ru/slashes

Во-вторых, следует обратить внимание на то, что ни одна из функций, добавляющих слеши, не добавляет их к метасимволам поиска "%" и "_", используемым в операторе LIKE. Поэтому, если вы используете этот оператор, и не хотите, чтобы символы _ и % использовались, как маски, то добавляйте слеши вручную. Это можно сделать командой
$data = addCslashes($data, '%_');
Внимание - это не addslashes! В имени этой функции есть дополнительная буква "c".

Таким образом получается, что переменные, используемые в операторе LIKE мы должны обрабатывать отдельно.
сначала заменять один слеш на два, с помощью такого, к примеру, кода:
$var=str_replace('\\','\\\\',$var);
затем (можно наравне со всеми другими данными, идущими в запрос) прослешиваем:
$var=mysql_real_escape_string($var);
а затем, если хотим, чтобы _ и % соответствовали точно самим себе, делаем
$var=addCslashes($var, '_%');
IMHO, корректнее так:
PHP:
<?php
$var = addCslashes($var, '_%\\');
$var = mysql_real_escape_string($var);
Ибо сначала мы должны экранировать спец. символы паттерна для LIKE, а уже потом — строковое значение.

Результат один, но всё же, всё же...
 

vmnetwork

Новичок
Автор оригинала: Вурдалак
Нет, ты понял неправильно :)

-~{}~ 11.01.10 03:22:

Кстати, небольшой оффтопик по поводу статьи http://phpfaq.ru/slashes


IMHO, корректнее так:
PHP:
<?php
$var = addCslashes($var, '_%\\');
$var = mysql_real_escape_string($var);
Ибо сначала мы должны экранировать спец. символы паттерна для LIKE, а уже потом — строковое значение.

Результат один, но всё же, всё же...
Вроде как получилось..

PHP:
$result = mysql_query("SELECT * FROM cat_catalog WHERE catalogtext LIKE '%$search%' OR catalogtitle LIKE '%$search%'");

while ($qry = mysql_fetch_array($result)) {

if (!$result){
print 'Результатов нет';
}

else {
print '<a href="?section=d&idcatalog='.$qry['idcatalog'].'">-';
print $qry['catalogtitle'];
print '</a><br>';

 }
}
Только вот немного странновато ищет, не выдает надпись "Результатов нет"
 

SiZE

Новичок
У тебя если результатов нет цикл то не выполнится :) Можешь так:
PHP:
$q = mysql_query("SELECT * FROM cat_catalog WHERE catalogtext LIKE '%".$search."%' OR catalogtitle LIKE '%".$search."%'");

if ( !mysql_num_rows($q) ) {
  echo "Empty";
} else {
 while ($r = mysql_fetch_array($q)) {
  echo '<a href="?section=d&idcatalog='.$r['idcatalog'].'">-'.$r['catalogtitle'].'</a><br>';
 } 
}
 
Сверху