前提・実現したいこと
PHP初心者です。
誰か分かる方どうかお願いします。
郵便番号及び住所を検索するシステムを1から作成してください。以下の要件を満たせば、ソースコード及びデータベースの詳細は自由となります。
1,郵便番号及び住所の情報をデータベースで管理する。
2,郵便番号から住所が検索できる。
3,検索結果は一覧で「郵便番号、住所」の最低限2つを1行ずつ表示する。
4,郵便番号が未入力だった場合、エラーメッセージを表示する。
5,郵便番号は7桁の数値のみ検索可能とし、それ以外はエラーメッセージを表示する。
6,都道府県と市区町村から住所が検索できる。
7,都道府県、市区町村のどちらか又は両方が未入力だった場合、エラーメッセージを表示する※どちらか片方だけの検索禁止
8,郵便番号、都道府県、市区町村の入力の前後にある全角及び半角スペースを削除する。入力値チェックや検索はこの後に行う。 例)「 1100001 」→「1100001」
9,検索結果が10件を超えた場合、表示結果を複数ページに分ける。 ※「前へ」「次へ」のようなリンクによりページ切り替えができる
発生している問題・エラーメッセージ
1から8までなんとなくできているかなと思うのですが
9の要件がどうしてもできません。
次ページのリンクをクリックして次の10件を表示させたいのですができません。
次のページのリンクを押しても何も画面が変わりません。
エラーも出ません。
何故でしょうか?
該当のソースコード
php
1<?php 2$areas = [ 3'北海道','青森県','岩手県','宮城県','秋田県', 4'山形県','福島県','茨城県','栃木県','群馬県', 5'埼玉県','千葉県','東京都','神奈川県','新潟県', 6'富山県','石川県','福井県','山梨県','長野県', 7'岐阜県','静岡県','愛知県','三重県','滋賀県', 8'京都府','大阪府','兵庫県','奈良県','和歌山県', 9'鳥取県','島根県','岡山県','広島県','山口県', 10'徳島県','香川県','愛媛県','高知県','福岡県', 11'佐賀県','長崎県','熊本県','大分県','宮崎県', 12'鹿児島県','沖縄県',]; 13 14$search_method = ''; 15$postcode = ''; 16$city = ''; 17$cityname = ''; 18$msg = []; 19$address_data = []; 20$data_num = []; 21$num = ''; 22$page = 1; 23$limit =''; 24$total_page =''; 25$num_data = []; 26$page_botton = ''; 27 28$host = ''; // データベースのホスト名又はIPアドレス 29$username = ''; // MySQLのユーザ名 30$passwd = ''; // MySQLのパスワード 31$dbname = ''; // データベース名 32 33$link = mysqli_connect($host, $username, $passwd, $dbname); 34if ($link) { 35 mysqli_set_charset($link, 'utf8'); 36 37 38 if (isset($_GET['search_method']) === TRUE) { 39 $search_method = $_GET['search_method']; 40 } 41 if ($search_method === 'zipcode') { 42 if (isset($_GET['postcode']) === TRUE) { 43 $postcode = $_GET['postcode']; 44 } 45 if ($postcode === '') { 46 $msg[] = '郵便番号を入力してください'; 47 } else if (preg_match('/[0-9]{5,7}/', $postcode) !== 1) { 48 $msg[] = '正しく郵便番号を入力してください'; 49 } 50 51 if (count($msg) === 0) { 52 $sql = 'SELECT address_post, address_1, address_2, address_3 53 FROM address_table 54 WHERE address_post = ' . $postcode; 55 $result = mysqli_query($link, $sql); 56 while ($row = mysqli_fetch_array($result)) { 57 $address_data[] = $row; 58 } 59 $num = count($address_data); 60 61 mysqli_free_result($result); 62 } 63 } 64 65 if ($search_method === 'address') { 66 67 if (isset($_GET['area']) === TRUE) { 68 $city = $_GET['area']; 69 } 70 if ($city === '') { 71 $msg[] = '都道府県を選択してください'; 72 } 73 if (isset($_GET['cityname']) === TRUE) { 74 $cityname = $_GET['cityname']; 75 } 76 if ($cityname === '') { 77 $msg[] = '市区町村を入力してください'; 78 } 79 80 if (count($msg) === 0) { 81 $sql = 'SELECT address_post 82 FROM address_table 83 WHERE address_1 = \'' . $city . '\' 84 AND address_2 LIKE \'%' . $cityname . '%\''; 85 $result = mysqli_query($link, $sql); 86 while ($row = mysqli_fetch_array($result)) { 87 $num_data[] = $row; 88 } 89 $num = count($num_data); 90 mysqli_free_result($result); 91 92 93 94 $limit = ($page * 10) - 10; 95 $sql = 'SELECT address_post, address_1, address_2, address_3 96 FROM address_table 97 WHERE address_1 = \'' . $city . '\' 98 AND address_2 LIKE \'%' . $cityname . '%\' 99 LIMIT '. $limit . ', 10'; 100 $result = mysqli_query($link, $sql); 101 while ($row = mysqli_fetch_array($result)) { 102 foreach ($row as $key => $value) { 103 $row[$key] = htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); 104 } 105 $address_data[] = $row; 106 } 107 mysqli_free_result($result); 108 } 109 110 } 111 mysqli_close($link); 112} else { 113 print '接続失敗'; 114 115} 116$total_page = ceil($num / 10); 117 118 119?> 120<!DOCTYPE html> 121<html lang="ja"> 122<head> 123 <meta charset="UTF-8"> 124 <title>住所検索</title> 125 <style type="text/css"> 126 section:first-of-type { 127 border-bottom: solid 1px #000000; 128 } 129 table, td, th { 130 border: solid 1px #000000; 131 } 132 </style> 133</head> 134<body> 135 <section> 136 137 138 <h1>郵便番号検索</h1> 139 <h2>郵便番号から検索</h2> 140 141 <form method="get"> 142 143 <p><input type="text" name="postcode" placeholder="例)1010001" value="<?php if (mb_strlen($postcode) > 0) { print $postcode; } ?>"> 144 <input type="hidden" name="search_method" value="zipcode"> 145 <input type="submit" value="検索"></p> 146 147 </form> 148 <h2>地名から検索</h2> 149 <form method="get"> 150 151 <p>都道府県を選択 152 <select name="area"> 153 <option value="">都道府県を選択</option> 154<?php foreach ($areas as $value) { ?> 155 <?php if ($city === $value) { ?> 156 <option value="<?php print $value; ?>" selected><?php print $value; ?></option> 157 <?php } else { ?> 158 <option value="<?php print $value; ?>"><?php print $value; ?></option> 159 <?php } ?> 160<?php } ?> 161 </select> 162 163 市区町村<input type="text" name="cityname" value="<?php if (mb_strlen($cityname) > 0) { print $cityname; } ?>"> 164 <input type="hidden" name="search_method" value="address"> 165 <input type="submit" value="検索"></p> 166 167 </form> 168 </section> 169 170 <section> 171<?php if (count($msg) === 0 && count($address_data) === 0) { ?> 172 <p>ここに検索結果が表示されます</p> 173<?php } else if (count($msg) > 0 ) { ?> 174 <?php foreach ($msg as $value) { ?> 175 <p><?php print $value; ?></p> 176 <?php } ?> 177<?php } ?> 178 179<?php if (count($address_data) > 0) { ?> 180 <p>検索結果<?php print $num; ?>件</p> 181 <table> 182 <label>郵便番号検索結果</label> 183 <tr> 184 <th>郵便番号</th> 185 <th>都道府県</th> 186 <th>市区町村</th> 187 <th>町域</th> 188 </tr> 189 <?php foreach ($address_data as $value) { ?> 190 <tr> 191 <td><?php print $value[0]; ?></td> 192 <td><?php print $value[1]; ?></td> 193 <td><?php print $value[2]; ?></td> 194 <td><?php print $value[3]; ?></td> 195 </tr> 196 <?php } ?> 197 </table> 198<?php } ?> 199 200 <?php if ($page > 1) { ?> 201 <a href="?area=<?php print $city; ?>&cityname=<?php print $cityname; ?>&search_method=<?php print $search_method; ?>&page=<?php print ($page - 1); ?>"> 202 前のページ</a> 203 <?php } ?> 204 205 <?php if ($page < $total_page) { ?> 206 <a href="?area=<?php print $city; ?>&cityname=<?php print $cityname; ?>&search_method=<?php print $search_method; ?>&page=<?php print ($page + 1); ?>"> 207 次のページ</a> 208 <?php } ?> 209 210 </section> 211</body> 212</html>
試したこと
aタグにformを作ってみたり
もう全然わからなくていろいろやってみましたが無理でした。
補足情報(FW/ツールのバージョンなど)
郵便番号データはCSVのものをphpmyadminに移して使ってます
ここにより詳細な情報を記載してください。