制作しているシステム
郵便番号や、地名検索から
データベースに管理している
地名を検査して表示させるというシステム。
前提・実現したいこと
GETで受け取ったデータの件数を、
10件ずつ表示させるページング機能を実装させたいです。
行き詰っていること
〇現在ページをどのように定義したら良いかわかわからない
〇if文の条件分岐の書き方がわかりらない
➡・データ件数が10件を超えたときに、「次へ」を表示
➡・2ページ目以降
・「前へ」を表示
・10件を超えたとき、「次へ」を表示
・総ページ数になったら「前へ」だけ表示
〇URL指定の仕方に自信がない
試したこと
データ件数、総ページ数、「前へ」のURL、「次へ」のURLを変数で定義しました。
該当のソースコード
PHP
1<?php 2function h($str){ 3 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 4} 5 6 7 8$post_number = ''; 9$post_number_1 = ''; 10$address = ''; 11$message = NULL; 12$error = NULL; 13$insertOk = true; 14$address_data = array(); 15$query = NULL; 16$pref = ''; 17 18 19//郵便番号から検索されたとき 20if (isset($_GET['search_1']) === TRUE) { 21 $insertOk = true; 22 //入力値を変数に代入 23 $post_number = $_GET['zipcode']; 24 $post_number_1 = str_replace(array(" ", " "), "", $post_number); 25 //空の場合のエラー 26 //形式チェック 27 if (mb_strlen($post_number_1) === 0) { 28 $message = '郵便番号を入力してください。'; 29 $insertOk = false; 30 } else if (preg_match('/^[0-9]{7}$/', $post_number_1) !== 1) { 31 $message = '郵便番号は7桁の半角数字を入力してください。'; 32 $insertOk = false; 33 } 34 35 36 if ($insertOk === true) { 37 //DBと接続 38 $host = // データベースのホスト名又はIPアドレス 39 $username = // MySQLのユーザ名 40 $passwd = // MySQLのパスワード 41 $dbname = // データベース名 42 $link = mysqli_connect($host, $username, $passwd, $dbname); 43 if ($link) { 44 mysqli_set_charset($link, 'utf8'); 45 46 if (isset($_GET['search_1']) === TRUE) { 47 $query = "SELECT * FROM address_table WHERE post_number = '$post_number_1'" ; 48 } 49 $result = mysqli_query($link, $query); 50 while ($row = mysqli_fetch_array($result)) { 51 $address_data[] = $row; 52 } 53 54 mysqli_free_result($result); 55 mysqli_close($link); 56 } else { 57 print 'DB接続失敗'; 58 } 59 60 } 61} 62//地名から検索されたとき 63if (isset($_GET["search_2"]) === TRUE) { 64 $pref = $_GET["pref"]; 65 $address = $_GET["address"]; 66 $insertOk = true; 67 if ($pref == NULL) { 68 $error = '都道府県を選択してください'; 69 $insertOk = false; 70 } else if ($pref !== NULL && mb_strlen($address) === 0) { 71 $error = '市区町村を入力してください。'; 72 $insertOk = false; 73 } 74 75 if ($insertOk === true) { 76 //DBと接続 77 $host = 'localhost'; // データベースのホスト名又はIPアドレス 78 $username = 'codecamp21605'; // MySQLのユーザ名 79 $passwd = 'MQSOCCZP'; // MySQLのパスワード 80 $dbname = 'codecamp21605'; // データベース名 81 $link = mysqli_connect($host, $username, $passwd, $dbname); 82 if ($link) { 83 mysqli_set_charset($link, 'utf8'); 84 85 if (isset($_GET['search_2']) === TRUE) { 86 $query = "SELECT * FROM address_table WHERE city_kanji LIKE '%$address%'" ; 87 } 88 $result = mysqli_query($link, $query); 89 while ($row = mysqli_fetch_array($result)) { 90 $address_data[] = $row; 91 } 92 93 mysqli_free_result($result); 94 mysqli_close($link); 95 } else { 96 print 'DB接続失敗'; 97 } 98 99 } 100} 101//検索結果が10件以上の時ページネーション 102 103//件数 104$address_data_count = count($address_data); 105//総ページ数 106$pagination = ceil($address_data_count / 10); 107//表示件数 108$view = 10; 109//現在ページ 110$page = 1; 111 112 113 114$url_back = '?pref=' . $pref . '&address=' . $address . '&search_method=' . 'address&search_2=' . ($page - 1); 115$url_next = '?pref=' . $pref . '&address=' . $address . '&search_method=' . 'address&search_2=' . ($page + 1); 116 117?> 118 119<!DOCTYPE html> 120<html lang="ja"> 121<head> 122 <meta charset="utf-8"> 123 <title>郵便番号検索</title> 124 <style type> 125 .search_reslut { 126 border-top: solid 1px; 127 margin-top: 10px; 128 } 129 130 table { 131 border-collapse: collapse; 132 } 133 table, tr, th, td { 134 border: solid 1px; 135 } 136 caption { 137 text-align: left; 138 } 139 140 </style> 141</head> 142<body> 143 <h1>郵便番号検索</h1> 144 <section> 145 <h2>郵便番号から検索</h2> 146 <form method="get"> 147 <input type="text" name="zipcode" placeholder="例)1010001" value=""> 148 <input type="hidden" name="search_method" value="zipcode"> 149 <input type="submit" name="search_1" value="検索"> 150 </form> 151 <h2>地名から検索</h2> 152 <form method="get"> 153 都道府県を選択 154 <select name="pref"> 155 <option value="" selected>都道府県を選択</option> 156 <option value="北海道" >北海道</option> 157 <option value="青森県" >青森県</option> 158 <option value="岩手県" >岩手県</option> 159 <option value="宮城県" >宮城県</option> 160 <option value="秋田県" >秋田県</option> 161 <option value="山形県" >山形県</option> 162 <option value="福島県" >福島県</option> 163 <option value="茨城県" >茨城県</option> 164 <option value="栃木県" >栃木県</option> 165 <option value="群馬県" >群馬県</option> 166 <option value="埼玉県" >埼玉県</option> 167 <option value="千葉県" >千葉県</option> 168 <option value="東京都" >東京都</option> 169 <option value="神奈川県" >神奈川県</option> 170 <option value="新潟県" >新潟県</option> 171 <option value="富山県" >富山県</option> 172 <option value="石川県" >石川県</option> 173 <option value="福井県" >福井県</option> 174 <option value="山梨県" >山梨県</option> 175 <option value="長野県" >長野県</option> 176 <option value="岐阜県" >岐阜県</option> 177 <option value="静岡県" >静岡県</option> 178 <option value="愛知県" >愛知県</option> 179 <option value="三重県" >三重県</option> 180 <option value="滋賀県" >滋賀県</option> 181 <option value="京都府" >京都府</option> 182 <option value="大阪府" >大阪府</option> 183 <option value="兵庫県" >兵庫県</option> 184 <option value="奈良県" >奈良県</option> 185 <option value="和歌山県" >和歌山県</option> 186 <option value="鳥取県" >鳥取県</option> 187 <option value="島根県" >島根県</option> 188 <option value="岡山県" >岡山県</option> 189 <option value="広島県" >広島県</option> 190 <option value="山口県" >山口県</option> 191 <option value="徳島県" >徳島県</option> 192 <option value="香川県" >香川県</option> 193 <option value="愛媛県" >愛媛県</option> 194 <option value="高知県" >高知県</option> 195 <option value="福岡県" >福岡県</option> 196 <option value="佐賀県" >佐賀県</option> 197 <option value="長崎県" >長崎県</option> 198 <option value="熊本県" >熊本県</option> 199 <option value="大分県" >大分県</option> 200 <option value="宮崎県" >宮崎県</option> 201 <option value="鹿児島県" >鹿児島県</option> 202 <option value="沖縄県" >沖縄県</option> 203 </select> 204 市区町村 205 <input type="text" name="address" value=""> 206 <input type="hidden" name="search_method" value="address"> 207 <input type="submit" name="search_2" value="検索"> 208 </form> 209 </section> 210 <section class="search_reslut"> 211 212 </section> 213<?php if (count($address_data) > 0) { ?> 214 <?php print '検索件数' . $address_data_count . '件' . '<br>' . '<br>' . '郵便番号検索結果'; ?> 215 216 <table> 217 218 <tr> 219 <th>郵便番号</th> 220 <th>都道府県</th> 221 <th>市区町村</th> 222 <th>町域</th> 223 </tr> 224 225 <?php 226 foreach ($address_data as $value) { 227 ?> 228 <tr> 229 <td><?php print h($value['post_number']); ?></td> 230 <td><?php print h($value['pref_kanji']); ?></td> 231 <td><?php print h($value['city_kanji']); ?></td> 232 <td><?php print h($value['town_kanji']); ?></td> 233 </tr> 234 <?php 235 } 236 ?> 237 238 </table> 239<?php } else { ?> 240 <p>ここに検索結果が表示されます</p> 241 <?php } ?> 242 243 <?php if ($post_number !== NULL) { ?> 244 <?php print $message . "<br>"; ?> 245 <?php } ?> 246 247 <?php if ($address !== NULL) { ?> 248 <?php print $error . "<br>"; ?> 249 <?php } ?> 250 251 <!--検索結果が10件以上の時、遷移できるurlを表示--> 252 <?php if ($address_data_count > 10) : ?> 253 <a href= '<?php print $url_back; ?>'> 前のページへ</a> 254 <?php endif; ?> 255 256 <?php if ($address_data_count > 10) : ?> 257 <a href='<?php print $url_next; ?>'>次のページへ</a> 258 <?php endif; ?> 259 260 261</body> 262</html>
最後に
ページング機能を実装できれば
一通り完成となるので、
分かる方がいらっしゃいましたら、
お力をお貸しください。
回答2件
あなたの回答
tips
プレビュー