|
|
|
| Поиск по имени ф.о. и телефону
Данные передаються из формы в функцию
foreach($_POST as $key => $value) {
$value=preg_replace("/[^\w\x7F-\xFF\s]/", "", $value); //плохие символы
$value=trim( $value) ;
if($key<>$_POST['form'] and !$value=="") {
}
$op[]=($value) ;
}
|
потом формирую $where запрос к базе
$where = "WHERE ";
if($op[0]){ $where .= " title LIKE '$op[0]%' AND"; }
## -----и т.д. ----##
if($op[4]) { settype($op[4], 'integer');
$where .= " phone_home LIKE '$op[4]' AND"; }
if($op[3]) { $where .= " adress LIKE '$op[3]%'"; }
if(substr($where, strlen($where)-4, 4) == ' AND') {$where = substr($where, 0, strlen($where)-4); }
}
|
Переменная $s ниже это сортировка
Поиск #setQuery это функция запроса #
$database->setQuery( "SELECT * FROM #__adress"
. "\n$where"
. "\nORDER BY $s $reverse"
. "\nLIMIT $limitstart, $limit"
) ;
|
Все хорошо но я сделал на свою голову сортировку "Сортировать по полям имя |телефон| и т.д. в функции где расположена форма поиска
echo "Сортировать по : ";
echo ("<a href='index.php?option=com_tel&Itemid=$Itemid&s=title&order=".$reverse."' title=\"title\" >| фамилии | </a> ");
|
Так когда нажимаешь на Сортировать (&s=title) все результаты поиска сбиваються так как $where в форме теперь не передается.
Как сохранить результат поиска при последующей сортировке по полю имя |телефон| и т.д. | |
|
|
|
|
|
|
|
для: oppo
(03.12.2005 в 08:45)
| | Вы сортировку не при помощи href после поиска делайте, а при помощи того же radio-button ДО поиска. И разумеется в запрос добавляйте соответствующий ORDER BY. | |
|
|
|
|
|
|
|
для: Shorr Kan
(03.12.2005 в 09:44)
| | Ну да, я это RADIO оставил на потом...Уж больно красиво треугольники меняються -"вниз ""вверх"...Должно ж быть решение.
Еще нет ли кусочка кода как сделать поиск в найденном | |
|
|
|
|
|
|
|
для: oppo
(03.12.2005 в 08:45)
| | Такая же проблема возникает при организации постраничного вывода при поиске - обходится это помещением информации из HTML-формы в сессию. | |
|
|
|
|
|
|
|
для: cheops
(03.12.2005 в 12:45)
| | А можно ли набросок художника как это выглядит при использовании сесси1 если поля есть
$_POST['tit']; $_POST['name']; $_POST['firstname']; $_POST['tele'];$_POST['street'];$_POST['form']; | |
|
|
|
|
|
|
|
для: oppo
(03.12.2005 в 13:29)
| | Обычно в самом начале обработчика формы помещают конструкцию
<?php
if(!empty($_POST))
{
$_SESSION['tit'] = $_POST['tit'];
$_SESSION['name'] = $_POST['name'];
$_SESSION['firstname'] = $_POST['firstname'];
$_SESSION['tele'] = $_POST['tele'];
$_SESSION['street'] = $_POST['street'];
$_SESSION['form'] = $_POST['form'];
}
?>
|
А далее уже во всех запросах используют только данные из суперглобального массива $_SESSION. Таким образом данные в $_SESSION будут перезаписываться только когда появятся POST-данные, т.е. по нажатию кнопки. А так они будут путешествовать со странице к странице (на каждой странице необходимо вызывать session_start()). | |
|
|
|
|
|
|
|
для: cheops
(03.12.2005 в 13:41)
| | Спасибо ,мастер, сначало плюнулось форесеачем , но заработало - забыл start прописать..
Сразу же появилась идея раз уже пошли ссесии то можно вписать в них как то IP юзера
($ip=getenv( "REMOTE_ADDR" );) и проверять по времени не сильно он усердствует поиском - нагружая Базу и давать ему передохнуть ежели что.. | |
|
|
|
|
|
|
|
для: oppo
(03.12.2005 в 14:50)
| | Может кому надо ## Антифлуд ##
где принимаем
session_start() ;
if (!isset($_SESSION['CommentTimer_'.$_SERVER['REMOTE_ADDR']])
|| time()-$_SESSION['CommentTimer_'.$_SERVER['REMOTE_ADDR']] < 3
|| time()-$_SESSION['CommentTimer_'.$_SERVER['REMOTE_ADDR']] > 300) {
$approved = 0;
$comment = "** У Вас SPAM **\n".$comment;
}
unset($_SESSION['CommentTimer_'.$_SERVER['REMOTE_ADDR']]);
echo $comment;
|
Где отправляем
$_SESSION['CommentTimer_'.$_SERVER['REMOTE_ADDR']] = time();
|
| |
|
|
|