前提
・昨日XAMPPを入れて初めてPHP、SQL、HTMLを触ったプログラミング歴2日の超初心者です。
・ソシャゲのカードをレアリティや属性などからチェックボックで絞り込んで表を表示するサイトがほしくて、以下のようなものをほぼインターネットからのコピペで作りました。(実際はもっとデータ量があり、カラム数ももう少し多いです)
#####1.MySQLのデータベース(テーブル名はcardlistです)
no | reality | character | type1 | type2 | type3 | type4 | type5 | type6 | type7 | type8 |
---|---|---|---|---|---|---|---|---|---|---|
0001 | N | キャラ1 | 属性4 | 属性17 | 属性39 | 属性62 | 属性82 | |||
0002 | R | キャラ1 | 属性22 | 属性26 | 属性36 | 属性43 | 属性45 | 属性73 | 属性84 | |
0003 | SR | キャラ1 | 属性6 | 属性24 | 属性37 | 属性44 | 属性47 | 属性53 | 属性58 | |
0004 | SSR | キャラ1 | 属性2 | 属性32 | 属性42 | 属性47 | 属性49 | 属性79 | 属性84 | 属性90 |
0005 | N | キャラ2 | 属性1 | 属性17 | 属性38 | 属性59 | 属性69 | 属性76 | ||
0006 | R | キャラ2 | 属性18 | 属性24 | 属性35 | 属性49 | 属性56 | 属性74 | ||
0007 | SR | キャラ2 | 属性14 | 属性50 | 属性51 | 属性53 | 属性57 | 属性63 | 属性90 | |
0008 | SSR | キャラ2 | 属性1 | 属性7 | 属性19 | 属性66 | 属性69 | 属性70 | 属性75 | 属性90 |
こんな感じに属性が各カード最大8個ついていて、個数はカードによって違います。
属性はたくさん種類があり、今後も増えると思います。
キャラも実際にはもっとたくさんいます。
type1~8に区別はないです。(各属性はどのカラムにも入る可能性がある)
#####2.HTML(cardsearch.phpに書いています)
html
1 <form action="cardsearch.php" method="POST"> 2 <h3>レア</h3> 3 <p> 4 <label><input type="checkbox" name="reality[]" value="N">N</label> 5 <label><input type="checkbox" name="reality[]" value="R">R</label> 6 <label><input type="checkbox" name="reality[]" value="SR">SR</label> 7 <label><input type="checkbox" name="reality[]" value="SSR">SSR</label> 8 </p> 9 <h3>キャラ</h3> 10 <p> 11 <label><input type="checkbox" name="character[]" value="キャラ1">キャラ1</label> 12 <label><input type="checkbox" name="character[]" value="キャラ2">キャラ2</label> 13 <label><input type="checkbox" name="character[]" value="キャラ3">キャラ3</label> 14 </p> 15 <h3>属性</h3> 16 <p> 17 <label><input type="checkbox" name="type[]" value="属性1">属性1</label> 18 <label><input type="checkbox" name="type[]" value="属性2">属性2</label> 19 <label><input type="checkbox" name="type[]" value="属性3">属性3</label> 20 長いので中略 21 <label><input type="checkbox" name="type[]" value="属性88">属性88</label> 22 <label><input type="checkbox" name="type[]" value="属性89">属性89</label> 23 <label><input type="checkbox" name="type[]" value="属性90">属性90</label> 24 </p> 25 <p> 26 <input type="submit" value="絞り込み"> <input type="reset" value="リセット"> 27 </p>
属性は多いので最終的には折りたたみとかでいい感じにまとめる予定です。
#####3.PHP(上のHTMLの真下に書いてあります)
php
1<?php 2$where=""; 3//$whereは変数で、中身が空 4foreach((array) $_REQUEST['reality'] as $key=>$reality){ 5//$_REQUEST['reality']がレアで選択したデータ 6//$keyと$realityは変数なのは分かるが詳細不明、$_REQUEST['reality']が入っている?$keyと$realityの違いは? 7 if($key==0) $where.=" AND (0"; 8 //レアで選択したデータが0個のとき、「 AND (0」が出力される? 9 $where .= " OR `reality`='".$reality."'"; 10 //不明 11 if($key==count($_REQUEST['reality'] ) -1) $where.=")"; 12 //レアで選択したデータの数を数えている?「)」を出力するのは分かるが、-1が分からない 13 //選択が0個なら$where= AND (0)になる? 14 } 15foreach((array) $_REQUEST['character'] as $key=>$character){ 16 if($key==0) $where.=" AND (0"; 17 $where .= " OR `character`='".$character."'"; 18 if($key==count($_REQUEST['character'] ) -1) $where.=")"; 19 } 20 $sql = "SELECT * FROM cardlist WHERE 1".$where; 21 //cardlistを取得、$whereで絞り込み条件の設定が行われている 22 //WHERE 1は何も絞り込みがなかったときに全件表示させるためのものらしいので、WHERE 1 AND (0)は絞り込み条件なしということ? 23 $stmt = $dbh->query( $sql ); 24 //$dbhはログイン情報が入っている 25 //$dbhでcardlistにアクセス、$sql(SELECT~の実行結果)が$stmtに入る 26 echo "<table>\n"; 27 echo "\t<thead><tr><th>No.</th><th>レア</th><th>キャラ</th><th colspan=8>属性</tr></thead>\n"; 28 while( $result = $stmt->fetch( PDO::FETCH_ASSOC ) ){ 29 //ループ処理らしいが詳細不明 30 echo "\t<tbody><tr>\n"; 31 echo "\t\t<td>{$result['no']}</td>\n"; 32 echo "\t\t<td>{$result['reality']}</td>\n"; 33 echo "\t\t<td>{$result['character']}</td>\n"; 34 echo "\t\t<td>{$result['type1']}</td>\n"; 35 echo "\t\t<td>{$result['type2']}</td>\n"; 36 echo "\t\t<td>{$result['type3']}</td>\n"; 37 echo "\t\t<td>{$result['type4']}</td>\n"; 38 echo "\t\t<td>{$result['type5']}</td>\n"; 39 echo "\t\t<td>{$result['type6']}</td>\n"; 40 echo "\t\t<td>{$result['type7']}</td>\n"; 41 echo "\t\t<td>{$result['type8']}</td>\n"; 42 echo "\t</tr></tbody>\n"; 43 } 44 echo "</table>\n"; 45 //これで絞り込み結果を表で表示できる 46 ?>
属性の絞り込みは未実装です。(これの実装方法が質問です。)
HTMLとPHPは以下のページをコピペして少し変えただけなので仕組みがあまり分かっていません。
phpのチェックボックスによる絞込みについて -PHPとSQLでチェックボッ- PHP | 教えて!goo https://oshiete.goo.ne.jp/qa/7153577.html
コメントで自分の理解を書いてみました。
#####4.CSS
今回の質問には不要だと思うので省略します。
また、装飾関係でやりたいことがあったためjQueryをbodyの一番下に入れています。
###チェックボックスの仕様
同じカラムのチェックボックスを複数つけるとOR検索に、違うカラム同士はAND検索になるようになっています。
何にもチェックを入れないと全てを表示します。
(例)
レアのNとRにチェックを入れて絞り込みを押すと0001、0002、0005、0006が出る
レアのNとR、キャラのキャラ1にチェックを入れて絞り込みを押すと0001、0002が出る
###解決したいこと
属性にチェックを入れて絞り込めるようにしたいです。
属性に複数チェックを入れたときはキャラやレアとは違いAND検索にして、チェックを入れた全ての属性を持つカードを表示したいです。
他のカラム同士とは現在の仕様と同じくAND検索になるようにしたいです。
(例)
属性1にチェックを入れて絞り込みを押すと0005、0008が出る
属性1と属性17にチェックを入れて絞り込みを押すと0005が出る
レアのNと属性1にチェックを入れて絞り込みを押すと0005が出る
レアのRと属性1にチェックを入れて絞り込みを押すと何も出ない
同じ結果が得られればテーブルの構造などが変わっても大丈夫です。
最終的には無料のレンタルサーバーを使って他のプレイヤーに公開したいです。
試したこと
「複数カラム 絞り込み」などのワードで調べましたが思うようなものは見つかりませんでした。
補足情報(FW/ツールのバージョンなど)
どこの何を答えるべきか分からないので省略します。
おそらく初歩的な部分で躓いているのだと思いますが、回答よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/26 13:34