|
|
|
| Решил написать "модуль" поиска информации на сайте.
Вся информация, которая может понадобится пользователю, находится в таблицах БД. Пока делаю так. На странице элементарная форма
<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 %слово%
|
А теперь вопрос - стоит ли все делать именно так, или есть более оптимальный и "правильный" вариант?
И еще вопрос. В результате поиска я вывожу строку, в которой содержится искомое слово. Кто подскажет, как можно "подсветить" в этой строке именно то слово, которое служило критерием поиска? Например, запрос на поиск по слову "снег" - найдено в БД поле с текстом "На улице шел снег", вот как можно вывести эту строку таким образом, чтобы в ней слово "снег" было, например, выделено жирным?
Заранее спасибо.
З.Ы. Вообще поиск у меня идет по названиям товаров и их описаниям в магазине. | |
|
|
|
|
|
|
|
для: vitroot
(13.03.2008 в 05:50)
| | Лично я вижу более оптимального пути. Но все же,может вы это сделали,но нужно хорошо отфильтрировать входящие данные хотя бы с помощью trim() i mysql_escape_string() | |
|
|
|
|
|
|
|
для: Akdmeh
(13.03.2008 в 10:33)
| | я же и написал выше, что не буду показывать здесь все фильтры и методы проверки и защиты, поскольку это к вопросу не относится, но сама проверка, конечно же есть и очень тщательная. А вот вопрос по поводу "подцветки" искомого(ых) слов(а) - вот это пока для меня задачка :) | |
|
|
|
|
|
|
|
для: 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['...']?>
|
но красит и в тегах и везде где только найдёт :) | |
|
|
|
|
|
|
|
для: exp
(14.03.2008 в 05:07)
| | передаем страницу GET-параметр со словом ?word=слово
перед выводом, заменяем str_replace(слово, <b>слово</b>, выводимый текст) или регуляркой | |
|
|
|
|
|
|
|
для: Петр
(14.03.2008 в 06:09)
| | Вот спасибо! И почему я не подумал про str_replace()? :) Огромное спасибо, только что сделал за 5 сек и все работает как надо :) | |
|
|
|
|
|
|
|
для: vitroot
(13.03.2008 в 05:50)
| | А почему не воспользоваться полнотекстовым поиском? В смысле,
MATCH (...) AGAINST (...)
|
| |
|
|
|
|
|
|
|
для: Киналь
(14.03.2008 в 07:39)
| | >А почему не воспользоваться полнотекстовым поиском? В смысле,
А вы сами пробовали что-нить искать таким образом - ужас (популярные слова просто банит) | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: exp
(14.03.2008 в 19:47)
| | mihdan
а в цикле обрезать окончания?
и по корню искать?
и проверять на длинну слова | |
|
|
|