Справочники, инструменты, документация

SQL: Как сделать поиск по базе данных на PHP

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

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

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <form action="<?= $_SERVER['SCRIPT_NAME'] ?>">
    <p>Поиск Человека: <input type="text" name="search" id=""> <input type="submit" value="Поиск"></p>
    <hr>
  </form>
  <?php
  countPeople($result); // Функция вывода пользователей
  ?>
</body>
</html>

Как видите тут всё просто, вы отправляете данные прямо в этот же файл, это значит, что мы работаем в PHP, также отправляются POST запрос, ну а в низу используется функция которая выводит результат работы/поиска.

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

$servername = "127.0.0.1"; // Адрес сервера
$username = "root"; // Имя пользователя
$password = ""; // Пароль
$BDname = "users_search"; // Название БД

// Подключение к БД
$mysqli = new mysqli($servername, $username, $password, $BDname); 

// Проверка на ошибку
if ($mysqli->connect_error) {
  printf("Соединение не удалось: %s\n", $mysqli->connect_error);
  exit();
}

В этой части кода, мы просто берём данные, которые получили от формы и загоняет их в переменную $inputSearch, дальше создаём SQL запрос, в котором через или сравниваем со всеми данными пользователя.

// Получаем запрос
$inputSearch = $_REQUEST['search']; 

// Создаём SQL запрос
$sql = "SELECT * FROM `users` WHERE `name` = '$inputSearch' || `surname` = '$inputSearch' || `email` = '$inputSearch' || `number_phone` = '$inputSearch' || `city` = '$inputSearch' || `year_of_birth` = '$inputSearch'";

// Отправляем SQL запрос
$result = $mysqli -> query($sql);

Отправляем этот запрос в базу данных MySQL и сохраняем возвращаемые данные в переменной $result.

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

function doesItExist(array $arr) {
  // Создаём новый массив
  $data = array(
    'email' => $arr['email'] != false ? $arr['email'] : 'Нет данных',
    'city' => $arr['city'] != false ? $arr['city'] : 'Нет данных',
    'year' => $arr['year_of_birth'] != false ? $arr['year_of_birth'] : 'Нет данных'
  );
  return $data; // Возвращаем этот массив
}

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

Теперь можно создать функцию для вывода данных.

function countPeople($result) { 
  // Проверка на то, что строк больше нуля
  if ($result -> num_rows > 0) {
    // Цикл для вывода данных
    while ($row = $result -> fetch_assoc()) {
      // Получаем массив с строками которые нужно выводить
      $arr = doesItExist($row);
      // Вывод данных
      echo "ID: ". $row['id'] ."<br>
         Имя: ". $row['name'] ."<br>
         Фамилия: ". $row['surname'] ."<br>
         Телефон: ". $row['number_phone'] ."<br>
         Email: ". $arr['email'] ."<br>
         Город: ". $arr['city'] ."<br>
         Год рождения: ". $arr['year'] ."<hr>";
    }
  // Если данных нет
  } else {
    echo "Не кто не найден";
  }
}

Давайте разберём код, тут создаём функцию, для вывода пользователей, в качестве параметра используется результат метода отправление SQL запроса.