<?php
// Минимальная длина запроса
$minLength = 3;
// Максимальная длина запроса
$maxLength = 30;
// Настройки б.д.
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '123';
$dbname = 'test';
// Объявим переменные вывода для избежания Notice-ов.
$error = '';
$rows = array();
// Устанавливаем соединение с базой данных
$db = mysql_connect($dbhost, $dbuser, $dbpass) or $error = 'Не удаётся соединиться с сервером б.д.';
if(empty($error)) {
mysql_query('SET NAMES utf-8');
mysql_select_db($dbname, $db) or $error = 'Не удаётся использовать указанную в настройках б.д.';
}
// Если соединение с б.д. произошло успешно
if(empty($error)) {
// Получаем поисковый запрос
$search = isset($_POST['search']) ? trim($_POST['search']) : '';
// Определяем его длину. В примере я использую кодировку UTF-8
$length = mb_strlen($search, 'utf-8');
// Сравниваем длину запроса с разрешённой
if($length >= $minLength and $length <= $maxLength) {
// Экранируем данные, чтобы обезопаситься от SQL-инъекций
if(get_magic_quotes_gpc())
$search = stripslashes($search);
$search = mysql_real_escape_string($search);
// Поскольку запрос идёт в LIKE, то экранируем и его спец.символы
$search = str_replace(array('%', '_'), array('\\%', '\\_'), $search);
// Делаем запрос к б.д.
$sql = "SELECT * FROM `questions` WHERE `vopros` LIKE '%{$search}%'";
$res = mysql_query($sql);
// Если что-либо найдено, то записываем все найденные строки в массив
if($res and mysql_num_rows($res) > 0) {
while($row = mysql_fetch_assoc($res))
$rows[] = $row;
}
} else
$error = "Неправильный поисковый запрос. Введите от {$minLength} до {$maxLength} символов";
}
// Всё готово. Начинаем вывод.
header('Content-type: text/html; charset=utf-8');
?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Результаты поиска</title>
</head>
<body>
<h1>Результаты поиска "<?php echo(htmlspecialchars(stripslashes($search))); ?>"</h2>
<?php
// Если были ошибки - то покажем их
if(!empty($error)) {
?>
<div class="error"><?php echo($error); ?></div>
<?php
// Иначе покажем результат поиска
} else {
// Если совпадения найдены - то покажем их
if(count($rows) > 0) {
?>
<div class="results">
<?php
foreach($rows as $row) {
?>
<div class="result">
<b><?php echo(htmlspecialchars($row['vopros'])); ?></b><br />
<?php echo(htmlspecialchars($row['otvet'])); ?>
</div>
<?php
}
?>
</div>
<?php
// Если ничего не нашлось - то так и скажем...
} else {
?>
<div class="no_results">
По данному поисковому запросу ничего не найдено
</div>
<?php
}
}
?>
</body>
</html>