![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
テキストボックスに郵便番号を入れ、検索ボタンを押すと、テキストボックス内に住所が入ってくるようにプログラムを作っています。
例えば郵便番号「640941」で検索すると、Stateには「北海道」、Cityには「札幌市」、Addressには、「中央区旭ケ丘」が入ってくるようにしたいのですが、Stateに「北海道札幌市中央区旭ヶ丘」と入ってきてしまいます。
以下に実際のソースを載せます。どのように修正すればよいでしょうか?
参考url:http://webcake.no003.info/webdesign/jquery-ajax- …
ファイル名「postal.html」
<!DOCTYPE html>
<html>
<head>
<title>新規登録</title>
<script src="http://code.jquery.com/jquery-1.6.2.min.js"></sc …
<script type="text/javascript">
$(document).ready(function(){
/**
* 送信ボタンクリック
*/
$('#send').click(function(){
//POSTメソッドで送るデータを定義します var data = {パラメータ名 : 値};
var data = {Zip : $('#Zip').val()};
/**
* Ajax通信メソッド
* @param type : HTTP通信の種類
* @param url : リクエスト送信先のURL
* @param data : サーバに送信する値
*/
$.ajax({
type: "POST",
url: "postal.php",
data: data,
/**
* Ajax通信が成功した場合に呼び出されるメソッド
*/
success: function(data, dataType)
{
//successのブロック内は、Ajax通信が成功した場合に呼び出される
//PHPから返ってきたデータの表示
$("#State").val(data);
},
/**
* Ajax通信が失敗した場合に呼び出されるメソッド
*/
error: function(XMLHttpRequest, textStatus, errorThrown){
//エラーメッセージの表示
alert('Error : ' + errorThrown);
}
});
//サブミット後、ページをリロードしないようにする
return false;
});
});
</script>
</head>
<body>
<h1>ZIPCODE</h1>
<form method="post" >
<table>
<tr>
<th>Zip</th>
<td><input type="text" name="Zip" id="Zip" size="8"/>
<input type="button" id="send" name="send" value="send" ></td>
</tr>
<tr><th>State</th><td><input type="text" id="State" name="State" size="10"/></td></tr>
<tr><th>City</th><td><input type="text" id="City" name="City" size="10"/></td></tr>
<tr><th>Address</th><td><input type="text" id="Address" name="City" size="10"/></td></tr>
</table>
</form>
</body>
</html>
ファイル名「postal」
<?php
$Zip=$_POST['Zip'];
$State="";
$City="";
$Address="";
get_state($Zip);
/* 郵便番号(zipcode)を入れると住所を表示する関数 */
function get_state($Zip)
{
//接続文字列
$dsn='mysql:dbname=stuff;host=localhost';
$user='user';
$password='password';
$dbh= new PDO($dsn,$user,$password);
$dbh->query('SET NAMES UTF-8');
$sql='SELECT * FROM zip WHERE Zip_Code='.$Zip;
$stmt=$dbh->prepare($sql);
$stmt->execute();
while(1)
{
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false)
{
break;
}
echo $rec['State'];
echo $rec['City'];
echo $rec['Address'];
}
}
$dbh=null;
?>
SQL文は以下の通りです。
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE IF NOT EXISTS `zip` (
`Jis_Code` int(5) NOT NULL,
`Old_Zip_Code` int(5) NOT NULL,
`Zip_Code` int(7) NOT NULL,
`State_Kana` varchar(60) NOT NULL,
`City_Kana` varchar(100) NOT NULL,
`Address_Kana` varchar(200) NOT NULL,
`State` varchar(60) NOT NULL,
`City` varchar(100) NOT NULL,
`Address` varchar(200) NOT NULL,
`AUX1` tinyint(1) NOT NULL,
`AUX2` tinyint(1) NOT NULL,
`AUX3` tinyint(1) NOT NULL,
`AUX4` tinyint(1) NOT NULL,
`AUX5` tinyint(1) NOT NULL,
`AUX6` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='郵便番号リスト';
INSERT INTO `zip` (`Jis_Code`, `Old_Zip_Code`, `Zip_Code`, `State_Kana`, `City_Kana`, `Address_Kana`, `State`, `City`, `Address`, `AUX1`, `AUX2`, `AUX3`, `AUX4`, `AUX5`, `AUX6`) VALUES
(1101, 60, 600000, 'ホッカイドウ', 'サッポロシチュウオウク', 'イカニケイサイガナイバアイ', '北海道', '札幌市中央区', '以下に掲載がない場合', 0, 0, 0, 0, 0, 0),
(1101, 64, 640941, 'ホッカイドウ', 'サッポロシチュウオウク', 'アサヒガオカ', '北海道', '札幌市中央区', '旭ケ丘', 0, 0, 1, 0, 0, 0),
(1101, 60, 600041, 'ホッカイドウ', 'サッポロシチュウオウク', 'オオドオリヒガシ', '北海道', '札幌市中央区', '大通東', 0, 0, 1, 0, 0, 0);
![「PHPで郵便番号を検索し、住所を表示した」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/f/228353912_5497d082af5e3/M.jpg)
No.1ベストアンサー
- 回答日時:
ざくっと見てサッと回答していますが、
postal.phpの
> echo $rec['State'];
> echo $rec['City'];
> echo $rec['Address'];
ここを、
> echo json_encode($rec);
に変更して、
postal.htmlの
> $("#State").val(data);
ここを、
> $("#State").val(data.State);
> $("#City").val(data.City);
> $("#Address").val(data.Address);
にしたらどうでしょう?
お礼が遅くなってしまい申し訳ございません。
jsonコードを扱うのは初めてでしたので、理解するのに時間がかかっておりました。
ご回答をヒントに考えたところやっと解決いたしました。
「postal.php」で結果を配列に渡しjsonコードに変換する過程のコードを、
$row=array();
$row[]=$stmt->fetch(PDO::FETCH_ASSOC);
header("Content-Type:application/json");
echo json_encode($row);
「postal.html」で、
$("#State").val(data[0].State);
$("#City").val(data[0].City);
$("#Address").val(data[0].Address);
と修正してみたところ解決しました。
**********解決したソースを掲載します。***************
「postal.php」
<?php
$Zip=$_POST['Zip'];
$State="";
$City="";
$Address="";
get_state($Zip);
/* 郵便番号(zipcode)を入れると住所を表示する関数 */
function get_state($Zip)
{
//接続文字列
$dsn='mysql:dbname=zip;host=localhost';
$user='user';
$password='password';
$dbh= new PDO($dsn,$user,$password);
$dbh->query('SET NAMES UTF-8');
$sql='SELECT * FROM zip WHERE Zip_Code='.$Zip;
$stmt=$dbh->prepare($sql);
$stmt->execute();
$row=array();
$row[]=$stmt->fetch(PDO::FETCH_ASSOC);
header("Content-Type:application/json");
echo json_encode($row);
}
$dbh=null;
?>
「postal.html」
<!DOCTYPE html>
<html>
<head>
<title>新規登録</title>
<script src="http://code.jquery.com/jquery-1.6.2.min.js">
</script>
<script type="text/javascript">
$(document).ready(function(){
//送信ボタンクリック
$('#send').click(function(){
//POSTメソッドで送るデータを定義します var data = {パラメータ名 : 値};
var data = {Zip : $('#Zip').val()};
$.ajax({
type: "POST",
url: "postal.php",
dataType:"json",
data: data,
success: function(data, dataType)
{
//PHPから返ってきたデータの表示
$("#State").val(data[0].State);
$("#City").val(data[0].City);
$("#Address").val(data[0].Address);
},
//Ajax通信が失敗した場合に呼び出されるメソッド
error: function(XMLHttpRequest, textStatus, errorThrown){
//エラーメッセージの表示
alert('Error : ' + errorThrown);
}
});
//サブミット後、ページをリロードしないようにする
return false;
});
});
</script>
</head>
<body>
<h1>ZIPCODE</h1>
<form method="post" >
<table>
<tr>
<th>Zip</th>
<td><input type="text" name="Zip" id="Zip" size="8"/>
<input type="button" id="send" name="send" value="send" ></td>
</tr>
<tr><th>State</th><td><input type="text" id="State" name="State" size="10"/></td></tr>
<tr><th>City</th><td><input type="text" id="City" name="City" size="10"/></td></tr>
<tr><th>Address</th><td><input type="text" id="Address" name="City" size="10"/></td></tr>
</table>
</form>
</body>
</html>
ありがとうございました(#^^#)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
<input type="hidden" >で配列...
-
PHPでじゃんけん勝負
-
$_SESSIONについて教えて下さい。
-
検索時の選択内容を保持する方法
-
PHP ボタンが押されたら処理を...
-
PHP
-
phpでの複数選択チェックボック...
-
「カートに入れる」ボタンを画...
-
チェックボックスの必須項目指定
-
フォームの送信ボタンが押され...
-
PHPでCookieを使った訪問回数に...
-
PHP・MYSQLで複数のチェックボ...
-
POSTを使わずに値を渡す方法
-
Flaskでサーバー立ち上げに関して
-
フォーム送信後の更新ボタンで...
-
POSTの項目に追加
-
pythonのhttp.serverでpostされ...
-
phpで、フォームのラジオボタン...
-
引数の参照について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
PHP ボタンが押されたら処理を...
-
<input type="hidden" >で配列...
-
検索時の選択内容を保持する方法
-
フォームへの前回入力値をクリ...
-
フォームでのリセットを使う方法
-
PHPで画像の渡しが上手く行きま...
-
画面が更新されてもチェックボ...
-
フォームボタンを押すたびに数...
-
ラジオボタンをsessionで使いたい
-
テキストボックスに初期値を入れる
-
syntax error, unexpected '}' ...
-
【HTML(PHP?)】複数のフォーム...
-
チェックボックスの必須項目指定
-
HTMLのリンクをクリックするこ...
-
DBの値をチェックボックスに反...
-
複数チェックボックスの入力制...
-
チェックボックスのvalueに変数...
-
input nameで日本語を使うと
-
POSTデータのNAME属性をVALUEに...
おすすめ情報