###前提・実現したいこと
PHPとzammpを使ってます。
あらかじめ、データベースに登録しておいた情報をあいまい検索したいのですが、上手くいきません。
あと○○年~○○年と指定して、検索すると○○年~○○年までの情報が出るようにしたいのです。
以下のソースはbooknameにポストされたものをあいまい検索するものです。
どうsql文を繋げて三つの欄を検索出来るようになるのか、ご教示お願い致します。
###発生している問題・エラーメッセージ
Notice: Undefined variable: errors in C:\xampp\htdocs\book\bookSearch.php on line 14
Notice: Undefined variable: errors in C:\xampp\htdocs\book\bookSearch.php on line 82
###該当のソースコード
//検索ワード入力画面
<form action="bookSearch.php" method="post"> <table> <tr> <td>題名 :</td> <td><input type="text" name="bookname"></td> </tr> <tr> <td>著者 :</td> <td><input type="text" name="writer"></td> </tr> <tr> <td>出版年:</td> <td><input type="text" name="year">~</td><td><input type="text" name="year2"></td> </tr> </table> <input type="submit" value="検索"> <input type="reset" value="リセット"> </form>//検索先
<?php header("Content-type: text/html; charset=utf-8"); if(empty($_POST)) { header("Location: book_up.php"); exit(); }else { //名前入力判定 if(!isset($_POST['bookname']) || $_POST['bookname'] ===""){ $errors['bookname'] = "題名が入力されていません。"; } } if(count($errors) === 0){ $dsn ='mysql:host=localhost;dbname=book;charset=utf8'; $user='root'; $password=''; try{ $dbh = new PDO($dsn,$user,$password); $statement = $dbh->prepare("SELECT * FROM hondana WHERE bookname LIKE (:bookname) "); if($statement){ $bookname = $_POST['bookname']; $like_bookname="%".$bookname."%"; $statement->bindValue(':bookname', $like_bookname, PDO::PARAM_STR); if($statement->execute()){ $row_count = $statement->rowCount(); while ($row = $statement->fetch()) { $rows[]= $row; } } else { $errors['error'] = "検索失敗しました。"; } $dbh = null; } } catch (PDOException $e){ print('Error:'.$e->getMessage()); $errors['error'] = "データベース接続失敗しました。"; } } ?> <!DOCTIPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <h2>図書検索について</h2> 図書を登録できます。 <p>図書検索フォーム</p> <?php if (count($errors) === 0): ?> <p>【<?=htmlspecialchars($bookname,ENT_QUOTES, 'UTF-8')."】で検索しました。"?></p> <p><?=$row_count?>件です。</p> <table rules="all" border="1"> <tr><td>id</td><td>name</td></tr> <?php foreach($rows as $row){ ?> <tr> <td><?=$row['code']?></td> <td><?=htmlspecialchars($row['bookname'],ENT_QUOTES,'UTF-8')?></td> <td><?=htmlspecialchars($row['writer'],ENT_QUOTES,'UTF-8')?></td> <td><?=htmlspecialchars($row['year'],ENT_QUOTES,'UTF-8')?></td> </tr> <?php } ?> <?php elseif(count($errors) > 0): ?> <?php foreach($errors as $value){ echo "<p>".$value."</p>"; } ?> </table> <?php endif; ?></body> </html><a href="book_up.php">戻る</a>
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答2件
あなたの回答
tips
プレビュー