PHPとMySQLを使って検索システムの作り方を勉強しています。
以下のようなhtmlとデータベースがあります。
html
1 <form action="index.php" method="POST"> 2 <input type="checkbox" name="pref[]" value="東京">東京 3 <input type="checkbox" name="pref[]" value="大阪">大阪 4 <input type="checkbox" name="pref[]" value="札幌">札幌 5 <input type="checkbox" name="pref[]" value="京都">京都 6 <input type="checkbox" name="pref[]" value="那覇">那覇 7 <input type="checkbox" name="pref[]" value="福岡">福岡 8 <input type="checkbox" name="pref[]" value="新宿">新宿 9 <input type="checkbox" name="pref[]" value="北京">北京 10 <input type="submit" value="検索"> 11 </form>
id pref
1 東京
2 大阪
3 札幌
4 京都
5 那覇
6 福岡
現在配列データをどのように加工して、SQL文を発行すればいいか悩んでいます。
php
1$check = $_POST['pref']; 2 3foreach($check as value){ 4 echo $value; 5
配列データを受け取り、それを表示させることや、単数選択の場合データベースから一致するデータを表示するというのはできるのですが、”複数選択された時に一致するデータを検索してすべて表示する” 方法が思いつきません。
単純にnameをすべて別の名前にすればいいと思ったのですが、データ量が多い場合非効率だと考え、別の効率的なやり方を模索しています。
配列でデータを受け取ったらそれをcount関数でカウントし、添字をうまく使って検索するワード(選択された値)を変数に格納、SQL文へ持っていくというやり方は可能でしょうか?
効率のよい方法やわかりやすいシンプルな方法があれば教えて下さい!
<現在取り組んでいるやり方>
php
1$check = $_POST['pref']; 2 3$imp = implode(",",$check); 4 5$sql = "SELECT * FROM checkbox_search WHERE pref IN ('$imp')"; 6$query = mysqli_query($connect,$sql);
php
1var_dump($imp); 2var_dump($query); 3var_dump($sql);
<複数選択した場合の検証結果>
string '那覇,福岡' (length=13)
object(mysqli_result)[2]
public 'current_field' => int 0
public 'field_count' => int 2
public 'lengths' => null
public 'num_rows' => int 0
public 'type' => int 0
string 'SELECT * FROM checkbox_search WHERE pref IN ('那覇,福岡')' (length=61)
<単数選択した場合の検証結果>
string '福岡' (length=6)
object(mysqli_result)[2]
public 'current_field' => int 0
public 'field_count' => int 2
public 'lengths' => null
public 'num_rows' => int 2
public 'type' => int 0
string 'SELECT * FROM checkbox_search WHERE pref IN ('福岡')' (length=54)
implode関数を使ったやり方がわかりやすいと思い、色々調べたのですが、どうにもSQL文がうまく機能しません。
単数選択した場合の方のSQL文,
SELECT * FROM checkbox_search WHERE pref IN ('福岡')
は正しいと思うのですが、検索結果を表示させるところまでいけません。
複数選択の方はお手上げです・・・

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/22 19:58
2015/09/22 20:28
2015/09/23 07:15
2015/09/23 12:06
2015/09/23 13:47