Автор: 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>
Заключение:
Что ж, этим завершается первая часть серии руководств Практического Программирования. Страницы, созданные мной, были чрезвычайно простыми, так как моя главная
цель - объяснить вам суть скрипта, вы должны оживить свои страницы изображениями
и другими клевыми эффектами. Если вы обнаружили какие-либо ошибки или у вас есть
какие-либо комментарии, пожалуйста, напишите мне (также приветствуются вопросы
на доске объявлений).