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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

13290閲覧

ajaxでphpに値を渡す

shinoda

総合スコア75

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2015/11/26 09:45

編集2015/11/26 12:40

お世話になります。

現在、郵便番号から住所を検索するというよくある機能を実装しているのですが、うまくいかなくて困っています。

郵政省からダウンロードしたCSVを必要な情報にコンバートし、php側で検索する部分まではできたのですが、javascript&htmlのフォームで入力された郵便番号をphpにajaxで渡し、コールバックされた値をフォームに自動入力されるという部分ができなくて困っています。

コンバートされたcsvから、検索するphpのコードを以下に示します

$zipcodeにajaxで渡ってきた郵便番号を入れたいということです。

どうぞ宜しくお願い致します。

test.php

1 2<?php 3//郵便番号 4$zipcode = '123-4567'; 5 6$dir = __DIR__ . '/zipcode'; 7 8$zipcode = mb_convert_kana($zipcode, 'a', 'utf-8'); 9$zipcode = str_replace(array('-','ー'),'', $zipcode); 10 11$result = array(); 12 13$file = $dir . DIRECTORY_SEPARATOR . substr($zipcode, 0, 1) . '.csv'; 14if(file_exists($file)){ 15 $spl = new SplFileObject($file); 16 while (!$spl->eof()) { 17 $columns = $spl->fgetcsv(); 18 if(isset($columns[0]) && $columns[0] == $zipcode){ 19 $result = array($columns[1], $columns[2], $columns[3]); 20 break; 21 } 22 } 23} 24 25if(!empty($result)){ 26 echo $result[0] . $result[1] . $result[2]; 27} else { 28 echo 'Not Found'; 29}

追記致します

少し進んだのでコードを書きます

ajaxで$zipcodeがうまく渡らなくでアラートにNot Foundがでてしまいます。

test.html

1<!DOCTYPE html> 2<html> 3<head> 4<title>郵便番号で住所入力補助</title> 5<meta charset="utf-8"> 6<script src="../js/jquery-1.11.3.min.js"></script> 7<script type="text/javascript"> 8$(function(){ 9 $('#search').click( 10 function(){ 11 $.ajax({ 12 type: 'post', 13 url: "https://test.php", 14 data: {data: $("zipcode").val()}, 15 success: function(data){ 16 alert(data); 17 } 18 }); 19 } 20 ); 21}); 22</script> 23</head> 24<body> 25<form> 26 <p>郵便番号:<input type="text" name="zipcode" id="zip" size="8"> 27 <input type="button" id="search" value="郵便番号で検索"></p> 28 <p>住所:<input size="50" type="text" name="address" id="address"></p> 29</form> 30</body> 31</html> 32

test.php

1<?php 2//郵便番号 3$zipcode = $_POST['zipcode']; 4 5$dir = __DIR__ . '/zipcode'; 6 7$zipcode = mb_convert_kana($zipcode, 'a', 'utf-8'); 8$zipcode = str_replace(array('-','ー'),'', $zipcode); 9 10$result = array(); 11 12$file = $dir . DIRECTORY_SEPARATOR . substr($zipcode, 0, 1) . '.csv'; 13if(file_exists($file)){ 14 $spl = new SplFileObject($file); 15 while (!$spl->eof()) { 16 $columns = $spl->fgetcsv(); 17 if(isset($columns[0]) && $columns[0] == $zipcode){ 18 $result = array($columns[1], $columns[2], $columns[3]); 19 break; 20 } 21 } 22} 23 24if(!empty($result)){ 25 echo $result[0] . $result[1] . $result[2]; 26} else { 27 echo 'Not Found'; 28}

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

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

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

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

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

guest

回答3

0

ベストアンサー

JavaScript

1 $.ajax({ 2 type: 'post', 3 url: "https://test.php", 4 data: {data: $("zipcode").val()}, 5 success: function(data){ 6 alert(data); 7 } 8 });

ここではdataというキーに$("zipcode").val()という文字列を入れて送信していますね。

PHP

1<?php 2//郵便番号 3$zipcode = $_POST['zipcode'];

なぜかpostのzipcodeキーを必死に見張っています。
こうすれば値は取れるようになると思います。

JavaScript

1 $.ajax({ 2 type: 'post', 3 url: "https://test.php", 4 data: {zipcode: $("zipcode").val()}, 5 success: function(data){ 6 alert(data); 7 } 8 });

POSTですがポストって言うと、道端にある例の赤い封筒や手紙を入れる箱のイメージありますよね?
英語ではそこから転じて、「記事を投稿する」とか「情報を新たに書き込む」という動詞として使われます。
なので、情報を取得する今回の例ではGetを使いましょう

JavaScript

1 $.ajax({ 2 type: 'get', 3 url: "https://test.php", 4 data: {zipcode: $("zipcode").val()}, 5 success: function(data){ 6 alert(data); 7 } 8 });

php

1<?php 2//郵便番号 3$zipcode = $_GET['zipcode'];

投稿2015/11/26 14:13

miyabi-sun

総合スコア21158

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

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

shinoda

2015/11/27 02:20

お世話になっております。 ご丁寧に解説もして頂いたご回答ありがとうございます。 重ねてご質問をして恐縮なのですが、返ってきたdataを住所欄(address)に入れるには以下のように書けばよろしいでしょうか? ``` success: function(data){ $('#address').data; } ```
shinoda

2015/11/27 02:35

追記致します。 ご提示されたコードで試しましたがやはりうまく渡りませんでした。
miyabi-sun

2015/11/27 03:22

ちゃんと見直すと所々オカシイですね。 $("セレクタ") ←これのセレクタの意味を勉強する必要がありそうです。 jQueryで処理を記述していくには必須なので正しく書けるようになってください。 ◆最初のZIPコードを取得している箇所 $("zipcode").val() 郵便番号を登録するinput要素はidがzipなので、 $("#zip").val() が正解です。 ◆取得してきた値を反映する $("#address").data; 前半部分はその通り!確かにinput要素をドンピシャで掴んでます。 でも、そいつにはdataなんてプロパティは存在しないので何も起こりません。 送信と同じくvalメソッドを実行した時に文字列を引数として渡してやることで実現できます。 $(#address").val(data); こうすればどうでしょう?
shinoda

2015/11/30 03:08

お世話になっております。 ご提示いただいたコードでうまくいきましたが、新たにphp側の$zipcode = mb_convert_kana($zipcode, 'a', 'utf-8'); の部分で文字化けが起きる現象が起きてしまいました。 もしご存知でしたらご教授いただけると幸いです。
guest

0

ajaxのdata指定とzipcodeの入力値の取り方を以下に変えていただくと
PHPでPOSTデータが取得できると思います。

javascript

1 $.ajax({ 2 type: 'post', 3 url: "https://test.php", 4 data: {zipcode: $("#zip").val()}, 5 success: function(data){ 6 alert(data); 7 } 8 });

投稿2015/11/26 14:10

Kaoru_A

総合スコア124

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

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

0

W3 Schools の例を参照してみると

  • JavaScript でGET メソッドを利用してq をキーに値を渡す

javascript

1var xmlhttp = new XMLHttpRequest(); 2xmlhttp.open("GET", "gethint.php?q=" + str, true);
  • JavaScript から渡されたキー値を取り出して利用する

php

1$q = $_REQUEST["q"];

としているので、これを適用できないでしょうか

簡単に調べてみましたが、何か参考になれば幸いです

Link

投稿2015/11/26 12:55

編集2015/11/26 12:57
gouf

総合スコア2321

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

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

shinoda

2015/11/27 02:22

お世話になっております。 参考サイトのご提供ありがとうございます。 知識が薄いものでこういった参考サイトをご提示していただくと本当にありがたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問