Как создать поиск по сайту c помощью PHP

Поиск на сайте — это важный инструмент, который повышает продажи и делает коммуникацию с посетителем удобной. В статье пошагово рассказываем, как самостоятельно добавить поисковую строку, создать связь с базами данных и оптимизировать этот процесс, используя PHP.

Почему каждому сайту нужен поиск

Пользователи привыкли мгновенно получать информацию. Без поиска им придется просматривать множество страниц, чтобы найти нужную. Это может привести к разочарованию: посетитель покинет сайт и ничего не купит.

Кроме того, поиск выполняет роль навигационного инструмента. Он помогает ориентироваться в структуре сайта, и благодаря этому пользователи легко находят нужные товары, разделы и материалы.

Как работает PHP поиск на сайте

Основные компоненты поиска — это строка ввода, кнопка и результат (HTML-блок, в котором отображаются результаты, полученные от сервера).

PHP ориентирован на серверную обработку запроса. Пользователь вводит символы в форму, нажимает на кнопку, и запрос отправляется на сервер для обработки.

Процесс работы PHP поиска на сайте можно разделить на несколько этапов:

  • Получение поискового запроса от пользователя. Посетитель вводит ключевые слова, а PHP обрабатывает и отправляет его на сервер, где будет выполнен поиск.
  • Обработка запроса на сервере. PHP-скрипт получает запрос и формирует SQL-запрос для поиска в базе данных.
  • Поиск. База данных обрабатывает запрос, сопоставляя ключевые слова пользователя с соответствующими записями.
  • Вывод результатов. PHP обрабатывает итоги поиска и формирует страницу с найденными записями.

В итоге пользователь видит список найденного: статьи, продукты или другие данные, которые соответствуют запросу. Давайте подробнее разберемся, как создать поиск на сайте и подключить к нему PHP.

Шаг 1. Создание поиска на сайте

Сначала необходимо создать базовую поисковую строку, которая будет служить точкой входа. Программирование интерфейса потребует использования элементов HTML и стилизации с помощью CSS. Подробнее об этом писали в прошлой статье.

Форма поиска — это простая HTML-структура, которая включает в себя текстовое поле и кнопку для отправки формы. Когда пользователь вводит текст и нажимает кнопку, запрос отправляется на сервер, где с помощью PHP обрабатывается и возвращает соответствующие результаты. Пример создания HTML-поиска:

<form action="search.php" method="get">
    <input type="text" name="query" placeholder="Введите запрос...">
    <button type="submit">Искать</button>
</form>
Так выглядит создание простого HTML-поиска

Шаг 2. Настройка серверной части с помощью PHP

Теперь необходимо настроить часть, которая будет обрабатывать запросы пользователей, искать соответствующие данные в базе и возвращать результаты. В этом разделе мы рассмотрим, как работает поиск по сайту PHP.

Один из ключевых элементов на этом этапе — подключение к базе с данными, по которым будет выполняться поиск. Для этого можно использовать MySQL. Это система управления реляционными базами данных (RDBMS), которая нужна для хранения и организации данных в структурированном виде. MySQL — программное обеспечение с открытым исходным кодом. Это делает его доступным для использования и модификации без лицензионных ограничений.

Допустим, у вас интернет-магазин. Здесь MySQL может понадобиться для хранения информации о товарах (название, цена, описание), заказах (список товаров, дата, клиент), а также данных о пользователях (имя, адрес электронной почты, адрес доставки). Когда пользователь ищет товар или оформляет заказ, MySQL обрабатывает соответствующие запросы и возвращает нужные данные для отображения на сайте.

Простой пример подключения к MySQL выглядит вот так:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";

// Создание подключения
$conn = new mysqli($servername, $username, $password, $dbname);

// Проверка подключения
if ($conn->connect_error) {
    die("Подключение не удалось: " . $conn->connect_error);
}
?>
Как подключить MySQL

Разберем каждый элемент подробнее:

  • $servername = «localhost»; — имя сервера базы данных. Если сервер находится на той же машине, что и сайт, указывается localhost. В противном случае — IP-адрес или доменное имя сервера базы данных.
  • $username = «username»; — имя пользователя для доступа к базе данных.
  • $password = «password»; — пароль, связанный с учетной записью пользователя базы данных.
  • $dbname = «database_name»; — имя базы данных, в которой будет осуществляться поиск.
  • $conn = new mysqli($servername, $username, $password, $dbname); — создание объекта mysqli, который устанавливает соединение с базой данных, используя указанные параметры.
  • if ($conn->connect_error) { die(«Подключение не удалось: » . $conn->connect_error); } — проверка успешности подключения. Если возникла ошибка, скрипт завершит выполнение и выведет соответствующее сообщение.

Шаг 3. Обработка результатов поиска

Когда SQL-запрос к базе выполнен, он возвращает результат в виде набора данных. Его необходимо обработать с помощью PHP, чтобы извлечь отдельные записи и преобразовать их в HTML-код, который будет отображен на странице.

PHP предоставляет несколько методов для работы с результатами SQL-запросов. Один из наиболее распространенных — это fetch_assoc(), который возвращает строки запроса в виде ассоциативного массива. Он содержит пары ключ-значение, где ключами являются имена столбцов таблицы, а значениями — соответствующие данные.

Это может выглядеть примерно вот так:

<?php
while($row = $result->fetch_assoc()) {
    echo "<div>";
    echo "<h3>" . $row["name"] . "</h3>";
    echo "<p>" . $row["description"] . "</p>";
    echo "</div>";
}
?>
Код для обработки результатов поиска

Разбор запроса:

  • while($row = $result->fetch_assoc()) — цикл while используется для перебора всех строк, возвращенных запросом. В каждой итерации цикла функция fetch_assoc() извлекает следующую строку результата в виде ассоциативного массива и сохраняет ее в переменной $row.
  • echo «<div>»; — открывает контейнер <div>, в котором будет размещаться информация о каждой записи. Использование <div> позволяет структурировать данные и, при необходимости, применять стилизацию через CSS.
  • echo «<h3>» . $row[«name«] . «</h3>»; — выводится название (name) текущей записи в формате заголовка третьего уровня (<h3>). Значение столбца name берется из массива $row, который представляет текущую запись.
  • echo «<p>» . $row[«description«] . «</p>»; — выводится описание (description) текущей записи в формате абзаца (<p>). Это позволяет пользователю видеть дополнительную информацию о найденном элементе.
  • echo «</div>»; — закрывает контейнер <div>, завершая вывод информации о текущей записи.

Шаг 4. Оптимизация

Поиск можно улучшить. Например, ускорить процесс, сделать его более точным и эффективным, особенно на сайтах с большим объемом данных и высоким трафиком.

Используйте индексы в базах данных

Это специальные структуры, которые улучшают скорость выполнения запросов. Индексы можно сравнить с алфавитным указателем в книге: они помогают быстрее найти нужное место в тексте, не просматривая каждую страницу.

Рассмотрим, как создать индекс для столбца name в таблице products, которая хранит информацию о продуктах. Оно выполняется с помощью SQL-запроса:

 CREATE INDEX idx_name ON products (name);

Кэшируйте результаты поиска

Кэширование — это процесс сохранения результатов наиболее частых и ресурсоемких запросов, чтобы повторное выполнение происходило значительно быстрее. Оно полезно для снижения нагрузки на базу данных и ускорения отклика сайта на популярные запросы.

Принцип работы кэширования заключается в том, что при выполнении поиска система проверяет, есть ли результат в кэше. Если ответ найден, он возвращается пользователю без обращения к базе данных. Если результата нет, запрос отправляется в базу, и результат сохраняется для последующих обращений.

Кэширование можно реализовать на разных уровнях — от использования PHP до специализированных решений, таких как Redis или Memcached. В случае простого сайта можно использовать файловое или оперативное кэширование на уровне PHP, сохраняя результаты запросов в файлах или в памяти сервера.

Шаг 5. Расширение функционала

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

Создайте фильтрацию запросов

Фильтрация результатов поиска по различным критериям, таким как категория, цена и рейтинг, позволяет посетителям уточнить их запросы и найти наиболее релевантные результаты. Например, если сайт продает товары, пользователи могут захотеть искать не только по ключевым словам, но и по конкретным категориям или диапазонам цен.

Рассмотрим пример запроса, который ищет товары по названию, фильтрует их по категории и сортирует по цене:

category = $_GET['category']; $sort = $_GET['sort']; $sql = "SELECT * FROM products WHERE name LIKE '%$query%' AND category='$category' ORDER BY price $sort";
Пример создания фильтра по категории и цене

Разбор кода:

  • $category = $_GET[’category’]; — получение значения категории из запроса. Пользователь может выбрать категорию из выпадающего списка или другого элемента интерфейса.
  • $sort = $_GET[’sort’]; — получение значения сортировки. Это может быть ASC (по возрастанию) или DESC (по убыванию), в зависимости от выбора пользователя.
  • $query = $_GET[’query’]; — получение поискового запроса пользователя.
  • WHERE name LIKE ’%$query%’ — фильтрация товаров по названию.
  • AND category=’$category’ — дополнительная фильтрация по категории.
  • ORDER BY price $sort — сортировка результатов по цене в порядке, указанном пользователем.

Добавьте сложные запросы с несколькими условиями

Иногда посетители могут искать товары или информацию, основываясь на паре критериев одновременно. Для этого можно использовать сложные запросы с несколькими условиями, которые позволяют более точно настроить поиск.

Предположим, что нужно выполнить поиск по двум полям (название товара и теги) и при этом фильтровать результаты по категории:

$sql = "SELECT * FROM products WHERE (name LIKE '%$query%' OR tags LIKE '%$query%') AND category='$category'";
Добавляем в поиск учет тегов и фильтр по категориям

Разбор кода:

  • $query = $_GET[’query’]; — получение поискового запроса пользователя.
  • $category = $_GET[’category’]; — получение значения категории для фильтрации.
  • WHERE (name LIKE ’%$query%’ OR tags LIKE ’%$query%’) — поиск по нескольким полям. Результаты будут содержать товары, где ключевое слово присутствует в названии или в тегах.
  • AND category=’$category’ — фильтрация результатов по категории.

Заключение

Поиск — это важный раздел на сайте, который значительно улучшает пользовательский опыт. В статье рассказали основные этапы процесса, от создания базовой формы до оптимизации и расширения функционала поиска с PHP. Важно помнить, что после настройки всех блоков необходимо тестирование. Убедитесь, что поиск работает корректно на различных устройствах и браузерах.

Если в штате нет специалиста с достаточным опытом, лучше обратиться к профессионалам. Это поможет избежать потенциальных проблем и сосредоточиться на других аспектах бизнеса.

Отлаженное решение повысит как эффективность запросов, так и средний чек и конверсию. Поэтому многие компании выбирают REES46 для реализации сложных технических задач. Получите бесплатную консультацию по возможностям настройки поисковой строки для вашего сайта.

Подпишитесь на рассылку

Два письма в месяц: полезные статьи про маркетинг, исследования, инструкции, гайды, чек-листы и кейсы с лучшими практиками наших клиентов.