前提・実現したいこと
質問が2つあります。どちらか片方でも答えてくれたら助かります。
PHPとMySQLをつかって、学生登録システムを作っています。
質問1
ーーーーーーーーーーーーーーーーーーーー
条件を入力し、学生の絞り込みをしたいのですが、条件を複数選択した場合うまくいきません。
条件を性別だけ、所属だけ、と単独なら正常処理します。
例、性別→女、所属→文化部、で検索すると花子文化部、のび太文化部が表示されてしまう。
今のプログラムでは所属のif分が最後にあり、所属が優先されるプログラムです。
どうやったら、条件を複数選択しても、正しく絞り込みができるでしょうか?
ーーーーーーーーーーーーーーーーーーーー
質問2
ーーーーーーーーーーーーーーーーーーーー
「運動部」で検索しても、yaruo運動部、一人しか検索されません。
正しい処理は
ruck ruck@ 女 運動部,帰宅部,生徒会,
yaruo aaa@ 男 運動部
yaruo aaa@ 男 運動部生徒会
出木杉 aaa@ 男 運動部文化部生徒会
4人検索されるはずです。
この問題の解決方法はどうすればいいでしょうか?
質問2は大幅にプログラムとテーブルを書き換えないと駄目ですね( ;∀;)
ーーーーーーーーーーーーーーーーーーーー
ここに質問の内容を詳しく書いてください。(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
該当のソースコード
PHP
1<!-- 学生表示画面 --> 2<!-- list.php --> 3 4<?php 5 6$res = ""; //新しいウェブページのエラー回避 7 8$USER= 'root'; 9$PW= '1234'; 10$DBINFO= "mysql:dbname=cwdb;host=localhost;charset=utf8"; 11 12try{ 13 $pdo = new PDO($DBINFO,$USER,$PW); //pdoインスタンスの生成 14 $sql = "SELECT * FROM students"; 15 16 //$sql = "SELECT * FROM students WHERE student_name LIKE '%山%'"; 17 if (isset($_POST['freeword'])) { 18 $sql = "SELECT * FROM students WHERE student_number LIKE '%{$_POST['freeword']}%' OR student_name LIKE '%{$_POST['freeword']}%' OR email LIKE '%{$_POST['freeword']}%' "; 19 } 20 21 if (isset($_POST['sex'])) { 22 if ($_POST['sex'] == "男") { 23 $sql = "SELECT * FROM students WHERE sex = '男'"; 24 }elseif ($_POST['sex'] == "女") { 25 $sql = "SELECT * FROM students WHERE sex = '女'"; 26 } 27 } 28 29 if (isset($_POST['syozoku'])) { 30 if ($_POST['syozoku'] == "運動部") { 31 $sql = "SELECT * FROM students WHERE syozoku = '運動部'"; 32 }elseif ($_POST['syozoku'] == "文化部") { 33 $sql = "SELECT * FROM students WHERE syozoku = '文化部'"; 34 }elseif ($_POST['syozoku'] == "帰宅部") { 35 $sql = "SELECT * FROM students WHERE syozoku = '帰宅部'"; 36 }elseif ($_POST['syozoku'] == "生徒会") { 37 $sql = "SELECT * FROM students WHERE syozoku = '生徒会'"; 38 } 39 } 40 41 $stmt = $pdo->prepare($sql); 42 $stmt->execute(null); 43 $res = "<table border=1> 44 <tr> 45 <th>学籍番号</th> 46 <th>氏名</th> 47 <th>メールアドレス</th> 48 <th>性別</th> 49 <th>所属</th> 50 <th>年</th> 51 <th>編</th> 52 </tr>\n"; 53 54 while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 55 56 $res .= <<<eod 57 <tr> 58 <td>{$row['student_number']}</td> 59 <td>{$row['student_name']}</td> 60 <td>{$row['email']}</td> 61 <td>{$row['sex']}</td> 62 <td>{$row['syozoku']}</td> 63 <td>{$row['birth_year']}</td> 64 <td><a href = "edit.php?seq={$row['seq']}">編</a></td> 65 </tr> 66eod; 67 } 68 69 $res .= "</table>\n"; 70 71}catch(Exception $e){ 72 echo "エラー発生" . $e->getMessage(); 73} 74 75?> 76 77<!DOCTYPE html> 78<html> 79<head> 80 <title>一覧画面</title> 81</head> 82<body> 83 84<form method="post" action="regist.php"> 85 <input type="submit" value="新規登録"></input> 86</form> 87 88<p> 89 <form method="post"> 90 条件を絞り込む<br> 91 フリーワード<input type="text" name="freeword"><br> 92 性別 93 <select name="sex"> 94 <option></option> 95 <option value="男">男</option> 96 <option value="女">女</option> 97 </select><br> 98 99 所属 100 <select name="syozoku"> 101 <option></option> 102 <option value="運動部">運動部</option> 103 <option value="文化部">文化部</option> 104 <option value="帰宅部">帰宅部</option> 105 <option value="生徒会">生徒会</option> 106 </select><br> 107 108 <input type="submit" value="検索する"></input> 109 </form> 110</p> 111 112<form> 113 <input type="submit" value="全員表示"> <!-- URLをクリックした時と同じ処理--> 114</form><br> 115 116<?php echo $res; ?> 117 118 119 120</body> 121</html>
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/22 07:55