在PHP中变量前后插入不同的字符串

时间:2012-07-19 20:10:11

标签: php arrays variables

我有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

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

3 个答案:

答案 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