質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1368閲覧

sqlで指定した複数条件に該当するデータのみを抽出してブラウザに表示させたい

bigin

総合スコア67

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/11/24 11:55

[実現したいこと]
以下の検索フォーム(index.html)にて、検索したデータに該当するものをブラウザに表示させたいです。

[うまくいくこと]
prefecture=>"東京都"
にしてすると、うまくprefecture=東京都のレコードのみ抽出されて表示されます。

[うまくいかないこと]
prefecture=>"東京都"
type=>"保育園"
上記条件で検索するとtype=>"保育園"が適用されずprefecture=東京都のレコードのみ抽出されて表示されます。

[教えて欲しいこと]
prefecture=>"東京都"
type=>"保育園"
上記2点のどちらのデータも含むものをDBから抽出されて表示する場合、コードのどこを修正すべきでしょうか?

[環境]
ローカル開発環境、MacOSX,mysql

index.html

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <tittle>入力フォーム</title> </head> <body> <form method="post" action="SEARCH_Show.php"><br> 園名<br> <input type="text" name="name" size="60" maxlength="30" value=""><br> 電話番号<br> <input type="tel" name="tel" size="30" maxlength="12" value=""><br> 担当者名<br> <input type="text" name="person_name" size="30" maxlength="20" value=""><br> 都道府県<br> <select name="prefecture"><br> <option value="全て">全て</option> <option value="東京都">東京都</option> <option value="神奈川県">神奈川県</option> <option value="千葉県">千葉県</option> <option value="埼玉県">埼玉県</option> </select><br> 市区町村<br> <input type="text" name="city" size="30" maxlength="30" value=""><br> 分類<br> <select name="type"><br> <option value="全て">全て</option> <option value="保育園">保育園</option> <option value="幼稚園">幼稚園</option> <option value="サークル">サークル</option> <option value="その他">その他</option> </select><br> <button type="submit" class="">検索</button> </form> </body> </html>

検索後ブラウザ表示php

<?php require 'Manager.php'; require 'Escape.php'; ini_set('display_errors',1); ?> <!DOCTYPE html> <html lang = "ja"> <head> <meta charset ="UTF-8"> <tittle>登録ページ</tittle> </head> <body> <table border='1' class="TableStyle1" width="1000"> <tr> <th>名称</th> <th>都道府県</th> <th>市区町村</th> <th>番地</th> <th>区分</th> <th>電話番号</th> <th>担当者名</th> <th>部数</th> <th>設置/配布</th> <th>消去</th> </tr> <?php try{ $db = connect(); $name=$_POST['name']; $tel=$_POST['tel']; $person_name=$_POST['person_name']; $prefecture=$_POST['prefecture']; $city=$_POST['city']; $type=$_POST['type']; if($name){ $sql = "SELECT * FROM zenkoku where name=:name"; $stmt = $db->prepare($sql); $stmt->bindParam(':name',$name); $stmt->execute(); }elseif($tel){ $sql = "SELECT * FROM zenkoku where tel=:tel"; $stmt = $db->prepare($sql); $stmt->bindParam(':tel',$tel); $stmt->execute(); }elseif($person_name){ $sql = "SELECT * FROM zenkoku where person_name=:person_name"; $stmt = $db->prepare($sql); $stmt->bindParam(':person_name',$person_name); $stmt->execute(); }elseif($prefecture=="全て" && $city==NULL && $type="全て"){ $sql = "SELECT * FROM zenkoku"; $stmt = $db->prepare($sql); $stmt->execute(); }elseif($prefecture =="東京都" && $city==NULL && $type="全て"){ $sql = "SELECT * FROM zenkoku where prefecture = :prefecture"; $stmt = $db->prepare($sql); $stmt->bindParam(':prefecture',$prefecture); $stmt->execute(); }elseif($prefecture =="東京都" && $city==NULL && $type="保育園"){ $sql = "SELECT * FROM zenkoku where prefecture = :prefecture AND type=:type"; $stmt = $db->prepare($sql); $stmt->bindParam(':prefecture',$prefecture); $stmt->bindParam(':type',$type); $stmt->execute(); }elseif($prefecture =="神奈川県" && $city==NULL && $type="全て"){ $sql = "SELECT * FROM zenkoku where prefecture = :prefecture"; $stmt = $db->prepare($sql); $stmt->bindParam(':prefecture',$prefecture); $stmt->execute(); }elseif($prefecture =="千葉県" && $city==NULL && $type="全て"){ $sql = "SELECT * FROM zenkoku where prefecture = :prefecture"; $stmt = $db->prepare($sql); $stmt->bindParam(':prefecture',$prefecture); $stmt->execute(); }elseif($prefecture =="埼玉県" && $city==NULL && $type="全て"){ $sql = "SELECT * FROM zenkoku where prefecture = :prefecture"; $stmt = $db->prepare($sql); $stmt->bindParam(':prefecture',$prefecture); $stmt->execute(); }elseif($prefecture=="全て" && $city==NULL && $type=="保育園"){ $sql = "SELECT * FROM zenkoku where type=:type"; $stmt = $db->prepare($sql); $stmt->bindParam(':type',$type); $stmt->execute(); }elseif($prefecture=="全て" && $city==NULL && $type=="幼稚園"){ $sql = "SELECT * FROM zenkoku where type=:type"; $stmt = $db->prepare($sql); $stmt->bindParam(':type',$type); $stmt->execute(); }elseif($prefecture=="全て" && $city==NULL && $type=="サークル"){ $sql = "SELECT * FROM zenkoku where type=:type"; $stmt = $db->prepare($sql); $stmt->bindParam(':type',$type); $stmt->execute(); }elseif($prefecture=="全て" && $city==NULL && $type=="その他"){ $sql = "SELECT * FROM zenkoku where type=:type"; $stmt = $db->prepare($sql); $stmt->bindParam(':type',$type); $stmt->execute(); }else{ echo "do again"; } while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ ?> <tr> <td><?php es($row['name']);?></td> <td><?php es($row['prefecture']);?></td> <td><?php es($row['city']);?></td> <td><?php es($row['address']);?></td> <td><?php es($row['type']);?></td> <td><?php es($row['tel']);?></td> <td><?php es($row['person_name']);?></td> <td><?php es($row['copies']);?></td> <td><?php es($row['set_type']);?></td> </tr> <?php } }catch(PDOException $e){ echo $e->getMessage(); exit; } ?> </table> </body> </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

へんな組み合わせは必要ないと思います
こんな感じでどうでしょうか?

HTML

1<form method="post"><br> 2園名<br> 3<input type="text" name="name" size="60" maxlength="30" value=""><br> 4電話番号<br> 5<input type="tel" name="tel" size="30" maxlength="12" value=""><br> 6担当者名<br> 7<input type="text" name="person_name" size="30" maxlength="20" value=""><br> 8都道府県<br> 9<select name="prefecture"><br> 10<option value="全て">全て</option> 11<option value="東京都">東京都</option> 12<option value="神奈川県">神奈川県</option> 13<option value="千葉県">千葉県</option> 14<option value="埼玉県">埼玉県</option> 15</select><br> 16市区町村<br> 17<input type="text" name="city" size="30" maxlength="30" value=""><br> 18分類<br> 19<select name="type"><br> 20<option value="全て">全て</option> 21<option value="保育園">保育園</option> 22<option value="幼稚園">幼稚園</option> 23<option value="サークル">サークル</option> 24<option value="その他">その他</option> 25</select><br> 26<button type="submit" class="">検索</button> 27</form>

PHP

1$name =filter_input(INPUT_POST,'name'); 2$tel =filter_input(INPUT_POST,'tel'); 3$person_name=filter_input(INPUT_POST,'person_name'); 4$prefecture =filter_input(INPUT_POST,'prefecture'); 5$city =filter_input(INPUT_POST,'city'); 6$type =filter_input(INPUT_POST,'type'); 7 8if(!is_null($name)){ 9$sql = "SELECT * FROM zenkoku where 1 "; 10$data=[]; 11if($name !=="" ){ $sql.= "AND name = ? "; $data[]=$name;} 12if($tel !=="" ){ $sql.= "AND tel = ? "; $data[]=$tel;} 13if($person_name!=="" ){ $sql.= "AND person_name = ? ";$data[]=$person_name;} 14if($prefecture !=="全て"){ $sql.= "AND prefecture = ? "; $data[]=$prefecture;} 15if($city !=="" ){ $sql.= "AND city = ? "; $data[]=$city;} 16if($type !=="全て"){ $sql.= "AND type = ? "; $data[]=$type;} 17print $sql.";<br>".PHP_EOL; 18print_r($data); 19/*SQLの実行はこう 20$stmt = $pdo->prepare($sql); 21$stmt->execute($data); 22*/ 23}

投稿2017/11/24 12:56

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bigin

2017/11/24 13:23

ありがとうございます! $prefecture=東京都と$type=保育園の両方の値を有するレコードを抽出したい場合でも、いただいたコードで実装可能ですか?
yambejp

2017/11/24 13:26

東京と保育園を選ぶと以下が抽出されます SELECT * FROM zenkoku where 1 AND prefecture = ? AND type = ? ; Array ( [0] => 東京都 [1] => 保育園 ) 条件は上記であいますよね?
bigin

2017/11/24 14:47

本当ですね!条件は上記であっていると思いますが、if文は一つの条件に当てはまると処理終えるのではないのですか? つまり、 if($prefecture!=="全て")に該当し処理を行いかつ if($type!=="全て")にも当てはまり処理を行うのはなぜか?(なぜ、 if($prefecture!=="全て")の時点でif 文の処理を終えないのか)が上手く理解できません。
guest

0

if文は、波かっこ{}の中の処理が終わったら、下にいって、
次の処理をします。if(){}の{}さえ出れば、幾つあっても、
if文は、止まりません。

<?php if(1){ $box = 3; $box1= 0; $box2= 3; if ($box == 3){ echo "number is 1."; } if ($box ==2) { echo "number is 2"; } if ($box== 3) { echo "number is 3"; } } //number is 1.number is 3

投稿2018/09/25 20:00

kazu_2017

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問