Хочу поделиться с теми, кто зарабатывает на своем сайте (PHP), возможно на интернет магазине, как сделать более удобным свой ресурс для ваших клиентов. Я расскажу, как сделать систему поиска на своем сайте. При помощи поиска ваш покупатель может гораздо быстрее найти нужный ему товар и покупатель останется доволен, или нет! Но его недовольство будет не из-за поисковика...
Практически во всех движках поиск уже встроен, если у вас он есть, то этот пост вам не нужен, но быть может вам потребуется ещё одна форма поиска или допилить существующий, тогда велком в тему, буду рад помочь!
Многие пользуются формой поиска от Яндекса или Гугла, что с одной стороны очень удобно, не надо быть программистом, что бы вставить пару строк в HTML документ. Но есть минус этих поисковиков - это время ушедшее на индексацию страницы. Например сегодня вы добавили товар, а в результатах поиска он появится только через день - два, а с Яндендексом и того дольше. Или наоборот, вы удалили товар, а он по прежнему появляется в поисковой выдачи. Покупатель переходит по ссылке, а там говорится: Товара нет в наличии. Всем известно, что скажет покупатель в данной ситуации? По этому, я считаю, что свой поиск - это лучше. Свой поиск работает на прямую со своей базой, и будет выдавать только то что в ней есть.
Ну, давайте начнем уже...
Конечно же любой поиск начинается с вода какой то фразы/слова, водится это слово в форму. Создаем такую форму:
- Код: Выделить всё
<!-- Search -->
<div class="search">
<form action="search.php" method="get">
<input type="search" name="word" placeholder="Поиск" />
</form>
</div>
<!-- END Search -->
Что в этой форме:
Данная форма не имеет кнопки, только поле для вода слова, но по желанию кнопку можно добавить.
Для старта поиска следует нажать кнопку Enter.
Блок div с классом search, можете разукрасить при помощи css, как вам угодно. Если у вас своя задумка для вставки форму, можете удалить этот блок, я его написал для удобства.
action="search.php" - отдает команду куда перейти после старта.
method="get" - метод поиска. В данном случаи выбран метод GET. Это значит, что поисковое слово будет браться из URL.
type="search" - команда "поле поиска".
name="word" - название поля. В дальнейшем имя word будет обрабатываться, как переменная.
placeholder="Поиск" - выводится слово Поиск в поле, когда система не выполняет поиск.
Переходим к приему слова и его обработки. Содержимое файла search.php (команда передала из формы на этот файл: action="search.php"). Что бы было понятнее, прокомментирую по возможности код:
- Код: Выделить всё
<?php
$connect = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname); // Подключаемся к БД. Переменным должно быть назначены параметры доступа БД
if (!$connect) // Проверка на ошибку подключения
{
exit('MySQL Error: ' . mysqli_error($connect)); // Если подключится не удалось, выводим ошибку
}
$word = (isset($_GET['word'])) ? $_GET['word'] : null; Забиваем переменную $word
$word = mysqli_real_escape_string($connect, trim($word)); // Экранируем символы и убираем пробелы
if(empty($word)) // Проверяем ведено ли слово
{
echo 'Не ведено слова.'; // Если слово не введено, выводим сообщение ошибки
}
else if (iconv_strlen($word, 'utf-8') < 3) // Проверяем длину слова (мин 3 символа)
{
echo 'Слово не может быть менее трех символов.'; // Если слово менее трех символов
}
else if (iconv_strlen($word, 'utf-8') > 20) // Проверяем длину слова (макс 20 символов)
{
echo 'Слово не может быть более двадцати символов.'; // Если слово более двадцати символов
}
else // Если в ходе проверок ни каких ошибок не выявлено, двигаемся дальше
{
$sql = 'SELECT *
FROM article
WHERE article_text
LIKE "%' . $word . '%"'; // Составляем запрос
$query = mysqli_query($connect, $sql); // Выполняем запрос
if (!$query) // Проверяем запрос
{
echo 'Ошибка базы данных.'; // Если возникли проблемы при выполнения запроса
}
else // Все замечательно! Двигаемся дальше
{
while ($row = mysqli_fetch_assoc($query)) // Составляем массив
{
echo $row['article_title'] . '<br />'; // Выводим список заголовков статей, в которых было найдено веденное слово
}
}
}
Вот пожалуй и все.
В примере я писал, как поиск по статьям, но его можно заменить, например на описание товара или название товара, да, как угодно!
Если есть вопросы - задавайте.
Прошу простить меня за допущенные ошибки в тексте, писать тексты не мой конек.
Надеюсь информация была полезной.
Спасибо за внимание.