###前提・実現したいこと
勉強し始めてから、一ヶ月も立たない初心者です。会員検索サイトのようなものを作成しています。
環境はPHPとMySQLになります。ID、名前、登録日のこの3つの条件(1つでも3つでも条件に合うようなら検索できるようにしたいです。)から検索して、該当する会員の検索結果を表示するようにしたいと思っています。
###発生している問題
登録日だけで検索をすると、どの日付を選んでも、全会員のデータが表示されてしまいます。また、何も入力しないでも、全データが出力されてしまします。どこに問題があるのかを教えていただけますと、幸いです。
長いですが、以下にソースコードを記入させていただきます。
お手数をおかけいたしますが、もし可能であればアドバイスを頂きたいです。
###該当のソースコード
<form name="form1" method ="post"action ="member_search.php"> ID(半角) <input type="text" name="vid"value> 氏名 <input type="text" name="nm"value> 入会日 <input type="date" name="ndt"value> <input type="submit" value="検索"> </form> <?php try { $dsn ='mysql:dbname=kadai;host=localhost'; $user ='root'; $password=''; $dbh =new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql ='SELECT id,name,address,tel1,tel2,email,ndate,remarks FROM mst_member WHERE 1'; $stmt =$dbh->prepare($sql); $stmt->execute(); print "<table border=1>" ; print "<tr><td>ID</td><td>名前</td><td>住所</td><td>電話番号(固定)</td><td>電話番号(携帯)</td><td>メールアドレス)</td><td>入会日</td><td>備考</td><tr/>"; while(true) { $rec =$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { break; } print"<tr>" ; print"<td>".$rec["id"]."</td>"; print"<td>".$rec["name"]."</td>"; print"<td>".$rec["address"]."</td>"; print"<td>".$rec["tel1"]."</td>"; print"<td>".$rec["tel2"]."</td>"; print"<td>".$rec["email"]."</td>"; print"<td>".$rec["ndate"]."</td>"; print"<td>".$rec["remarks"]."</td>"; print"<br/>"; print"<tr/>" ; } print "</table>" ; } catch (Exception $e) { print'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } $dbh = null; ?>
member_search.php
<?php try { $vid=$_POST['vid']; $nm=$_POST['nm']; $ndt=$_POST['ndt']; $dsn ='mysql:dbname=kadai;host=localhost'; $user ='root'; $password=''; $dbh =new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql = "SELECT * FROM mst_member WHERE 1 = 1 "; if ($vid !="") { $sql .= " and id = $vid "; } if ($nm != "" ) { $sql .= " and name like '%$nm%' "; } if ($ndt != "" ) { $sql .= " and ndate >= $ndt "; } else { $post[]=""; } $stmt =$dbh->prepare($sql); $data[]=$vid; $data[]=$nm; $data[]=$ndt; $stmt->execute($data); $count=$stmt->rowCount(); print"検索結果は".$count."件です。<br>"; } catch (Exception $e) { print'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } if ($count<1) { print"検索結果がありません。<br>"; } else { ?> <table border=1> <tbody> <tr><td>ID</td><td>名前</td><td>住所</td><td>電話番号(固定)</td><td>電話番号(携帯)</td><td>メールアドレス)</td><td>入会日</td><td>備考</td><tr/>" <?php while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { ?> <tr> <td><?=htmlspecialchars($row['id'])?></td> <td><?=htmlspecialchars($row['name'])?></td> <td><?=htmlspecialchars($row['address'])?></td> <td><?=htmlspecialchars($row['tel1'])?></td> <td><?=htmlspecialchars($row['tel2'])?></td> <td><?=htmlspecialchars($row['email'])?></td> <td><?=htmlspecialchars($row['ndate'])?></td> <td><?=htmlspecialchars($row['remarks'])?></td> </tr> <?php } ?> </tbody></table> <?php } ?>
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答3件
あなたの回答
tips
プレビュー