Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск по сайту
 
 автор: vitroot   (13.03.2008 в 05:50)   письмо автору
 
 

Решил написать "модуль" поиска информации на сайте.
Вся информация, которая может понадобится пользователю, находится в таблицах БД. Пока делаю так. На странице элементарная форма


<form action="?page=search" method="post">
   <input type="text" name="search_word">
   <input type="submit" name="search">
</form>


далее всю работу делает скрипт search.php


// не буду описывать проверку данных и разные методы безопасности
$word=$_POST["search_word"];
$q=split(" ",$word,3);
// В результате чего получаем удобный массив данных для поиска вида Array([0] => слово [1] => слово [2] => слово)
// Далее обрабатываю каждый элемен массива и произвожу поиск в таблицах БД через LIKE %слово%


А теперь вопрос - стоит ли все делать именно так, или есть более оптимальный и "правильный" вариант?
И еще вопрос. В результате поиска я вывожу строку, в которой содержится искомое слово. Кто подскажет, как можно "подсветить" в этой строке именно то слово, которое служило критерием поиска? Например, запрос на поиск по слову "снег" - найдено в БД поле с текстом "На улице шел снег", вот как можно вывести эту строку таким образом, чтобы в ней слово "снег" было, например, выделено жирным?

Заранее спасибо.

З.Ы. Вообще поиск у меня идет по названиям товаров и их описаниям в магазине.

   
 
 автор: Akdmeh   (13.03.2008 в 10:33)   письмо автору
 
   для: vitroot   (13.03.2008 в 05:50)
 

Лично я вижу более оптимального пути. Но все же,может вы это сделали,но нужно хорошо отфильтрировать входящие данные хотя бы с помощью trim() i mysql_escape_string()

   
 
 автор: vitroot   (13.03.2008 в 10:46)   письмо автору
 
   для: Akdmeh   (13.03.2008 в 10:33)
 

я же и написал выше, что не буду показывать здесь все фильтры и методы проверки и защиты, поскольку это к вопросу не относится, но сама проверка, конечно же есть и очень тщательная. А вот вопрос по поводу "подцветки" искомого(ых) слов(а) - вот это пока для меня задачка :)

   
 
 автор: exp   (14.03.2008 в 05:07)   письмо автору
 
   для: vitroot   (13.03.2008 в 10:46)
 

кажется где-то видел такое при помощи javascript делалось

но javascript не знаю ,и смог только до такого додуматься :)
внизу страницы сделать
<script type="text/javascript" language="JavaScript1.2" src="2.js"></script>
</body></html>

и 2.js примерно такого содержания
function cr_word(x) {
 var s = String(x)
 s = '\\b(' + s + ')\\b';
 re = new RegExp(s, "gi");
 alls = document.body.outerHTML
 alls = alls.replace(re, '<font color="red">$1</font>');
document.body.innerHTML = alls
}
cr_word('PHP');
// здесь вместо php <?=$_POST['...']?>


но красит и в тегах и везде где только найдёт :)

   
 
 автор: Петр   (14.03.2008 в 06:09)   письмо автору
 
   для: exp   (14.03.2008 в 05:07)
 

передаем страницу GET-параметр со словом ?word=слово
перед выводом, заменяем str_replace(слово, <b>слово</b>, выводимый текст) или регуляркой

   
 
 автор: vitroot   (14.03.2008 в 12:40)   письмо автору
 
   для: Петр   (14.03.2008 в 06:09)
 

Вот спасибо! И почему я не подумал про str_replace()? :) Огромное спасибо, только что сделал за 5 сек и все работает как надо :)

   
 
 автор: Киналь   (14.03.2008 в 07:39)   письмо автору
 
   для: vitroot   (13.03.2008 в 05:50)
 

А почему не воспользоваться полнотекстовым поиском? В смысле,

MATCH (...) AGAINST (...)

   
 
 автор: mihdan   (14.03.2008 в 11:48)   письмо автору
 
   для: Киналь   (14.03.2008 в 07:39)
 

>А почему не воспользоваться полнотекстовым поиском? В смысле,
А вы сами пробовали что-нить искать таким образом - ужас (популярные слова просто банит)

   
 
 автор: exp   (14.03.2008 в 19:47)   письмо автору
 
   для: mihdan   (14.03.2008 в 11:48)
 

немного разобрался кажется с javascript
получается что-то похожее на это
function cr_word(x) {

 var doc = document.body;
 var s = '\\b(' + String(x) + ')\\b';
 var re = new RegExp(s, "gi");
 var y = '';
 if (navigator.appName == 'Microsoft Internet Explorer') {
 
    var myRe = /<[^>]+>|[^<]+/gm;
    while(key = myRe.exec(doc.innerHTML)) 
    {
     if (key[0].substr(0,1) == '<') y += key[0];
     else y += key[0].replace(re, '<font color="red">$1</font>');
    }
 } else {
 
  var arrayOfStrings = doc.innerHTML.split(/(<[^>]+>)/gm);
  for(var key in arrayOfStrings)
  {
    if (key%2) y += arrayOfStrings[key];
    else y += arrayOfStrings[key].replace(re, '<font color="red">$1</font>');
  }
  
 }
 doc.innerHTML = y;
}
как альтернатива str_replace

   
 
 автор: moonfox   (15.03.2008 в 20:49)   письмо автору
 
   для: exp   (14.03.2008 в 19:47)
 

mihdan

а в цикле обрезать окончания?
и по корню искать?
и проверять на длинну слова

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования