PHP+MySQLで検索システムを勉強で作成しております。
チェックボックス、ラジオボタン、セレクトボックス、テキストボックスなど
様々な項目をPOSTで受け取ってMySQLに問い合わせる為、WHERE句を作成したいのですが、
例えばチェックボックスだと
・チェックされていない
・1つのみチェックされている
・複数チェックされている
・外部からの攻撃で全く意図しないデータがPOSTされてくる
の4パターンが考えられると思います。
チェックされていない場合はWHERE句に加えなければ良いと思いますが、
複数の場合と1つのみチェックされている場合をどうすれば良いかわかりません。
$_POST['test'] (配列) があったとして
//クエリ生成
$query = "SELECT * FROM test_master WHERE";
$where = "flag = 1";(必須)
if(!empty($_POST['test'])){
$test_value = implode(",",$_POST['test']); $where .=" AND test IN({$test_value});"
}
などとすると最終的に出来るSQLは、
複数チェックされた場合は
「SELECT * FROM test_master WHERE flag = 1 AND test IN(1,2,3);」
のように問題ないとおもうのですが、一つしかチェックされなかった場合は
「SELECT * FROM test_master WHERE flag = 1 AND test IN(1);」
となりエラーになってしまいます。
通常こういう検索システムなどはどのようにやっているものでしょうか?
回答2件
あなたの回答
tips
プレビュー