1

我有 4 个 PHP 变量,每个变量由动态复选框组成,有时它可以是一个变量,有时更多但不超过 4 个:

$type = 'type_id = 2';
$color = 'color_id = 3';
$man = 'man_id = 5';
$size = 'size_id = 4 or size_id = 5';

我需要对这些变量进行Mysql查询,问题是如何在每个变量前添加WHERE和AND字符串。在第一个变量之前,我需要添加 WHERE(可以是 $type 或 $color 或其他)。如果第一个变量处于活动状态并且检查了其他变量,我需要添加 AND 以形成正确的查询。例如

如果仅选中“类型”复选框:

WHERE $type

如果选中“大小”和“类型”复选框:

WHERE $size AND $type

等等...希望你能理解我的问题,抱歉英语不好。

4

3 回答 3

2

将它们放在一个数组中并implode()像这样加入它们:

$temp = array( $type, $color, $man, $size);
$string = 'WHERE ' . implode( ' AND ', $temp);

如果未设置任何这些变量(即未从复选框提交),请不要将其添加到数组中:

$temp = array();
if( isset( $_POST['somecheckbox'])) {
    $temp[] = "( something = value )";
}
if( isset( $_POST['someothercheckbox'])) {
    $temp[] = "( somethingelse = value )";
}
...
于 2012-07-19T20:13:13.990 回答
2
$parts = array();
if (!empty($type)) {
    $parts[] = '(' . $type . ')';
}
if (!empty($color)) {
    $parts[] = '(' . $color . ')';
}
if (!empty($man)) {
    $parts[] = '(' . $man . ')';
}
if (!empty($size)) {
    $parts[] = '(' . $size. ')';
}
$where = '';
if (!empty($parts)) {
    $where = 'WHERE ' . implode(' AND ', $parts);
}
$select .= $where;
于 2012-07-19T20:14:54.760 回答
1

假设您的复选框是通过 POST 提交的,您可以在 PHP 中有一个关联数组,它可以迭代并检查相应的复选框选择;如果选中,它会将其添加到字符串中。

粗略的草图可能是:

$fields = array(
    'type' => 'type_id = 2',
    'color' => 'color_id = 3',
    'man' => 'man_id = 5',
    'size' => 'size_id = 4 or size_id = 5'
);
$whereClause = '';
foreach ($fields as $field => $value) {
    if (isset($_POST[$field]) && ($_POST['field'] == 1)) {
            // this field is "active"
        if ($whereClause != '') $whereClause .= ' AND ';
        $whereClause .= '(' . $value . ')';
    }
}
if ($whereClause != '') $whereClause = ' WHERE ' . $whereClause;

请注意,我将$value每个字段的 括在括号中,这样and不会干扰变量or中的。size

于 2012-07-19T20:17:56.397 回答