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
Форумы портала PHP.SU :: Версия для печати :: Поиск в БД по нескольким критериям
Форумы портала PHP.SU » PHP » Программирование на PHP » Поиск в БД по нескольким критериям

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

1. Coder1994 - 31 Декабря, 2010 - 15:26:54 - перейти к сообщению
Здравствуйте, я пишу скрипт поиска пользователей по сайту, но вот что-то не получается, подскажите как реализовать поиск в БД сразу по нескольким критериям.
Вот форма поиска:
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. }

А вот как грамотно выполнить запрос к БД я не знаю, можете подсказать?
2. Stahanovec - 31 Декабря, 2010 - 18:21:29 - перейти к сообщению
ну так

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


и так далее
3. Coder1994 - 31 Декабря, 2010 - 21:10:25 - перейти к сообщению
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...

И вследствии этого результатов не будет вообще.
Мне нужен поиск, аналогичный поиску вконтакте.ру .
4. OrmaJever - 31 Декабря, 2010 - 22:02:31 - перейти к сообщению
LIKE например.
5. Мелкий - 31 Декабря, 2010 - 22:12:57 - перейти к сообщению
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. }

 

Powered by ExBB FM 1.0 RC1