Автор: Rahim S. (a.k.a SpiderMan) 
http://blacksun.box.sk

Это первое руководство из серии Практическое Программирование на PHP. Итак, позвольте мне начать, сегодня я собираюсь рассказать вам, как создать поисковый механизм, который вы смогли бы использовать на своем сайте или на каком-либо другом проекте. Для написания этого руководства я использовал базу данных MySQL,
код, совместимый с PHP 3 и 4.

Задний план

Прежде, чем мы начнем, я покажу вам таблицу, которая будет использована в примерах:

First_Name

Middle_Name Last_Name
Dana Jhonson Smith
Jill Angel Pete
Jack Coner Mitchel

Погружаемся в Работу

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

<html>
<head>
<title>Simple Search Engine version 1.0</title>
</head>
<body>
<center>
Enter the first, last, or middle name of the person you are looking for:
<form action="search.php" method="post">
<input type="text" name="search_query" maxlength="25" size="15"><br>
<input type="reset" name="reset" value="Reset"> 
<input type="text" name="submit" value="Submit">
</form>
</center> 
</body>
</html> 

Это хорошая основная страница, так что я не собираюсь особо на этом останавливаться. В основном пользователи введут имя, фамилию или отчество личности, которую они ищут, и нажмут enter. Содержимое полей ввода будет передано на php
скрипт, называющийся search.php и который сделает все остальное.

Теперь, когда страница готова, позвольте приступить к написанию собственно скрипта.
Прежде чем мы действительно подключимся к базе данных, используя
mysql_pconnect(), и выберем таблицу, используя mysql_select_db(), мы выполним грамматический разбор
значения, переданного скрипту чтобы посмотреть, не содержит ли оно какого-нибудь неправильного ввода, такого как чисел и стремных символов подобно #&*^. Вы всегда
должны проверять ввод и не доверять вещам подобно JavaScript, чтобы сделать это, так
как однажды пользователь отключит JavaScript и все, что
подтвердится спустится в
унитаз. Теперь, для проверки ввода мы будем использовать регулярное выражение, они
могут немного запутать вас, но будут объясняться в последующих руководствах. Все,
что нам нужно знать сейчас, это то, что нужно проверить, что переданное значение
это строка символов. Ну все, достаточно болтовни, вот первая часть скрипта:

<?php 
mysql_pconnect("host", "username", "password") or die("Can't connect!");
mysql_select_db("Names") or die("Can't select database!"); 

if (!eregi("[[:alpha:]]", $search_query))
{
echo "Error: you have entered an invalid query, you can only use characters!<br>";
exit;
}

Теперь когда мы сделали это, мы сформируем поисковый запрос.

$query= mysql_query("SELECT * FROM some_table WHERE First_Name= '$search_query' OR Middle_Name= '$search_query' OR Last_Name= '$search_query' ORDER BY Last_Name");

Запутались? Я объясню, что здесь происходит, мы запрашиваем MySQL поиск во всех
колонках в First_Name, Middle_Name и Last_Name для сопоставления запроса, введенного пользователем, после того, как он обнаружил некоторые результаты мы просим MySQL расположить результаты в алфавитном порядке, начиная с Last_Name.

Остальная часть кода очень проста. Мы получаем результаты запроса, используя
mysql_fetch_array( ) и ищем соответствия, используя mysql_num_rows(). Если соответствие или соответствия есть, то мы выводим все обнаруженные соответствия;
если их нет, то мы говорим пользователю, что не смогли ничего найти.

$result= mysql_num_rows($query);

if ($result == 0)
{
echo "Sorry, I couldn't find any user that matches your query ($search_query)";
exit; 
}
else if ($result == 1)
{
echo "I've found <b>1</b> match!<br>";
}
else {
echo "I've found <b>$result</b> matches! <br>";
}

while ($row= mysql_fetch_array($query))
{
$first_name= $row["First_Name"];
$middle_name = $row["Middle_Name"];
$last_name = $row["Last_Name"];

echo "The first name of the user is: $first_name.<br>";
echo "The middle name of the user is: $middle_name.<br>";
echo "The last name of the user is: $last_name. <br>";
}
?>

Я добавил одну интересную вещь, когда мы выводим сообщение, сколько пользователей мы обнаружили, то вывод будет предоставлен на соответствующем правильном Английском. Если бы мы не добавили в скрипт эту вещь, то он выводил бы,
например, "I've found 1 matches", что очевидно является грамматической ошибкой 😛 Остальная часть скрипта в основном соединяет результаты и печатает их
на веб-странице. Это и все, работа над скриптом завершена! Полный код скрипта
расположен ниже:

<html>
<head>
<title>Simple Search Engine version 1.0 - Results </title>
</head>
<body> 
<?php 
mysql_pconnect("host", "username", "password") or die("Can't connect!");
mysql_select_db("Names") or die("Can't select database!"); 

if (!eregi("[[:alpha:]]", $search_query))
{
echo "Error: you have entered an invalid query, you can only use characters!<br>";
exit; //Нет необходимости выполнять остальную часть скрипта.
}

$query= mysql_query("SELECT * FROM some_table WHERE First_Name='$search_query' OR Middle_Name= '$search_query' OR Last_Name='$search_query' ORDER BY Last_Name");

$result= mysql_numrows($query);

if ($result == 0)
{
echo "Sorry, I couldn't find any user that matches your query ($search_query)";
exit; //Ничего не найдено, зачем выполнять остальную часть скрипта?
}
else if ($result == 1)
{
echo "I've found <b>1</b> match!<br>";
}
else {
echo "I've found <b>$result</b> matches! <br>";
}

while ($row= mysql_fetch_array($query))
{
$first_name= $row["First_Name"];
$middle_name = $row["Middle_Name"];
$last_name = $row["Last_Name"];

echo "The first name of the user is: $first_name.<br>";
echo "The middle name of the user is: $middle_name.<br>";
echo "The last name of the user is: $last_name. <br>";
}
?> 
</body>
</html> 

Заключение:

Что ж, этим завершается первая часть серии руководств Практического Программирования. Страницы, созданные мной, были чрезвычайно простыми, так как моя главная
цель - объяснить вам суть скрипта, вы должны оживить свои страницы изображениями
и другими клевыми эффектами. Если вы обнаружили какие-либо ошибки или у вас есть
какие-либо комментарии, пожалуйста, напишите мне (также приветствуются вопросы 
на доске объявлений).

Check Also

Дырявые диски. Эксплуатируем уязвимости в сетевых хранилищах Synology

Защита данных, приватность и соответствие нормам безопасного хранения информации — то, над…

1 комментарий

  1. Аватар

    Mr.Lukas

    01.12.2018 at 23:40

    А есть такой поиск по сайту где пишешь одно слово и в результате выдаёт все статьи, где была написана данное слово?

Оставить мнение