Делаем простой поиск на PHP, jQuery, MySql
Сегодня мы сделаем поиск, который поможет посетителям вашего сайта найти нужную информацию.
Лучший способ удержать своих посетителей на сайте — это дать им возможность найти то, что они хотят. Если вы сделаете эту возможность простой и красивой, они обязательно вернутся на сайт и найдут нужную информацию.
Этот урок расскажет нам, как создать простую, но эффективную поисковую форму, которая будет показывать результаты без перезагрузки страницы.
Мы создадим 2 файла: search.php — он будет содержать HTML форму и javascript, и do_search.php — в этом файле будет алгоритм поиска.
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>PHP, jQuery Поиск</title>
<link rel="stylesheet" type="text/css" href="my.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$(".search_button").click(function() {
// получаем строку, которую ввел пользователь
var searchString = $("#search_box").val();
// формируем поисковый запрос
var data = 'search='+ searchString;
// если введенная информация не пуста
if(searchString) {
// вызов ajax
$.ajax({
type: "POST",
url: "do_search.php",
data: data,
beforeSend: function(html) { // действие перед отправлением
$("#results").html('');
$("#searchresults").show();
$(".word").html(searchString);
},
success: function(html){ // действие после получения ответа
$("#results").show();
$("#results").append(html);
}
});
}
return false;
});
});
</script>
</head>
<body>
<div id="container">
<div style="margin:20px auto; text-align: center;">
<form method="post" action="do_search.php">
<input type="text" name="search" id="search_box" class='search_box'/>
<input type="submit" value="Search" class="search_button" /><br />
</form>
</div>
<div>
<div id="searchresults">Search results for <span class="word"></span></div>
<ul id="results" class="update">
</ul>
</div>
</div>
</body>
</html>
Это обычная html форма, которая будет отправлять запрос файлу do_search.php методом POST. Код файла do_search.php:
<?php
//если мы получили что-то через $_POST
if (isset($_POST['search']))
{
// включим соединение с базой
include('db.php');
$db = new db();
// всегда фильтруйте входящую информацию, чтобы обойти SQL инъекции
$word = mysql_real_escape_string($_POST['search']);
// формирование поискового запроса к базе
$sql = "SELECT title, url FROM pages WHERE content LIKE '%" . $word . "%' ORDER BY title LIMIT 10";
// получение результатов
$row = $db->select_list($sql);
if(count($row))
{
$end_result = '';
foreach($row as $r)
{
$result = $r['title'];
// выделим найденные слова
$bold = '<span class="found">' . $word . '</span>';
$end_result .= '<li>' . str_ireplace($word, $bold, $result) . '</li>';
}
echo $end_result;
}
else
{
echo '<li>No results found</li>';
}
}
?>
В комментариях к коду описан процесс поиска. Если в базе найдется информация, мы покажем её пользователю, выделив найденные слова.
CSS
body{ font-family:Arial, Helvetica, sans-serif; }
*{ margin:0;padding:0; }
#container { margin: 0 auto; width: 600px; }
a { color:#DF3D82; text-decoration:none }
a:hover { color:#DF3D82; text-decoration:underline; }
ul.update { list-style:none;font-size:1.1em; margin-top:10px }
ul.update li{ height:30px; border-bottom:#dedede solid 1px; text-align:left;}
ul.update li:first-child{ border-top:#dedede solid 1px; height:30px; text-align:left; }
#flash { margin-top:20px; text-align:left; }
#searchresults { text-align:left; margin-top:20px; display:none; font-family:Arial, Helvetica, sans-serif; font-size:16px; color:#000; }
.word { font-weight:bold; color:#000000; }
#search_box { padding:4px; border:solid 1px #666666; width:300px; height:30px; font-size:18px;-moz-border-radius: 6px;-webkit-border-radius: 6px; }
.search_button { border:#000000 solid 1px; padding: 6px; color:#000; font-weight:bold; font-size:16px;-moz-border-radius: 6px;-webkit-border-radius: 6px; }
.found { font-weight: bold; font-style: italic; color: #ff0000; }
h2 { margin-right: 70px; }
Таким образом мы создали простую поисковую форму для показа результатов без перезагрузки страницы.





Выложите db.php плз)
Здравствуйте! Исходники поправлены 🙂
а как сделать поиск с доп параметрами(допустип есть еще одно поле с селектом)?
как передать их? что нужно дописать в javascript?
У меня почему-то не ищет кириличные слова