Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Поиск в БД по нескольким критериям

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Coder1994
Отправлено: 31 Декабря, 2010 - 15:26:54
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Здравствуйте, я пишу скрипт поиска пользователей по сайту, но вот что-то не получается, подскажите как реализовать поиск в БД сразу по нескольким критериям.
Вот форма поиска:
PHP:
скопировать код в буфер обмена
  1. if(!$_POST){
  2. echo "<form action=\"/users.php?act=search\" method=\"post\">\n";
  3. echo "Страна:<br />\n<input type=\"text\" name=\"country\" value=\"\" /><br />\n";
  4. echo "Регион:<br />\n<input type=\"text\" name=\"region\" value=\"\" /><br />\n";
  5. echo "Город:<br />\n<input type=\"text\" name=\"city\" value=\"\" /><br />\n";
  6. echo "Имя:<br />\n<input type=\"text\" name=\"first_name\" value=\"\" /><br />\n";
  7. echo "Фамилия:<br />\n<input type=\"text\" name=\"primary_name\" value=\"\" /><br />\n";
  8. echo "Дата рождения:<br />\n";
  9. echo "<select name=\"birth_day\" size=\"1\">\n";
  10. for ($n = 1; $n <= 31; $n++) {
  11. echo "<option value=\"$n\">$n</option>\n";
  12. }
  13. echo "</select>\n";
  14. echo "<select name=\"birth_month\" size=\"1\">\n";
  15. for ($n = 1; $n <= 12; $n++) {
  16. echo "<option value=\"$n\">$n</option>\n";
  17. }
  18. echo "</select>\n";
  19. echo "<select name=\"birth_year\" size=\"1\">\n";
  20. for ($n = 1960; $n <= 2000; $n++) {
  21. echo "<option value=\"$n\">$n</option>\n";
  22. }
  23. echo "</select><br />\n";
  24. echo "<input type=\"submit\" value=\"Искать\" /><br />\n";
  25. echo "</form>\n";
  26. }else{
  27. $country = htmlspecialchars($_POST['country']);
  28. $regoin = htmlspecialchars($_POST['region']);
  29. $city = htmlspecialchars($_POST['city']);
  30. $fn = htmlspecialchars($_POST['first_name']);
  31. $pn = htmlspecialchars($_POST['primary_name']);
  32. $bd = intval($_POST['birth_day']);
  33. $bm = intval($_POST['birth_month']);
  34. $by = intval($_POST['birth_year']);
  35.  
  36. }

А вот как грамотно выполнить запрос к БД я не знаю, можете подсказать?
 
 Top
Stahanovec
Отправлено: 31 Декабря, 2010 - 18:21:29
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




ну так

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM 'имя тыблицы' WHERE country=$country AND city=$city AND...


и так далее

(Отредактировано автором: 31 Декабря, 2010 - 18:26:23)

 
 Top
Coder1994
Отправлено: 31 Декабря, 2010 - 21:10:25
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Stahanovec пишет:
ну так

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM 'имя тыблицы' WHERE country=$country AND city=$city AND...


и так далее

да?
а что будет если пользователь не заполнит поле country или city?
Это превратит запрос в такой:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM 'имя тыблицы' WHERE country=NULL AND city=NULL AND...

И вследствии этого результатов не будет вообще.
Мне нужен поиск, аналогичный поиску вконтакте.ру .
 
 Top
OrmaJever Модератор
Отправлено: 31 Декабря, 2010 - 22:02:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




LIKE например.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 31 Декабря, 2010 - 22:12:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Coder1994 пишет:
а что будет если пользователь не заполнит поле country или city?

Запрос в таком случае формируется диманически.
Типа:
PHP:
скопировать код в буфер обмена
  1. $where=array();
  2. if (!empty($fileld1) /*прочие проверки*/) $where[] = "field1='".$fields1."'";
  3. if (!empty($fileld2) /*прочие проверки*/) $where[] = "field2='".$fields2."'";
  4. if (empty($where)) echo "задан пуской поисковый запрос";
  5. else {
  6. $q = "select * from `table` where " . implode(" and ", $where);
  7. //выполняется запрос
  8. }

(Отредактировано автором: 31 Декабря, 2010 - 22:13:08)



-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB