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

Форум PHP

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

 

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

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

тема: Установка поиска на сайт
 
 автор: vovan   (27.10.2010 в 15:18)   письмо автору
 
 

Доброго времени суток.
Обращаюсь к вам с просьбой помочь в решении следующего вопроса.
Уже на протяжении некоторого времени пытаюсь установить поиск на сайт, который на писан на PHP
На данный момент пока получилось следующее:

1) Форма поиска выглядит следующим образом
<table width="500" border="0" align="center" >
<form action="view_search.php" method="post" name="form_s">
<p><input name="search" type="text" size="50" maxlength="400">
<input class="search_b" name="submit_s" type="submit" value="Поиск">
</p>
</form>
</table>

2) Затем $search летит в файл-обработчик view_search.php

3) Следущим шагом идут проверки данной переменной:

if (isset($_POST['submit_s']))
{
$submit_s = $_POST['submit_s'];
}

if (isset($_POST['search']))
{
$search = $_POST['search'];
}

if (isset($submit_s))
{

if (empty($search) or strlen($search) < 4)
{
exit ("<p>Поисковый запрос не введен, либо он менее 4-х символов.</p>");
}
$search = trim($search);
$search = stripslashes($search);
$search = htmlspecialchars($search);
}

else
{
exit("<p>Вы обратились к файлу без необходимых параметров.</p>");
}


4) И наконец сам код выборки, задача, которого найти в таблице video, в поле title, переменную $search

$result = mysql_query("SELECT * FROM video WHERE title LIKE '%$search%'",$db);

if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)

{
$myrow = mysql_fetch_array($result);

Все работает. Но выполняется только точный поиск. Тоесть, если задать поиск словосочетания, например, "скачать беслатно фильм", то будет происходить поиск именно этого словосочетания, но фразу скачать фильм беслатно, художественный фильм, скачать мультфильм, и т.д. уже находить не будет. Поэтому возникает вопрос, как усовершенствовать поиск, чтобы он искал каждое слово поотдельности и не обращал внимание на окончание в слове? Также хотелось узнать, как подсветить искомые слова другим цветом в результатах поиска?
Заранее огромное спасибо

  Ответить  
 
 автор: elenaki   (27.10.2010 в 15:44)   письмо автору
 
   для: vovan   (27.10.2010 в 15:18)
 

1. разбиваете строку запроса (поле из формы) по пробелам на слова.
2. отсекаете слова меньше 3 букв
3. в цикле делаете поиск по оставшимся словам
4. выводите результаты

не обращать внимания на окончания я пока не умею (тут надо русский язык хорошо знать и скрипт ему научить)

  Ответить  
 
 автор: psychomc   (27.10.2010 в 15:52)   письмо автору
 
   для: elenaki   (27.10.2010 в 15:44)
 

и еще он явно перемудрил с submit_s -ами.

точнее сказать алгоритм полный бред - проверяем существование переменной 1, если она существует создаем переменную 2, если переменная 2 существует - что-то делаем...почему бы сразу не отталкиваться от переменной 1 ?

  Ответить  
 
 автор: vovan   (27.10.2010 в 15:57)   письмо автору
 
   для: elenaki   (27.10.2010 в 15:44)
 

>1. разбиваете строку запроса (поле из формы) по пробелам на слова.
>2. отсекаете слова меньше 3 букв
>3. в цикле делаете поиск по оставшимся словам
>4. выводите результаты
>
>не обращать внимания на окончания я пока не умею (тут надо русский язык хорошо знать и скрипт ему научить)

Спасибо, за быстрый ответ.
А можно поподробней, т.к. я в php пока не гуру.
Буду весьма признательным :)

  Ответить  
 
 автор: julpierto   (29.10.2010 в 16:54)   письмо автору
 
   для: vovan   (27.10.2010 в 15:57)
 

попробуй использовать регулярные выражения:
Например, имеется такой шаблон:

победитель получит
((золотую|позолоченный)
(медаль|кубок))

и строка, в которой ищутся совпадения с этим шаблоном: «победитель получит золотую медаль». Тогда кроме этой фразы будут еще захвачены и выданы как результаты поиска следующие совпадения в подвыражениях: «золотую медаль», «золотую», «медаль», пронумерованные 1, 2, 3 соответственно.

http://www.intuit.ru/department/pl/plphp/class/free/13/4.html

  Ответить  
 
 автор: Николай2357   (29.10.2010 в 18:28)   письмо автору
 
   для: elenaki   (27.10.2010 в 15:44)
 

3. в цикле делаете поиск по оставшимся словам
В цикле наверное лучше собрать запрос через OR. Гонять запросы в цикле накладненько будет.
Правда найдет и все слова по отдельности.

  Ответить  
 
 автор: Николай2357   (29.10.2010 в 18:33)   письмо автору
 
   для: vovan   (27.10.2010 в 15:18)
 

На счет подсветки - была шикарная тема тут, не нашел.
Вот у меня оттуда функция осталась, немного подработанная правда.
<?
    
function hidlightText($content$pattern
    {  
        
$pattern trim(preg_replace('#\s+#'' '$pattern));
        
$arr explode(' '$pattern); 

        if(
preg_match_all('#('.implode('|'array_map('preg_quote'$arr)).')#iu'$content$outPREG_OFFSET_CAPTURE)) 
        {  
            
$result NULL
            
$src 0
                     
            foreach(
$out[0] as $value)   
            {               
                if(
$value[1] > $src)   
                
$result .= htmlChars(substr($content$src$value[1] - $src));  
              
                
$src $value[1] + strlen($value[0]);   
                
$result .= '<span style="background-color:#A9DAE0">'.htmlChars($value[0]).'</span>';   
            } 
            
$result .= htmlChars(substr($content$src));                         
        }     

        return 
$result
    }

  Ответить  
 
 автор: Николай2357   (29.10.2010 в 18:35)   письмо автору
 
   для: Николай2357   (29.10.2010 в 18:33)
 

Нашел.
По поисковому запросу "сырец")))
Наступит склероз, что делать стану...

  Ответить  
 
 автор: Николай2357   (29.10.2010 в 19:12)   письмо автору
 
   для: Николай2357   (29.10.2010 в 18:33)
 

Прошу прощения . Функцию
htmlChars()
нужно заменить на
htmlspecialchars()
Это у меня в скрипте были свои замуты))

  Ответить  
Rambler's Top100
вверх

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