Простой поиск по сайту

Пятница, 27 августа 2010 г.
Рубрика: PHP программирование -> MySQL -> Готовые решения
Метки: |
Просмотров: 2310
Подписаться на комментарии по RSS

Допустим у Вас есть сайт и имеется База Данных, тогда текст, в котором будет искать пользователь должен храниться в Базе Данных, если всё так, то читайте дальше.

На большинстве сайтов имеются поиски по сайту, но есть те, кто не знают как организовать поиск, да ещё и с малыми знаниями в php и mysql, ведь чтобы создать нормальный поиск, нужно не мало времени. Но в интернете полно подходящих скриптов, можно было бы взять один из них, но не все предпочитают не понятные скрипты, написанные не понятно как, и не понятно кем. Тогда им нужно создать свой, простой, удобный, и легко настраиваемый поиск по сайту. Именно такой поиск мы и рассмотрим с Вами в этом уроке.

Представим у нас есть сайт,

На котором выложены статьи,

И эти статьи находятся в Базе Данных,

И у нас будет отдельный файл с поиском(так проще для понимания), тогда:

Создаём файл search.php

<form action="scr_search.php" method="post">
<tt>
Поиск<br />
<input type="text" name="search" value="что искать?" onclick="search.value='';"/><br /><br />
<input type="submit" name="submit" value="искать"/>
</tt>
</form>

У нас будет форма с обработчиком scr_search.php, в форме есть текстовое поле, изначально в котором есть строка "что искать?", и при нажатии на поле строка исчезает.

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

файл scr_search.php

<?php
/**
 * Подключаемся к базе
 */
$db=mysql_connect("localhost", "root", "");
mysql_select_db("mybase", $db);
/**
 * Обрабатываем полученные данные из формы
 */
if(isset($_POST["search"])and($_POST["search"]!=='')){
$search=$_POST["search"];
$search=trim($search);
$search=htmlspecialchars($search);
$search=stripslashes($search);
if(strlen($search)>=4){
/**
 * Вытаскиваем из базы всё по этому запросу
 */
$result=mysql_query("SELECT * FROM articles WHERE MATCH (text) AGAINST ($search)");
$myrow=mysql_fetch_array($result);
/**
 * Если что-то есть, то выводим
 */
if(!empty($myrow["id"])){
echo $myrow["title"]."<br />".$myrow["description"]."<br /><br />";
}else{
die("По Вашему запросу ни чего не найдено");
}
}else{
die("Длина текста должна быть не менее четырёх символов");
}
}else{
die("Вы не ввели данные для поиска");
}

Сразу же поясним при помощи чего искали:

Мы Вытаскивали из базы все данные о статьях где MATCH(в тексте) AGAINST(встречается наша строка).

И для того чтобы это работало, надо в Базе Данных поставить полный текст в том поле, где Вы собираетесь искать, для этого нажмите на букву Т рядом с описанием поля.

Этот приём очень слабый, и поэтому требует вводить слова не меньше 4-х символов, поэтому сделаем пояснение на странице с поиском:

<tt>
Вводимый текст не должен быть меньше 4-х символов<br /><br />
<form action="scr_search.php" method="post">
Поиск<br />
<input type="text" name="search" value="что искать?" onclick="search.value='';"/><br /><br />
<input type="submit" name="submit" value="искать"/>
</form>
</tt>
Поделиться...
twitter.com facebook.com vkontakte.ru mail.ru google.com bobrdobr.ru
Комментариев: 5
  1. php лишний раз доказывает свою полезность простотой решения важный и полезных задач

  2. 2011-09-24 в 15:07:21 | Владимир

    А можно ли его, как-то настроить, чтобы он мог находить слова из менее 4-х символов

  3. А можно ли его, как-то настроить, чтобы он мог находить слова из менее 4-х символов

    К сожалению нет, но мы вскоре напишем урок по созданию своего поиска, который сможет работать с поисковыми запросами длиной от 1 символа.

  4. А почему нельзя -- ведь всего то if(strlen($search)>=4) --- меняем на нужное !!

  5. Ромка

    Не всё так просто... Это особенность функций MATCH и AGAINST.

    Так что не менее 4-х символов...

    И да, ты думаешь что я бы не догадался поменять условие??? Ты меня недооцениваешь =)
Оставьте свой комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор, укажите пароль и свой действующий email.

(обязательно)