Расширенная поисковая система

Dreamer76

Through thorns
Расширенная поисковая система

Привет.

У меня такой вопрос к сильным мира сего.

Есть база данных в mysql.

Есть таблица, которая выводит учетные записи этой базы.

Eсть поисковая система, которая запрашивает информацию из БД в соответствии с тем, какие параметры были отмечены в этой поисковой системе (checkbox).

Проблема следующая. Я могу сделать так, чтобы, выбрав один параметр (поставив 1 checkbox), БД показала мне все записи, соотв. этому параметру. А когда мне надо выбрать все записи, соотвествующие двум и более выбранным параметрам, вот тут у меня ступор в вопросе построения запроса к mysql.

Более наглядно о том, что я сказал выше:

<input type="checkbox" name=sort value="st1"> Параметр 1
<input type="checkbox" name=sort value="st2"> Параметр 2

По нажатию сабмита "крутится" сама эта страница.

Если выбрать 1 параметр (только один), то:
http://address.ru/zap/table2.php?sort=st1

Если выбрать оба чекбокса, то:
http://address.ru/zap/table2.php?sort=st1&sort=st2


Соответственно, есть запрос в БД, который обработается, если выбрать только 1 checkbox:

... if ($sort == "st1") { $sql = "SELECT * from bd where ... "; } ...

Это не проблема, если выбран один checkbox.

Проблема, когда надо вывести записи, соотв. выбранным "Параметр 1" и "Параметр 2".

Вопрос:
как построить запрос к БД, если выбраны сразу два ckeckbox'a?
 

fixxxer

К.О.
Партнер клуба
1) в хтмл форме, в обоих чекбоксах напиши соответственно
name="sort[1]" value="true"
name="sort[2]" value="true"
2)
Если у тебя в форме action="get" или action отсутствует, замени в коде $_POST на $_GET. Если action="post" - все без изменений
предположим, что поля в бд - parm1 и parm2
PHP:
$sort=array();
if (isset($_POST['sort']) && is_array($_POST['sort']))
{
  foreach($_POST['sort'] as $num)
     $sort[] = 'parm' . intval($num);
  $sort = join(' AND ', $sort);
  $query = "select * from tablename where " . $sort;
}
-~{}~ 09.08.04 13:39:

чего непонятно спрашивай.
 

Dreamer76

Through thorns
Спасибо. Не получается.

У меня есть конкретный пример:

{ $sql = "SELECT * from zapros where res2 LIKE 'on.gif'"; }
(показывает все записи, где в поле res2 есть запись on.gif)

и

{ $sql = "SELECT * from zapros where res2 LIKE 'off.gif'"; }
(показывает все записи, где в поле res2 есть запись off.gif)

И есть 2 чекбокса:

<form method="get" action="table2.php">

<input type="checkbox" name="name" value="chbx1">ON
<input type="checkbox" name="name" value="chbx2">OFF

</form>

Все это в 1 файле - table2.php, т.е. он обрабатывает сам себя.

Как сделать запрос исходя из данной информации?

Помоги, fixxxer.

-~{}~ 12.08.04 10:23:

help :(
 

ForJest

- свежая кровь
Dreamer76
Если у тебя не хватает понимания - запишись лучше на курсы, почтай книжки, статьи в сети. Потому что твой вопрос из разряда - я вот хочу зелёный дом, с флюгером на крыше - как мне его построить?
 

Dreamer76

Through thorns
Я вставил такой код:

<?

$field = 'res2';
$cond=array(
1 => $field LIKE 'on.gif',
2 => $field LIKE 'off.gif'
);

$q = '';

if (isset($_POST['chk']) && is_array($_POST['chk']))
foreach($_POST['chk'] as $k=>$v)
{
if(isset($cond[$k]))
$q[] = $cond[$k];
}
if ($q !== '')
$q= join(' AND ',$q);

$sql = 'select * from zapros where ' .$q;
$result = mysql_query($sql);
$all = mysql_num_rows($result);


?>

<form method="post">
<input type=checkbox name=chk[1] value=1>checkbox1
<input type=checkbox name=chk[2] value=1>checkbox2
<input type="submit">
</form>

Но он не работает. Может кто увидит, где баг?

Спасибо!

-~{}~ 17.08.04 12:55:

Вроде сам разобрался.

1 => $field LIKE 'on.gif',
2 => $field LIKE 'off.gif'

заменил на

1 => "$field LIKE 'on.gif'",
2 => "$field LIKE 'off.gif'"
 
Сверху