0

私はしばらくこれを理解しようとしてきましたが、どこにも行きません。ここやインターネットに投稿された他の多くの質問を読みましたが、解決策を見つけることができません. 特に複数のチェックボックスを使用する場合。

私が直面している問題を説明しようとしていますので、ご容赦ください。

ページには、php/sql を使用してデータベースから取得した、対応する場所を持つ人物のリストがあります。私が達成しようとしているのは、チェックボックスを使用して場所に応じてリストをフィルタリングできるようにすることです。

これは、チェックボックス用に現在持っているコードです。

<ul>
    <li><input type="checkbox" name="check_list[]" value="sydney">Sydney</li>
    <li><input type="checkbox" name="check_list[]" value="durban">Durban</li>
    <li><input type="checkbox" name="check_list[]" value="delhi">Delhi</li>
    <li><input type="checkbox" name="check_list[]" value="cairo">Cairo</li>
    <li><input type="checkbox" name="check_list[]" value="madrid">Madrid</li>
    <li><input type="submit"></li>
</ul>

これは、チェックボックスがチェックされているかどうかを確認し、それに応じてSQLクエリを変更するために使用しているコードです

if (empty ($_POST['check_list'])) {

    $SQLquery = 'SELECT * FROM `people`';
    $query = $conn->query($SQLquery);

} elseif (!empty($_POST['check_list'])) {

    foreach($_POST['check_list'] as $check)

    $location = $check;

    $query = $conn->prepare('SELECT * FROM `people` WHERE `p_location` = :location');
    $query->execute(array('location' => $location));

}

チェックボックスが1つだけチェックされている場合、このコードは正常に機能するようになりました。ただし、複数のチェックボックスがオンになっていると、これは失敗します。何も示していないだけです。

演算子を使用して SQL クエリを変更し、OR次のように他の場所を追加できることはわかっています。

$query = $conn->prepare('SELECT * FROM `people` WHERE `p_location` = 'Delhi' OR `p_location` = 'Madrid')

ただし、最初にすべてのチェックボックスがオンになっていることを確認してから、複数の都市が選択されている場合に結果をフィルタリングする方法で SQL ステートメントを作成する方法を理解できません。

また、これがこのようなことを達成するための最良の方法であるかどうかも疑問に思っています。私はphp/sqlの範囲内でこれを達成する別の方法を受け入れています。

4

3 に答える 3

1

テストされていませんが、何をすべきかについてのアイデアを提供するはずです。

回答を修正しました!

$markers = str_repeat('?, ', count($_POST['check_list']) - 1) . '?';

$query = $conn->prepare('SELECT * FROM `people` WHERE `p_location` IN (' . $markers . ')');
$query->execute($_POST['check_list']);
于 2013-04-20T18:43:38.257 に答える
0

このようなことをしてください

where p_location in (the values for your checkboxes)
于 2013-04-20T18:40:56.970 に答える