Помогите пожалуйста реализовать поиск содержимого в масиве через веб форму

kyivprogs

Новичок
Есть масив php с 2000 записей
PHP:
<?php $otvety = array(
  array('id' => '1','vopros' => 'Основателем генетического почвоведения является:','otvet' => 'В.В. Докучаев'),
...
array('id' => '2000','vopros' => 'Инокуляцию делают','otvet' => 'Семенам сои')
); ?>
Помогите пожалуйста реализовать поиск содержимого в масиве через веб форму, что то на подобе как в телефонного справочника.
может есть готовый скрипт, поделитесь.
В долгу не останусь, помогу чем смогу
 

С.

Продвинутый новичок
Если бы ваш массив был в таком виде:
PHP:
<?php $otvety = array(
  1 => array('vopros' => 'Основателем генетического почвоведения является:','otvet' => 'В.В. Докучаев'),
  ...
  2000 => array('vopros' => 'Инокуляцию делают','otvet' => 'Семенам сои')
); ?>
то все было бы на-а-амного проще.
 

С.

Продвинутый новичок
Да, поверхностно прочитал вопрос. Без разницы.
 

kyivprogs

Новичок
всем спасибо, помогли разобратся через mysql. Огромное спасибо автору sobachnik вот ришение:
HTML:
<html>
   <head>
      <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
      <title>Пример формы для ввода поискового запроса</title>
   </head>
   <body>
      <form action="search.php" method="post">
         Введите фразу для поиска:
         <input type="text" name="search" value="" />
         <input type="submit" value="Найти" />
      </form>
   </body>
</html>
и сам скрипт
PHP:
<?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>
 
Сверху