我有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以形成正确的查e.g
如果仅选中“类型”复选框:
WHERE $type
如果选中“size”和“type”复选框:
WHERE $size AND $type
等等......希望你理解我的问题,抱歉英语不好。
答案 0 :(得分: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 )";
}
...
答案 1 :(得分: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;
答案 2 :(得分: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
。