[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите пожалуйста реализовать поиск содержимого
Sap-San
Есть масив php с 2000 записей
<?php $otvety = array(
array('id' => '1','vopros' => 'Основателем генетического почвоведения является:','otvet' => 'В.В. Докучаев'),
...

array('id' => '2000','vopros' => 'Инокуляцию делают','otvet' => 'Семенам сои')
);
?>

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



Спустя 35 минут, 50 секунд (8.04.2012 - 13:11) dadli написал(а):
Цитата
что то на подобе как в телефонного справочника.

то есть?
в тел справочнике можно искать по алфавиту да, какои поиск ви конкретно хотите?

Спустя 40 минут, 14 секунд (8.04.2012 - 13:51) Sap-San написал(а):
[QUOTE=dadli,8.04.2012 - 10:11][QUOTE]что то на подобе как в телефонного справочника.[/QUOTE]
то есть?
Ну например я ввел Петров виктор, а мне выдало петров виктор васильевич, петров виктор андреевич,петров виктор петрович и т.д. Что то на подобе пример работы

Спустя 1 час, 17 минут, 41 секунда (8.04.2012 - 15:09) dadli написал(а):
Sap-San
так получам все масиви, в которих ключ "otvet" содержит поисковая имя или фамиля (или обе)
ето хотели?

$otvety = array(
array('id' => '1','vopros' => 'Основателем генетического почвоведения является:','otvet' => 'В.В. Докучаев'),
array('id' => '2000','vopros' => 'Инокуляцию делают','otvet' => 'Семенам сои')
);



$poiskovaia_imia = $_POST['poiskovaia_imia'];
$new_mas = array();

function poisk_vmasive($val) {
global $new_mas;
global $poiskovaia_imia;
if (preg_match("#".$poiskovaia_imia."#iu",$val['otvet'])) {
array_push($new_mas,$val);
}
}


array_walk($otvety,'poisk_vmasive');


echo '<pre>';
print_r($new_mas);
echo '</pre>';

Спустя 21 минута, 47 секунд (8.04.2012 - 15:31) MNO121280 написал(а):
Нормальный поиск проще всего сделать с помощью MySQL.

Спустя 2 часа, 48 минут, 47 секунд (8.04.2012 - 18:20) Sap-San написал(а):
всем спасибо, помогли разобратся через mysql. Огромное спасибо автору sobachnik вот ришение:
<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
// Минимальная длина запроса
$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>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.