1

私は4つのPHP変数を持っており、各変数は動的チェックボックスで構成されています。1つの変数である場合もあれば、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
$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 に答える
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 に答える
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と干渉しないようにします。orsize

于 2012-07-19T20:17:56.397 に答える