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

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

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

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

24755閲覧

PHP HTML データベース phpMyAdmin LIMIT 10件ずつ表示 次の10件が表示されない

konbu75

総合スコア0

phpMyAdmin

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/05/06 12:42

前提・実現したいこと

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に移して使ってます

ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2020/05/06 20:15

何を参考に作られましたか? SQLインジェクションも可能ですしXSS対策も正しくされていないコードで、とてもまずい実装になっています。 本件が解決したとして使える技術にはならないと思います
m.ts10806

2020/05/06 20:16

あとなぜか勘違いする人が多いですがphpMyAdminはMySQLまたはMariaDBを操作するツールのひとつであってDBそのものではありません。
konbu75

2020/05/07 00:52

こんにちは。こちらはわたしが通っているプログラミングスクールで勉強している一部です。 SQLインジェクション XSS対策 というのはまったく聞いたことがなく無知ですみません。 ひとまずプログラミングスクールの先生に聞いてみます。 ありがとうございます。
m.ts10806

2020/05/07 00:56

お金かかってるかもしれないですが、見た感じだとそのかかってるお金を回収できる技術力は身に付かないと思います。
konbu75

2020/05/07 06:42

そうですか。。
guest

回答1

0

初心者ということでしたら変な癖が付く前にはやめにpdoなど
汎用的な処理が可能な仕組みでのdbアクセス方法へ移行したほうがよいでしょう
またユーザーからの送られてくるデータは汚染されているので必ずprepareで処理してください

投稿2020/05/07 00:13

yambejp

総合スコア116724

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

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

konbu75

2020/05/07 00:55

回答ありがとうございます。 pdo調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問