Каков наилучший способ фильтрации содержимого с помощью флажков в PHP? - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть следующие флажки:

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

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

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

Ответы [ 4 ]

1 голос
/ 14 декабря 2011
// 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>
    <?
}
1 голос
/ 14 декабря 2011

Использовать "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 голосов
/ 14 декабря 2011

Как насчет следующего

Расширяя сказанное графа:

$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] . "'";
}

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

0 голосов
/ 14 декабря 2011

Один из способов, не уверенный в том, что он лучший, состоит в создании части запроса по частям.

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

$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'";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...