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

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

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

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

データベース

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

1960閲覧

PHPで郵便番号検索サイトを作成しているが地名から検索機能がうまく実装できない。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

データベース

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/06/14 02:25

編集2021/06/14 02:47

PHPで郵便番号検索サイトを作成しています。
以下が要件です。
1.郵便番号及び住所の情報をデータベースで管理する。
2.郵便番号から住所が検索できる。
3.検索結果は一覧で「郵便番号、住所」の最低限2つを1行ずつ表示する。
4.郵便番号が未入力だった場合、エラーメッセージを表示する。
5.郵便番号は7桁の数値のみ検索可能とし、それ以外はエラーメッセージを表示する。
6.都道府県と市区町村から住所が検索できる。
7.都道府県、市区町村のどちらか又は両方が未入力だった場合、エラーメッセージを表示する※どちらか片方だけの検索禁止
8.郵便番号、都道府県、市区町村の入力の前後にある全角及び半角スペースを削除する。入力値チェックや検索はこの後に行う。 例)「 1100001 」→「1100001」
9.検索結果が10件を超えた場合、表示結果を複数ページに分ける。 ※「前へ」「次へ」のようなリンクによりページ切り替えができる

イメージ説明

発生している問題・エラーメッセージ

郵便番号で検索が可能になったのですが、地名から検索(都道府県、市区町村をキーに検索)を行ってもデータが出てきません。 どなたか、ご教授お願い致します。

該当のソースコード

PHP

1ソースコード 2<?php 3// 変数を設定 4$post_num = ''; 5$area =''; 6$city =''; 7$town =''; 8$error1 = []; 9$error2 = []; 10$user_data = []; 11$abc_data = []; 12$query = ''; 13$host = ''; 14$username = ''; 15$passwd = ''; 16$dbname = ''; 17$link= mysqli_connect($host, $username, $passwd, $dbname); 18$page = 1; 19$count = 0; 20$totalpage = ceil($count/ 10);//切り上げ 21/*変数が存在する確認*/ 22if(isset($_POST['post_num']) === true || isset($_POST['area']) === true) { 23 if(isset($_POST['post_num']) === true) { 24 $post_num = htmlspecialchars($_POST['post_num'], ENT_QUOTES, 'UTF-8'); 25 } 26 if(isset($_POST['area']) === true) { 27 $area = htmlspecialchars($_POST['area'], ENT_QUOTES, 'UTF-8'); 28 } 29 if(isset($_POST['city']) === true) { 30 $city = htmlspecialchars($_POST['city'], ENT_QUOTES, 'UTF-8'); 31 } 32 if(isset($_POST['town']) === true) { 33 $town = htmlspecialchars($_POST['town'], ENT_QUOTES, 'UTF-8'); 34 } 35 if(isset($_POST['page']) === true) { 36 $page = htmlspecialchars($_POST['page'], ENT_QUOTES, 'UTF-8'); 37 } 38/*空白削除*/ 39 $post_num = str_replace(array(" "," "),"", $post_num); 40 $area = str_replace(array(" "," "),"", $area); 41 $town = str_replace(array(" "," "),"", $town); 42/*エラーメッセージ*/ 43 if(empty($post_num) === true && 44 ($area === '都道府県を選択' || empty($city) === true)) { 45 $error1[] = '郵便番号を入力してください'; 46 }else if ((preg_match('/^[0-9]{7}$/', $post_num) !== 1) && 47 ($area === '都道府県を選択' || empty($city) === true)) { 48 $error1[] = '7桁の数字で入力してください'; 49 }else { 50 print ""; 51 } 52 if ($area === '都道府県を選択' && 53 (empty($post_num) === true ||(preg_match('/^[0-9]{7}$/', $post_num) !== 1))) { 54 $error2[] = '都道府県を選択してください'; 55 } 56 if(empty($city) === true && 57 (empty($post_num) === true ||(preg_match('/^[0-9]{7}$/', $post_num) !== 1))){ 58 $error2[] = '市区町村名をを入力してください'; 59 } 60/*データベースに接続*/ 61 if(count($error1) === 0 || count($error2) === 0) { 62 if($link) { 63 mysqli_set_charset($link, 'utf8'); 64 if($post_num !== 0) { 65 $query = "SELECT post_num, area , city, town FROM test_table 66 WHERE post_num = '$post_num'"; 67 } else { 68 $limit = 10*$page-10; 69 $query = "SELECT post_num, area , city, town FROM test_table"; 70 $abc = "SELECT post_num, area , city, town FROM test_table"; 71 $result = mysqli_query($link, $abc); 72 while($row = mysqli_fetch_array($result)) { 73 $abc_data[] = $row; 74 } 75 } 76 // var_dump($query); 77 $result = mysqli_query($link, $query); 78 while($row = mysqli_fetch_array($result)) { 79 $user_data[] = $row; 80 } 81 mysqli_free_result($result); 82 mysqli_close($link); 83 }else { 84 echo 'DB接続失敗'; 85 } 86 } 87} 88$count = count($abc_data); 89?> 90<!DOCTYPE html> 91<html lang="ja"> 92<head> 93 <meta charset="UTF-8"> 94 <title>郵便</title> 95</head> 96<body> 97 <form action="practice_post_code_advanced.php" method="post"> 98 <h1>郵便番号検索</h1> 99 <h2>郵便番号から検索</h2> 100 <?php print "総件数" . htmlspecialchars($count,ENT_QUOTES,'UTF-8') . "件";?> 101 <input id="post_numer" name="post_num" value=""> 102 <input type="submit" value="検索"> 103 <form action="practice_post_code_advanced.php" method="post"> 104 <h2>地名から検索</h2> 105 <label>都道府県を選択 106 <select name="area" value=""> 107 <option>都道府県を選択</option> 108 <option>北海道</option> 109 <option>兵庫県</option> 110 <option>新潟県</option> 111 </select> 112 </label> 113 <label>市区町村 114 <input type="seach" name="city" value=""> 115 <input type="submit" value="検索"> 116 </label> 117 </form> 118 <p><?php foreach($error1 as $key1 => $string1) { 119 print htmlspecialchars($string1,ENT_QUOTES,'UTF-8'); 120 } 121 ?></p> 122 <p><?php foreach($error2 as $key2 => $string2) { 123 print htmlspecialchars($string2,ENT_QUOTES,'UTF-8');; 124 } 125 ?></p> 126 <?php 127 foreach($user_data as $read) {?> 128 <table> 129 <style type="text/css"> 130 table, td, th { 131 border: solid black 1px; 132 } 133 table { 134 width: 600px; 135 } 136 tr td { 137 width: 150px; 138 } 139 </style> 140 <tr> 141 <th>郵便番号</th> 142 <th>都道府県</th> 143 <th>市町村</th> 144 <th>町域</th> 145 </tr> 146 <tr> 147 <td><?php print htmlspecialchars($read['post_num'],ENT_QUOTES,'UTF-8'); ?></td> 148 <td><?php print htmlspecialchars($read['area'],ENT_QUOTES,'UTF-8'); ?></td> 149 <td><?php print htmlspecialchars($read['city'],ENT_QUOTES,'UTF-8'); ?></td> 150 <td><?php print htmlspecialchars($read['town'],ENT_QUOTES,'UTF-8'); ?></td> 151 </tr> 152 </table> 153 <?php } ?> 154<p> 155 <!--GETを使用するときは?からスタートする--> 156 <?php if ($page > 1) : ?> 157 <a href="?page=<?php echo ($page - 1); ?>&area=<?php print $area; ?> 158 &city=<?php print $city; ?>">前のページへ</a> 159 <?php endif; ?> 160 <?php if ($page < $totalpage) : ?> 161   <a href="?page=<?php echo ($page + 1); ?>&area=<?php print $area; ?> 162   &city=<?php print $city; ?>">次のページへ</a> 163 <?php endif; ?> 164 </p> 165</body> 166</html>

試したこと

地名から検索のコードのvalueに値を指定したり、メソッドを独自にpostで設定したりすこしいじってみましたが、何も変わらずでした。
郵便番号は9570036で検索をかけたらヒットしましたが、
地名で新潟県を選択し、市区町村を上越市にして検索をかけても何もヒットしませんでした。
(データベースのテーブルには新潟県の郵便データを定義しております。)

補足情報(FW/ツールのバージョンなど)

Cloud9

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

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

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

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

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

y_waiwai

2021/06/14 02:31

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
退会済みユーザー

退会済みユーザー

2021/06/14 02:32

すみません。今直します
m.ts10806

2021/06/14 02:41

どういうデータに対してどういう入力を試されたのでしょうか テーブル定義も提示されたほうが良いです
退会済みユーザー

退会済みユーザー

2021/06/14 02:43

追記します。
m.ts10806

2021/06/14 02:53

そもそもpost_numしかSQLに書かれてないですね。
退会済みユーザー

退会済みユーザー

2021/06/14 02:59

post_numと同じようにarea、city、townもSQLに書けばよろしいのでしょうか。
m.ts10806

2021/06/14 03:57

それは作る人が決めた仕様に沿って としか言えません。 まずはPHP関係なくSQLだけで確かめるところからですね。 あとは自身が書いたコードを人に説明できるようになること。
退会済みユーザー

退会済みユーザー

2021/06/14 04:43

究極にわからないのでヒントだけでもお願いします
退会済みユーザー

退会済みユーザー

2021/06/14 04:53

自己解決しました。
m.ts10806

2021/06/14 04:57

ですから、ヒントを出したとして、ご自身が書かれたコードをあまり理解されないままだと何も意味がないんですよ。 自己解決の内容も整合性取れてません。 複合条件による検索がないなら別にいいですけど、それでも他者が読んで分かる内容にはなっていませんよ。
m.ts10806

2021/06/14 04:58

「究極にわからない」状態でヒントだけもらっても理解はできませんよ。 結局作業依頼と変わりません。
guest

回答1

0

ベストアンサー

ボタンに名前を付け、条件分岐で指定したら出るようになりました。

投稿2021/06/14 04:52

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2021/06/14 04:58 編集

一見うまく動いたように見えるだけで、検索の絞り込みができていないなど、おかしなところが生じたりしていませんか? 本当に解決しているなら別にいいのですが。解決したかどうかを第三者が判定できないために、ちょっと心配しました。
m.ts10806

2021/06/14 05:03

他者には全くわからない内容なのと、解決する方向性には進んでない(結局問題を先送りにしただけ)ように見えると判断し低評価しています。
m.ts10806

2021/06/14 05:04

「そもそも地名を検索条件として入れていなかった」件にも触れられていません。
退会済みユーザー

退会済みユーザー

2021/06/14 05:09

またここの奴らはそうやって意地悪するんだな くそだからもう一生このサイトでは解答依頼しないわ
m.ts10806

2021/06/14 05:14 編集

自身の自己解決の回答を第三者目線で見直されてから文句言っては。  ああ、逃げたか。 名前変えて再登録するくらいなら指摘受け入れてちゃんとすればいいのに。捨て台詞だけして放置って無責任にもほどがある。 効果なかったので低評価外し。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問