Динамический запрос

Morf

Guest
Динамический запрос

Есть форма:
Имя:
Фамалия:
Телефон:
Мобильный:

по этой форме пользователь может осуществлять поиск по базе, причем может выбрать все параметры поиска, а может некоторые, при этом и возникает моя проблема создания запроса

Поможите мне пожалуйста, напишите небольшой код реализации или еще лучше опишите сам принцип построения такого запроса
 

Cougar

Кошак
дежа вю? Или абсолютно идентичный вопрос здесь уже задавался недели две назад?
 

Yurik

/dev/null
для каждого поля создаём подобный блок кода

$title=mysql_escape_string(@$_POST['title']);
if (strlen($title)>1)
$sql=$sql." AND title LIKE '%".$title."%'";
 

Morf

Guest
Originally posted by Yurik
для каждого поля создаём подобный блок кода

$title=mysql_escape_string(@$_POST['title']);
if (strlen($title)>1)
$sql=$sql." AND title LIKE '%".$title."%'";
А если у меня первый параметр не задан, то что получится?

select from tablename where and title LIKE '%".$title."%'";

В этом то и проблема, как этого избеать?
 

specialist

Guest
...
$name=mysql_escape_string(@$_POST['name']);
if (strlen($name)>1)
$sql.=$sql."name LIKE '%".$name."%' AND ";
$surname=mysql_escape_string(@$_POST['surname']);
if (strlen($surname)>1)
$sql.=$sql."surname LIKE '%".$surname."%' AND ";
$phone=mysql_escape_string(@$_POST['phone']);
if (strlen($phone)>1)
$sql.=$sql."phone LIKE '%".$phone."%' AND ";
$mphone=mysql_escape_string(@$_POST['mphone']);
if (strlen($mphone)>1)
$sql.=$sql."mphone LIKE '%".$phone."%' AND ";
$sql.="1=1;";
...
 

Wicked

Новичок
Мои 5 копеек:
PHP:
$sql_cond = array();
if (!empty($name))    $sql_cond[] = " name    LIKE '%".$name."%' ";
if (!empty($surname)) $sql_cond[] = " surname LIKE '%".$surname."%' ";
...
$sql = "select from table_name";
if (count($sql_cond) > 0) $sql .= join("AND", $sql_cond);
unset($sql_cond);
(под $name, $surname, etc. подразумеваются переменные из примера specialist'а)

PS: specialist: а зачем у тебя $sql каждый раз удваивается? Так же никакой памяти не хватит :) я про $sql .= $sql."...";
 

Sluggard

Новичок
для метода GET:
PHP:
$sql_query = 'SELECT * FROM table WHERE (name LIKE "%'.escapestring($_GET['name']).'%") AND (surname LIKE "%'.escapestring($_GET['surname']).'%") AND (phone LIKE "%'.escapestring($_GET['phone']).'%") AND (mobile LIKE "%'.escapestring($_GET['mobile']).'%")';
где escapestring - ваша функция, которая ескейпит строку.

-~{}~ 26.01.05 15:17:

Еще вариант, если заботишься об оптимизации запроса:
PHP:
$where = array();
if (!empty($_GET['name'])) $where[] = '(name LIKE "%'.$_GET['name'].'%")';
if (!empty($_GET['surname'])) $where[] = '(surname LIKE "%'.$_GET['surname'].'%")';
if (!empty($_GET['phone'])) $where[] = '(phone LIKE "%'.$_GET['phone'].'%")';
if (!empty($_GET['mobile'])) $where[] = '(mobile LIKE "%'.$_GET['mobile'].'%")';
$sql_where = (empty($where)) ? '' : ' WHERE '.implode(' AND ', $where);
$sql = 'SELECT * FROM table'.$sql_where;
Естественно входные данные ($_GET[...]) для запроса тоже надо проескейпить.
 
Сверху