[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск\вывод
DeeKeiD
Написал поиск по базе...
Сомневаюсь в его быстроте,функциональности и вобще я 1ый раз пишу поиск по базе.

Код:
PHP
<?php
if($_POST['action']=="search") {
    $tovar = $_POST['tovar'];
    $res=mysql_query("SELECT * FROM `tovari` WHERE `name` = '$tovar' OR `desc` = '$tovar'");
    echo'
<table border="0" width="100%">
    <tr>
        <td width="30%"><b>Название</b></td>
        <td width="60%"><b>Описание</b></td>
        <td width="10%"><b>Инфо</b></td>
    </tr>
</table>'
;
    while($row=mysql_fetch_array($res)) {
    echo '
<table border="0" width="100%">
    <tr>
        <td width="30%">'
.$row[name].'</td>
        <td width="60%">'
.$row[desc].'</td>
        <td width="10%"><a href="/catalog/view/'
.$row[id].'/">инфо</a></td>
    </tr>
</table>'
;
    }
}
else
{
echo '
<form action="/search/" method="post"> 

Поиск товара<br><input type="text" name="tovar" size="60" value=""><br> 

<input type="submit" name="submit" value="Искать"> 

<input type="reset" name="reset" value="Очистить"> 
<input type="hidden" name="action" value="search">
</form>'
;
}


Что можете посоветовать? Поиск писал под 1 таблицу
п.с по поводу защиты от иньекции знаю,ето пока только наброски



Спустя 18 минут, 3 секунды (25.07.2009 - 05:07) kirik написал(а):
Наверное лучше воспользоваться LIKE поиском (с процентами). Погляди тут пример

Спустя 1 минута, 26 секунд (25.07.2009 - 05:09) PandoraBox2007 написал(а):
если делаеш поиск полнотекстовый используй сесии для кеширования результатов а то нападающие покидают запросов поиска и БД умрет

что б быстро работало правильные индексы нужны

http://www.mysql.ru/docs/man/Fulltext_Search.html

Спустя 3 часа, 49 минут, 50 секунд (25.07.2009 - 08:58) DeeKeiD написал(а):
Цитата (kirik @ 25.07.2009 - 02:07)
Наверное лучше воспользоваться LIKE поиском (с процентами). Погляди тут пример

можно,самый простой пример использования такого поиска для 1 таблицы?
я попытался собрать в 1 целое отрывки кода которые на том сайте,не получилось

Спустя 25 минут, 54 секунды (25.07.2009 - 09:24) Nikitian написал(а):
Вообще полнотекстовый поиск - зло. Не даром тот же innodb его не поддерживает. Конечно для начинания не очень хорошо, но лучше думать в правильном направлении: поиск по хэшам словоформ быстрее и даёт больший результат. В кратце: храните хэши словоформ (основ слова, результаты обработки стеммером). Поиск по хэшам, наприме crc32 делается в момент, особенно если индексы ставить правильно + такой поиск ищет неточные вхождения типа "коньяк", "коньяка", "коньяком"... Именно так в той или иной степени реализованы поиски в нормальных движках.

Пример с полнотекстовым поиском:
SQL
select * from tbl where field like "_kyky%"

Это означает, что мы ищем записи, где поле field имеет строку, где первая буква любая, далее идёт словосочетание "kyky", после которого всё, что угодно. ТАким образом видно, что используются специальные символы, которые необходимо экранировать в самой поисковой строке: % - любые символы в любом количестве, _ - любой один символ. Экранировтаь бэкслешем: \% \_

Спустя 22 минуты, 58 секунд (25.07.2009 - 09:47) DeeKeiD написал(а):
если я правльно понял тогда
PHP
<?
    
$word $_POST['word'];
    
$res mysql_query("SELECT * FROM `table` WHERE field LIKE "$word" LIMIT 0,5");
    while(
$row mysql_fetch_array($res)) {
        echo 
"$row[name]";
    }
будет работать?

Спустя 2 минуты, 45 секунд (25.07.2009 - 09:50) Nikitian написал(а):
PHP
<?
    $word = $_POST['word'];
    $res = mysql_query("SELECT * FROM `table` WHERE field LIKE '".mysql_real_escape_string(str_replace('_','\_',str_replace('%','\%',$word)))."%' LIMIT 0,5");
    while($row = mysql_fetch_array($res)) {
        echo "$row[name]";
    }

Спустя 8 минут, 19 секунд (25.07.2009 - 09:58) DeeKeiD написал(а):
хм както он коряво ищет ;(

Спустя 28 минут, 52 секунды (25.07.2009 - 10:27) Krevedko написал(а):
я сегодня как раз буду пытаться делать поиск...если что, отпишу результаты

Спустя 25 минут, 50 секунд (25.07.2009 - 10:53) PandoraBox2007 написал(а):
PHP
<?php

    $word 
$_POST['word'];
    
$word addCslashes($word'%_'); // чтобы символы _ и % использовались, как маски, то добавляйте слеши вручную.
    
$word str_replace('\\''\\\\'$word); // Сначала заменять один слеш на два, с помощью такого
    
$word mysql_real_escape_string($word); // затем (можно наравне со всеми другими данными, идущими в запрос) прослешиваем
    
$word addCslashes($word'_%'); // а затем, если хотим, чтобы _ и % соответствовали точно самим себе, делаем
    
    
$res mysql_query("SELECT * FROM `table` WHERE field LIKE '$word' LIMIT 0,5");
    while(
$row mysql_fetch_array($res))
    {
      echo 
$row['name'];
    }

Спустя 5 часов, 22 минуты, 1 секунда (25.07.2009 - 16:15) Gram написал(а):
пропускаете
PHP
$result mysql_query($sql$db);
if(!
$result) exit("Error:".mysql_error());


и цикл следует запускать в том случае, если $result не пуст.
PHP
if(mysql_num_rows($result)>0)
 {
   
// здесь должен находиться ваш цикл
 
}

Спустя 20 часов, 10 минут, 26 секунд (26.07.2009 - 12:25) DeeKeiD написал(а):
хм почему у меня не работает
PHP
$res mysql_query("SELECT * FROM `table` WHERE field OR name OR description LIKE '$word' LIMIT 0,5");


_____________
Бесполезно просить пощады у цезаря
Фатальная ошибка : Звонок в неопределенную функцию ©
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.