質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

Q&A

解決済

1回答

472閲覧

OFFSETの開始位置が変わらずに困っています

nouzoe_hiroaki

総合スコア17

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

0グッド

0クリップ

投稿2019/07/10 15:33

編集2019/07/11 13:22

制作しているシステム

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/11 00:57 編集

>ページネーションについての質問です。 これだとタグにあるものをそのまま書いてるだけです。 「起きている問題」にフォーカスした(なるべく今後質問していく際に被ることがない)要件をタイトルにしてください (質問は編集できます) > 最後に これは特に不要と思います。 質問テンプレートでは環境情報(言語のバージョンや利用しているツールなど)を記載する項目になっていたかと思います。 なので、あくまで質問に関連する情報の提示に終始してください
guest

回答1

0

ベストアンサー

&page= でページを指定しているのに、$_GET['page'] をどこにも使っていないからでは。

投稿2019/07/10 17:53

kei344

総合スコア69400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nouzoe_hiroaki

2019/07/11 05:43

ありがとうございます!大きなヒントになりました。また機会ありましたらよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問