2011-12-14 3 views
0

У меня есть следующие флажки:Каков наилучший способ фильтрации контента с помощью флажков в PHP?

[] Jackets 
[] Jeans 
[] T-Shirts 
[] Shoes 
[submit button] 

Когда пользователь, например, проверки [х] Куртка и [х] футболка и нажимает кнопку [отправить], форма будет посылать отправлять запрос самому себе. Затем каким-то образом создается динамический запрос на основе выбранных флажков, и тогда будут запрашиваться только выбранные категории. Затем отображается на странице.

Проблема, с которой я столкнулась, заключается в том, чтобы создать запрос динамически после запроса на отправку.

+0

Я думаю, что вы пытаетесь сделать это с участием тяжелого ajax. –

+0

Невозможно просто создать его с помощью POST .. затем извлекая информацию таким образом? – diesel

+0

Я имею в виду, что вы можете использовать POST, но зачем вам использовать пост? Что делать, если кто-то хочет добавить закладку на страницу? –

ответ

1
// options 
$options = array(
    'Jackets' => 'jackets', 
    'Jeans' => 'jeans', 
    'T-Shirts' => 't_shirts', 
    'Shoes' => 'shoes' 
); 

// create sql where 
$sql_where = array('1'); 
foreach ($options as $option) 
{ 
    if (isset($_POST[$option])) $sql_where[] = "field = '$option'"; 
} 

// query data 
mysql_query("SELECT * FROM table WHERE " . implode(' AND ', $sql_where)); 

// create html 
$sql_where = array('1'); 
foreach ($options as $name => $option) 
{ 
    ?> 
     <input type="checkbox" name="<?= $option?>" id="<?= $option?>" value="1" /> 
     <label for="<?= $option?>"><?= $name?></label> 
    <? 
} 
+0

Вау, это может быть то, что мне нужно! Благодаря! – diesel

+0

Вы также можете сгенерировать входные данные из массива. (Обновлено) – PiTheNumber

1

Использование "HTML Array" ..

<input type="checkbox" name="item[]" value="1" /> 
... 
<input type="checkbox" name="item[]" value="4" /> 

чем в PHP принесу:

if ($_POST["item"][1]) 
... 
if ($_POST["item"][6]) 

Проверьте это: http://davidwalsh.name/checkbox-form-input-arrays

+0

Спасибо, обязательно проверите это. – diesel

0

Один метод, не уверен, если это Лучше всего создать часть запроса по частям.

Представьте, что вы хотите выбрать (с помощью SQL) все membres из таблицы:

$sql = "SELECT * FROM `clothes`" 

Затем добавить свои ограничения запроса:

$options = array(
    'jackets', 
    'jeans', 
    't_shirts', 
    'shoes' 
); 

$firstClause = true; 
foreach ($options as $option) 
{ 
    if (isset($_POST[$option])) 
    { 
     if ($firstClause) 
     { 
      $sql .= " WHERE "; 
      $firstClause = false; 
     } 
     else 
     { 
      $sql .= " OR "; 
     } 
     $sql .= "field = '$option'"; 
    } 
} 
0

насчет следующих

Расширение на то, что grafa сказал:

$checked = $_POST['item']; 
$query_where = ""; 
$N = count($checked); 
for($i=0; $i < $N; $i++) 
{ 
    if($i=0) 
    $query_where = $query_where . "WHERE field = '". $checked[$i] . "'"; 
    else 
    $query_where = $query_where . "AND field = '". $checked[$i] . "'"; 
} 

А потом просто добавьте это в оставшуюся часть вашего запроса select, просто не забудьте проверить, установлены ли значения и т. Д.

Смежные вопросы