PHPで郵便番号検索サイトを作成しています。
以下が要件です。
1.郵便番号及び住所の情報をデータベースで管理する。
2.郵便番号から住所が検索できる。
3.検索結果は一覧で「郵便番号、住所」の最低限2つを1行ずつ表示する。
4.郵便番号が未入力だった場合、エラーメッセージを表示する。
5.郵便番号は7桁の数値のみ検索可能とし、それ以外はエラーメッセージを表示する。
6.都道府県と市区町村から住所が検索できる。
7.都道府県、市区町村のどちらか又は両方が未入力だった場合、エラーメッセージを表示する※どちらか片方だけの検索禁止
8.郵便番号、都道府県、市区町村の入力の前後にある全角及び半角スペースを削除する。入力値チェックや検索はこの後に行う。 例)「 1100001 」→「1100001」
9.検索結果が10件を超えた場合、表示結果を複数ページに分ける。 ※「前へ」「次へ」のようなリンクによりページ切り替えができる
発生している問題・エラーメッセージ
郵便番号で検索が可能になったのですが、地名から検索(都道府県、市区町村をキーに検索)を行ってもデータが出てきません。 どなたか、ご教授お願い致します。
該当のソースコード
PHP
1ソースコード 2<?php 3// 変数を設定 4$post_num = ''; 5$area =''; 6$city =''; 7$town =''; 8$error1 = []; 9$error2 = []; 10$user_data = []; 11$abc_data = []; 12$query = ''; 13$host = ''; 14$username = ''; 15$passwd = ''; 16$dbname = ''; 17$link= mysqli_connect($host, $username, $passwd, $dbname); 18$page = 1; 19$count = 0; 20$totalpage = ceil($count/ 10);//切り上げ 21/*変数が存在する確認*/ 22if(isset($_POST['post_num']) === true || isset($_POST['area']) === true) { 23 if(isset($_POST['post_num']) === true) { 24 $post_num = htmlspecialchars($_POST['post_num'], ENT_QUOTES, 'UTF-8'); 25 } 26 if(isset($_POST['area']) === true) { 27 $area = htmlspecialchars($_POST['area'], ENT_QUOTES, 'UTF-8'); 28 } 29 if(isset($_POST['city']) === true) { 30 $city = htmlspecialchars($_POST['city'], ENT_QUOTES, 'UTF-8'); 31 } 32 if(isset($_POST['town']) === true) { 33 $town = htmlspecialchars($_POST['town'], ENT_QUOTES, 'UTF-8'); 34 } 35 if(isset($_POST['page']) === true) { 36 $page = htmlspecialchars($_POST['page'], ENT_QUOTES, 'UTF-8'); 37 } 38/*空白削除*/ 39 $post_num = str_replace(array(" "," "),"", $post_num); 40 $area = str_replace(array(" "," "),"", $area); 41 $town = str_replace(array(" "," "),"", $town); 42/*エラーメッセージ*/ 43 if(empty($post_num) === true && 44 ($area === '都道府県を選択' || empty($city) === true)) { 45 $error1[] = '郵便番号を入力してください'; 46 }else if ((preg_match('/^[0-9]{7}$/', $post_num) !== 1) && 47 ($area === '都道府県を選択' || empty($city) === true)) { 48 $error1[] = '7桁の数字で入力してください'; 49 }else { 50 print ""; 51 } 52 if ($area === '都道府県を選択' && 53 (empty($post_num) === true ||(preg_match('/^[0-9]{7}$/', $post_num) !== 1))) { 54 $error2[] = '都道府県を選択してください'; 55 } 56 if(empty($city) === true && 57 (empty($post_num) === true ||(preg_match('/^[0-9]{7}$/', $post_num) !== 1))){ 58 $error2[] = '市区町村名をを入力してください'; 59 } 60/*データベースに接続*/ 61 if(count($error1) === 0 || count($error2) === 0) { 62 if($link) { 63 mysqli_set_charset($link, 'utf8'); 64 if($post_num !== 0) { 65 $query = "SELECT post_num, area , city, town FROM test_table 66 WHERE post_num = '$post_num'"; 67 } else { 68 $limit = 10*$page-10; 69 $query = "SELECT post_num, area , city, town FROM test_table"; 70 $abc = "SELECT post_num, area , city, town FROM test_table"; 71 $result = mysqli_query($link, $abc); 72 while($row = mysqli_fetch_array($result)) { 73 $abc_data[] = $row; 74 } 75 } 76 // var_dump($query); 77 $result = mysqli_query($link, $query); 78 while($row = mysqli_fetch_array($result)) { 79 $user_data[] = $row; 80 } 81 mysqli_free_result($result); 82 mysqli_close($link); 83 }else { 84 echo 'DB接続失敗'; 85 } 86 } 87} 88$count = count($abc_data); 89?> 90<!DOCTYPE html> 91<html lang="ja"> 92<head> 93 <meta charset="UTF-8"> 94 <title>郵便</title> 95</head> 96<body> 97 <form action="practice_post_code_advanced.php" method="post"> 98 <h1>郵便番号検索</h1> 99 <h2>郵便番号から検索</h2> 100 <?php print "総件数" . htmlspecialchars($count,ENT_QUOTES,'UTF-8') . "件";?> 101 <input id="post_numer" name="post_num" value=""> 102 <input type="submit" value="検索"> 103 <form action="practice_post_code_advanced.php" method="post"> 104 <h2>地名から検索</h2> 105 <label>都道府県を選択 106 <select name="area" value=""> 107 <option>都道府県を選択</option> 108 <option>北海道</option> 109 <option>兵庫県</option> 110 <option>新潟県</option> 111 </select> 112 </label> 113 <label>市区町村 114 <input type="seach" name="city" value=""> 115 <input type="submit" value="検索"> 116 </label> 117 </form> 118 <p><?php foreach($error1 as $key1 => $string1) { 119 print htmlspecialchars($string1,ENT_QUOTES,'UTF-8'); 120 } 121 ?></p> 122 <p><?php foreach($error2 as $key2 => $string2) { 123 print htmlspecialchars($string2,ENT_QUOTES,'UTF-8');; 124 } 125 ?></p> 126 <?php 127 foreach($user_data as $read) {?> 128 <table> 129 <style type="text/css"> 130 table, td, th { 131 border: solid black 1px; 132 } 133 table { 134 width: 600px; 135 } 136 tr td { 137 width: 150px; 138 } 139 </style> 140 <tr> 141 <th>郵便番号</th> 142 <th>都道府県</th> 143 <th>市町村</th> 144 <th>町域</th> 145 </tr> 146 <tr> 147 <td><?php print htmlspecialchars($read['post_num'],ENT_QUOTES,'UTF-8'); ?></td> 148 <td><?php print htmlspecialchars($read['area'],ENT_QUOTES,'UTF-8'); ?></td> 149 <td><?php print htmlspecialchars($read['city'],ENT_QUOTES,'UTF-8'); ?></td> 150 <td><?php print htmlspecialchars($read['town'],ENT_QUOTES,'UTF-8'); ?></td> 151 </tr> 152 </table> 153 <?php } ?> 154<p> 155 <!--GETを使用するときは?からスタートする--> 156 <?php if ($page > 1) : ?> 157 <a href="?page=<?php echo ($page - 1); ?>&area=<?php print $area; ?> 158 &city=<?php print $city; ?>">前のページへ</a> 159 <?php endif; ?> 160 <?php if ($page < $totalpage) : ?> 161 <a href="?page=<?php echo ($page + 1); ?>&area=<?php print $area; ?> 162 &city=<?php print $city; ?>">次のページへ</a> 163 <?php endif; ?> 164 </p> 165</body> 166</html>
試したこと
地名から検索のコードのvalueに値を指定したり、メソッドを独自にpostで設定したりすこしいじってみましたが、何も変わらずでした。
郵便番号は9570036で検索をかけたらヒットしましたが、
地名で新潟県を選択し、市区町村を上越市にして検索をかけても何もヒットしませんでした。
(データベースのテーブルには新潟県の郵便データを定義しております。)
補足情報(FW/ツールのバージョンなど)
Cloud9
回答1件
あなたの回答
tips
プレビュー