Покинул форум
Сообщений всего: 18
Дата рег-ции: Нояб. 2016
Помог: 0 раз(а)
Добрый день. Есть 3 выпадающих списка:Имя(name),Фамилия(fam),год рождения(year). И кнопка поиск. Я организую поиск по этим записям. Данные в выпадающий список выводятся select'om, все работает. $_GET['name'], $_GET['fam'],$_GET['year'] передает данные, которые мы выбрали в выпадающих списках. Когда я выбираю поиск по всем значениям то работает, а как реализовать например поиск только по имени или по фимилии. Помогите пожалуйста, Спасибо.
skruglikov
Отправлено: 23 Января, 2017 - 12:17:55
Новичок
Покинул форум
Сообщений всего: 22
Дата рег-ции: Янв. 2017 Откуда: Киев, Украина
Помог: 1 раз(а)
какой поиск вы хотите реализовать:
— поиск по ключевому слову?
— обновления содержимого <select> в зависимости от выбранного значения (выбираем имя, а доступные фамилии и год обновились)?
в любом случае это необходимо готовить запросы к БД, ведь ваши данные хранятся...
Gost12345
Отправлено: 23 Января, 2017 - 12:26:15
Новичок
Покинул форум
Сообщений всего: 18
Дата рег-ции: Нояб. 2016
Помог: 0 раз(а)
Да, поиск по ключевому слову. Чтобы например выбрать только имя и по нему искать, а в других выпадающих списках ничего не выбирать, просто пустые значения.
if(isset($_GET['name']) and (isset($_GET['fam'])) and (isset($GET['year'])))
{
//здесь запрос к БД и выборка данных, все работает
}
а дальше вот не получается, если после пишу
if(isset($_GET['name']))
{
//то выводит и по первому условию и по второму все вместе
}
skruglikov
Отправлено: 23 Января, 2017 - 13:04:48
Новичок
Покинул форум
Сообщений всего: 22
Дата рег-ции: Янв. 2017 Откуда: Киев, Украина
Помог: 1 раз(а)
Gost12345 пишет:
а дальше вот не получается, если после пишу
if(isset($_GET['name']))
{
//то выводит и по первому условию и по второму все вместе
}
дело в том, что вам не надо писать отдельную проверку под каждый параметр... достаточно одной на наличие $GET массива, а там уже проверить содержимое на наличие ключей и значений, сформировать запрос и передать его к БД...
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
Gost12345, в дополнение к ответу skruglikov обращу внимание на функцию filter_input_array
Gost12345
Отправлено: 24 Января, 2017 - 07:54:46
Новичок
Покинул форум
Сообщений всего: 18
Дата рег-ции: Нояб. 2016
Помог: 0 раз(а)
skruglikov, все равно не работает, если выбирать все значения то выводит результат, а если какое то одно, то ничего не выводит, хотя запрос выполняется и данные правильно передаются. Именно когда начинаю выводить данные циклом while, то ничего не выводит.
skruglikov
Отправлено: 24 Января, 2017 - 11:57:17
Новичок
Покинул форум
Сообщений всего: 22
Дата рег-ции: Янв. 2017 Откуда: Киев, Украина
Помог: 1 раз(а)
Gost12345 пишет:
skruglikov, все равно не работает, если выбирать все значения то выводит результат, а если какое то одно, то ничего не выводит, хотя запрос выполняется и данные правильно передаются. Именно когда начинаю выводить данные циклом while, то ничего не выводит.
Покажите код формы и код обработки данных формы!
Gost12345
Отправлено: 25 Января, 2017 - 11:06:13
Новичок
Покинул форум
Сообщений всего: 18
Дата рег-ции: Нояб. 2016
Покинул форум
Сообщений всего: 22
Дата рег-ции: Янв. 2017 Откуда: Киев, Украина
Помог: 1 раз(а)
если человек в форме выберет имя И ЛЮБОЕ другое значение из соседних списков, не соответствующее имени! то вам ничего не прийдет из базы данных!!! результат будет только если у вас, вдруг, совпадут все 3 значения для одного имени!
т.е. у вас не поиск по ключевому слову, а просто полное соответствие!
чтобы работала ваша конструкция, необходимо изменить в запросе "AND" -> "OR"! в этом случае вам будут возвращаться любые соответствия
$name=$_GET['name'] ? "`name` = '".$_GET['name']."'":'';//Если передан параметр name, то присваиваем переменной $name значение `name` = 'что пришло'
$fam=$_GET['fam'] ? "`fam` = '".$_GET['fam']."'":'';//Если передан параметр fam, то присваиваем переменной $fam значение `fam` = 'что пришло'
$year=$_GET['year'] ? '`year` = '.$_GET['year']:'';//Если передан параметр year, то присваиваем переменной $year значение `year` = 'что пришло'
$exact=$_GET['exact'];//заносим в переменную значение поля exact
$where=array($name,$fam,$year);// Объединяем наши запросы в массив
$where=array_diff($where,array(''));//Очищаем массив от пустых значений, что бы не получилось в запросе к БД AND AND несколько раз подряд, если какой то селект не был выбран
if($exact)
{
//если чекбокс "Точное соответствие" чекнут, то ищем через AND
$where=implode(' AND ',$where);//объединяем в строку наш массив - запрос. На выходе в $where будет `name` = 'чтото' AND `fam` = 'чтото' и т.д.
}
else
{
//иначе через OR
$where=implode(' OR ',$where);//объединяем в строку наш массив - запрос. На выходе в $where будет `name` = 'чтото' OR `fam` = 'чтото' и т.д.
};
$query1="SELECT * FROM `Teacher` WHERE $where";// делаем запрос, ну а дальше понятно
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
skruglikov, руки прочь от кавычек одинарных! Строка ведь может быть и с пробелом, например...
'Или' не подходит в силу необходимости проверки совпадения всех выбранных параметров, а не одного из... Gost12345, условие в выражении where надо формировать с учетом необходимости проверки конкретного параметра... то есть, если параметр выбран - пишем его проверку в выражение, если не выбран - не пишем.
Gost12345
Отправлено: 25 Января, 2017 - 19:50:20
Новичок
Покинул форум
Сообщений всего: 18
Дата рег-ции: Нояб. 2016
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.