制作しているシステム
PHPで郵便番号と地名を検索し
データベースに管理している
地名を検査して表示させるというシステム。
発生している問題・エラーメッセージ
aタグの次のページをクリックしても、OFFSETの開始位置が0のままです。 エラーメッセージはありません。 $query .= "LIMIT 10 OFFSET $page_offset";の書き方が間違えているのか、 それともhrefの中身の書き方が間違っているのか、もしくはそれ以外に何か不具合があるのか わかりません。。
該当のソースコード
<?php $message = ''; $zipcode_data = array(); $error = array(); $page_limit = 1; $page_num = 1; $page_offset = 0; $host = 'localhost'; $username = 'codecamp26450'; $passwd = '*********'; $dbname = 'codecamp26450'; $link = mysqli_connect($host, $username, $passwd, $dbname); if($link){ if(isset($_GET['post_code'])===TRUE || isset($_GET['pref'])===TRUE){ mysqli_set_charset($link, 'utf8'); $sql_count = ''; if(isset($_GET['post_code']) === TRUE && isset($_GET['post_num']) === TRUE){ $post_code = trim($_GET['post_code']); $query = "SELECT * FROM zipcode_table WHERE postal_code = '$post_code'"; $sql_count = "SELECT count(postal_code) FROM zipcode_table WHERE postal_code = '$post_code'"; if(mb_strlen($post_code) === 0){ $error[] = '郵便番号を入力してください。'; }else if(preg_match('/\d{7}/', $post_code) !== 1){ $error[] = '郵便番号は7桁の半角数字を入力してください'; } } if(isset($_GET['pref']) === TRUE && isset($_GET['address']) === TRUE && isset($_GET['city_name']) === TRUE) { $pref = $_GET['pref']; $address = trim($_GET['address']); $page_offset = ($page_num - 1)*10; //*10-10 $query = "SELECT * FROM zipcode_table WHERE prefectures = '$pref' AND city LIKE '%$address%'"; $query .= "LIMIT 10 OFFSET $page_offset"; print $query; $sql_count = "SELECT count(postal_code) FROM zipcode_table WHERE prefectures = '$pref' AND city LIKE '%$address%'"; if($pref === "all"){ $error[] = '都道府県を選択してください。'; } if(mb_strlen($address) === 0){ $error[] = '市区町村を入力してください。'; } } if(count($error)===0){ $result_count = mysqli_query($link, $sql_count); $count_row = mysqli_fetch_row($result_count); $page_limit = ceil($count_row[0]/10); $result = mysqli_query($link,$query); while ($row = mysqli_fetch_array($result)) { $zipcode_data[] = $row; } mysqli_free_result($result); mysqli_close($link); } } } ?> <!DOCTYPE HTML> <html lang="ja"><head> <meta charset="utf-8"> <title>郵便番号検索</title> <style> .search_reslut { border-top: solid 1px; margin-top: 10px; } table { border-collapse: collapse; } table, tr, th, td { border: solid 1px; } caption { text-align: left; } </style> </head> <body> <h1>郵便番号検索</h1> <section> <h2>郵便番号から検索</h2> <form method = "get"> <input type="text" name="post_code" placeholder="例)1010001" value="<?php if(isset($post_code) === TRUE){ print $post_code;}?>"> <!--<input type="hidden" name="search_method" value="post_code">--> <input type="submit" name="post_num" value="検索"> </form> <h2>地名から検索</h2> <form method = "get"> 都道府県を選択 <select name="pref"> <option value="all" selected="all"<?php if(isset($_GET['pref']) && $_GET['pref'] === "all"){print "selected";}?>>都道府県を選択</optio> <option value="北海道"<?php if(isset($_GET['pref']) && $_GET['pref'] === "北海道"){print "selected";}?>>北海道</optio> <option value="青森県">青森県</option> <option value="岩手県">岩手県</option> <option value="宮城県">宮城県</option> <option value="秋田県">秋田県</option> <option value="山形県">山形県</option> <option value="福島県">福島県</option> <option value="茨城県">茨城県</option> <option value="栃木県">栃木県</option> <option value="群馬県">群馬県</option> <option value="埼玉県">埼玉県</option> <option value="千葉県">千葉県</option> <option value="東京都">東京都</option> <option value="神奈川県">神奈川県</option> <option value="新潟県"<?php if(isset($_GET['pref']) && $_GET['pref'] === "新潟県"){print "selected";}?>>新潟県</option> <option value="富山県">富山県</option> <option value="石川県">石川県</option> <option value="福井県">福井県</option> <option value="山梨県">山梨県</option> <option value="長野県">長野県</option> <option value="岐阜県">岐阜県</option> <option value="静岡県">静岡県</option> <option value="愛知県">愛知県</option> <option value="三重県">三重県</option> <option value="滋賀県">滋賀県</option> <option value="京都府">京都府</option> <option value="大阪府">大阪府</option> <option value="兵庫県"<?php if(isset($_GET['pref']) && $_GET['pref'] === "兵庫県"){print "selected";}?>>兵庫県</option> <option value="奈良県">奈良県</option> <option value="和歌山県">和歌山県</option> <option value="鳥取県">鳥取県</option> <option value="島根県">島根県</option> <option value="岡山県">岡山県</option> <option value="広島県">広島県</option> <option value="山口県">山口県</option> <option value="徳島県">徳島県</option> <option value="香川県">香川県</option> <option value="愛媛県">愛媛県</option> <option value="高知県">高知県</option> <option value="福岡県">福岡県</option> <option value="佐賀県">佐賀県</option> <option value="長崎県">長崎県</option> <option value="熊本県">熊本県</option> <option value="大分県">大分県</option> <option value="宮崎県">宮崎県</option> <option value="鹿児島県">鹿児島県</option> <option value="沖縄県">沖縄県</option> </select> 市区町村 <input type="text" name="address" value="<?php if(isset($address) === TRUE){ print $address;}?>"> <!--<input type="hidden" name="search_method" value="address">--> <input type="submit" name = "city_name" value="検索"> </form> </section> <section class="search_reslut"> <?php if(isset($count_row)===FALSE){?> <p><?php print 'ここに検索結果が表示されます'; ?></p> <?php }else{ ?> <p><?php print '検索件数'.$count_row[0].'件';?></p> <?php }?> <?php foreach ($error as $value){?> <p><?php print $value; ?></p> <?php }?> <?php if(count($zipcode_data) !== 0){?> <table> <caption>郵便番号検索結果</caption> <tbody> <tr> <th>郵便番号</th> <th>都道府県</th> <th>市区町村</th> <th>町域</th> </tr> <?php foreach ($zipcode_data as $value) { ?> <tr> <td><?php print htmlspecialchars($value['postal_code'], ENT_QUOTES, 'UTF-8'); ?></td> <td><?php print htmlspecialchars($value['prefectures'], ENT_QUOTES, 'UTF-8'); ?></td> <td><?php print htmlspecialchars($value['city'], ENT_QUOTES, 'UTF-8'); ?></td> <td><?php print htmlspecialchars($value['town_area'], ENT_QUOTES, 'UTF-8'); ?></td> </tr> <?php } ?> </tbody> </table> <?php } ?> </section> <?php if($page_num !== 1){ ?> <a href = '17_6.kadai.php?pref=<?php print $pref; ?>&address=<?php print $address; ?>&city_name=検索&page=<?php print $page_num - 1; ?>'>前のページ</a> <?php }?> <?php if($page_num !== $page_limit ){ ?> <a href = '17_6.kadai.php?pref=<?php print $pref; ?>&address=<?php print $address; ?>&city_name=検索&page=<?php print $page_num + 1; ?>'>次のページ</a> <?php }?> </body> </html>
試したこと
$page_num + 1の部分の数字を3や5に変えて
検証ツールにてURLを確認したら&page=の数字は変わりました。
問題の発生した環境
PHP
回答1件
あなたの回答
tips
プレビュー