前提・実現したいこと
PHPの社員マスタの絞り込み検索についての質問です。
現在、PHPとmysqlを使用してマスタ(employee)から社員の絞り込み検索を行おうとしています。
発生している問題・エラーメッセージ
性別(sexual)と所属部署(department)が選択されていないときに
検索ボタン(search)を押すと全件取得するようにしたいのですが、データを取得することができません。
ちなみに
・性別、所属部署の両方が選択された場合
・性別のみ選択された場合
・所属部署のみ選択された場合
はそれぞれの条件で取得できます。
PHP初心者の練習のためメンテナンス性、sqlインジェクション等についてはまだ考慮しておりません。
該当のソースコード
PHP
1 // DB接続 2 $dbh = new PDO('mysql:host=localhost;dbname=syain_db;charset=utf8', $user, $pass); 3 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 4 // 全表示ボタン押下、または初回ログイン時 5 if (isset($_POST['all']) || empty($_POST['search'])) 6 { 7 $sql = "SELECT * FROM employee "; 8 } 9 // 検索ボタン押下時 10 elseif(isset($_POST['search'])) 11 { 12 if($_POST['department'] === "" && $_POST['sexual'] === "") 13 { 14 $sql = "SELECT * FROM employee "; 15 } 16 if($_POST['department'] === "") 17 { 18 $sql = "SELECT * FROM employee "; 19 $sql .= "WHERE "; 20 $sql .= 'sexual = "' . $_POST['sexual'] . '"'; 21 } 22 elseif($_POST['sexual'] === "") 23 { 24 $sql = "SELECT * FROM employee "; 25 $sql .= "WHERE "; 26 $sql .= 'department = "' . $_POST['department'] . '"'; 27 } 28 else 29 { 30 $sql = "SELECT * FROM employee "; 31 $sql .= "WHERE "; 32 $sql .= 'department = "' . $_POST['department'] . '"'; 33 $sql .= "AND "; 34 $sql .= 'sexual = "' . $_POST['sexual'] . '"'; 35 } 36 } 37 38 $stmt = $dbh->query($sql); 39 var_dump($sql); 40 $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 41 42?> 43<p> 44<form method="post"> 45条件を絞り込む<br> 46 47フリーワード<input type="text" name="freeword"><br> 48 49 性別 50 <select name = "sexual"> 51 <option value=""></option> 52 <option value="1">男</option> 53 <option value="2">女</option> 54 </select><br> 55 56 所属部署 57<select name="department"> 58<option value="">選択してください</option> 59 <option value="1">システム部</option> 60 <option value="2">営業部</option> 61 <option value="3">総務部</option> 62</select><br> 63 64<input type="submit" name="search" value="検索する"></input> 65 66<form> 67 <input type="submit" name="all" value="全員表示"> 68</form><br> 69
試したこと
条件の書き方を変えたりしてみたのですが同じ結果になってしまい、どうすればわからない状況です・・・。
解決法等ございましたらどうか、コード等でご教示お願いいたします。
回答1件
あなたの回答
tips
プレビュー