PHPで郵便番号を検索し住所を表示したい

このQ&Aのポイント
  • PHPを使用して郵便番号を検索し、住所を表示するプログラムを作成しています。テキストボックスに郵便番号を入力し、検索ボタンをクリックすると、入力された郵便番号に対応する住所がテキストボックスに表示されるようにしたいです。
  • 実際のソースコードでは、jQueryのAjaxを使用して郵便番号をサーバーに送信し、サーバーサイドで郵便番号に対応する住所を検索しています。検索結果はPHPからAjax通信で受け取り、住所のフィールドに表示されます。
  • しかし、現在のプログラムでは、Stateフィールドに「北海道札幌市中央区旭ヶ丘」という結果が表示されてしまいます。これを修正して、Stateフィールドには「北海道」、Cityフィールドには「札幌市」、Addressフィールドには「中央区旭ケ丘」という表示にしたいです。
回答を見る
  • ベストアンサー

PHPで郵便番号を検索し、住所を表示したい

テキストボックスに郵便番号を入れ、検索ボタンを押すと、テキストボックス内に住所が入ってくるようにプログラムを作っています。 例えば郵便番号「640941」で検索すると、Stateには「北海道」、Cityには「札幌市」、Addressには、「中央区旭ケ丘」が入ってくるようにしたいのですが、Stateに「北海道札幌市中央区旭ヶ丘」と入ってきてしまいます。 以下に実際のソースを載せます。どのように修正すればよいでしょうか? 参考url:http://webcake.no003.info/webdesign/jquery-ajax-php-post-sample.html ファイル名「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通信メソッド * @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
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • ok-rjak
  • ベストアンサー率52% (70/134)
回答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); にしたらどうでしょう?

do79tama13
質問者

お礼

お礼が遅くなってしまい申し訳ございません。 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

  • PHP内のkeyonupの記述方法

    AjaxZip2.0 ​http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html​ を導入しようと思い、いろいろと試行錯誤しているのですが、うまくいきません。記述の方法が違うのかと、調べているのですが、うまくいかないので、誰かわかるかた助けてください~。状況は以下です。 ファイル名:xxxx.php(phpファイルですが内部はHTMLの様に描かれてます) 該当箇所: <th>郵便番号</th> <td>〒<input maxlength="5" name="pd[zip_code1_txt]" id="zip1" size="5" value="<?= $pd['zip_code1_txt'] ?>" />- <input maxlength="10" name="pd[zip_code2_txt]" id="zip2" size="10" value="<?= $pd['zip_code2_txt'] ?>" onKeyUp=\"AjaxZip2.zip2addr('zip_code1_txt','pref_i','address1_txt','zip_code2_txt','address2_txt');\" /><em>半角数字(例:〒111-1111)</em></td> </tr> <tr> <th>市区町村</th> <td><input style="background-color: rgb(255, 255, 160); maxlength="64" name="pd[address1_txt]" size="50" id="address1" value="<?= $pd['address1_txt'] ?>" />(例:中央区銀座)</td> </tr> <tr> <th>番地など</th> <td><input style="background-color: rgb(255, 255, 160); maxlength="64" name="pd[address2_txt]" size="50" id="address2" value="<?= $pd['address2_txt'] ?>" />(例:1-1-1 プラザ銀座101)</td> </tr> こちらで、 onKeyUp="AjaxZip2.zip2addr('zip_code1_txt','pref_i','address1_txt','zip_code2_txt','address2_txt');" が読み込まれてないんじゃないかと。。PHP内での記述方法が違う様ですが、それすら詳しくないので、どなたか解決方法をくださいー(泣)

    • 締切済み
    • PHP
  • PHPでMySQLを使った検索のプログラム2

    まだ解決できないので、大変恐縮ですがご教授お願いします。 どうかよろしくお願いいたします。 数人にご教授いただいき、チェックボックスの選択には一つのkid(kodawari_keyの略)に対して2複数の値をもっているホテルを表示させるにはデータベースのtableを複数に分けて紐付けする必要があるとアドバイスをいただき、教えて頂いたとおりtableをホテル用とチェックボックス用とチェックボックスのid用とに分けて、SQL文で紐付けしたつもりだったのですが、チェックボックスをチェックしてから検索ボタンを押すと Fatal error: Call to a member function execute() on a non-object in C:\xampp\htdocs\koredake\xxxxx\xxxxxxx.php on line 97 のようなエラーが出てしまいます。 このことから紐付けのSQL文が間違っているのではと思うのですが、正解がわかりません。 どなたか教えていただけたらと思っております。 //MySQLの部分 教えていただいた部分で大変恐縮です。 //ホテルの基本情報 CREATE TABLE t_hotels(id int not null primary key,name varchar(100) not null,price_min int not null,price_max int not null,address varchar(100) not null); INSERT INTO t_hotels VALUES(1,'HOTEL A',5000,10000,'栃木県・・・'), (2,'HOTEL B',5000,12000,'栃木県・・・'), //こだわり情報 CREATE TABLE t_kodawari_key(id int not null primary key,name varchar(20)); INSERT INTO t_kodawari_key VALUES(1,'温泉'),(2,'ランチ'),(3,' ディナー'); //ホテルごとのこだわり CREATE TABLE t_hotel_kodawari(hid int not null,kid int not null,unique key(hid,kid)); INSERT INTO t_hotel_kodawari VALUES(1,1),(1,2),(1,3),(2,1),(3,2),(3,3),(4,3); //温泉かランチにこだわりがあるところ SELECT hid,t3.name,t3.price_min,t3.price_max,GROUP_CONCAT(t2.name) as kodawari,t3.address //温泉かランチかディナーのうち2つ以上にこだわりがあるところ SELECT hid,t3.name,t3.price_min,t3.price_max,GROUP_CONCAT(t2.name) as kodawari,t3.address //PHP部分 前半省略 <h1>ビジネスホテルの条件検索</h1> <form name="search_form" action="zenzen16.php" method="post" > <input type="hidden" name="cmd" value="search" /> <table> <tr> <th>物件種別</th> <td> <input type="checkbox" name="kid[]" value="1" <?php if( $_REQUEST["kid"] == "1" ){ print( 'checked' ); } ?>/> 温泉 <input type="checkbox" name="kid[]" value="2" <?php if( $_REQUEST["kid"] == "2" ){ print( 'checked' ); } ?>/> ランチ<br /> <input type="checkbox" name="kid[]" value="3" <?php if( $_REQUEST["kid"] == "3" ){ print( 'checked' ); } ?>/> ディナー <input type="checkbox" name="kid[]" value="4" <?php if( $_REQUEST["kid"] == "4" ){ print( 'checked' ); } ?>/> 駐車場</td> </tr> <tr> <th>価格帯</th> <td> <input type="text" name="price_min" value="<?php print( htmlspecialchars( $_REQUEST["price_min"] ,ENT_QUOTES ) ) ?>" size="8"> ~ <input type="text" name="price_max" value="<?php print( htmlspecialchars( $_REQUEST["price_max"] ,ENT_QUOTES ) ) ?>" size="8"><br /> </td> </tr> <tr> <th>住所</th> <td><input type="text" name="address" value="<?php print( htmlspecialchars( $_REQUEST["address"] ,ENT_QUOTES ) ) ?>" size="20"></td> </tr> </table> <input type="submit" value="検索" class="Btn-gray button"> </form> <p>&nbsp;</p> <?php if( $_REQUEST["cmd"] == "search" ){ $pdo = new PDO("mysql:host=localhost; dbname=hotel_reservation; charset=utf8", "koredake", "koredake123", array( PDO::ATTR_EMULATE_PREPARES => false ) ); $sql = "select * from t_hotels where 1 = 1 "; $condition = array(); //この部分が特に自信が無いです。 if( !empty( $_POST["kid"] )){ $sql = $sql . " left outer join kid on t_hotels.hid = kid.hid"; } if( !empty( $_REQUEST["price_min"] ) ){ $sql = $sql . " and price >= :price_min "; $condition[":price_min"] = $_REQUEST["price_min"]; } if( !empty( $_REQUEST["price_max"] ) ){ $sql = $sql . " and price <= :price_max "; $condition[":price_max"] = $_REQUEST["price_max"]; } if( !empty( $_REQUEST["address"] ) ){ $sql = $sql . " and ( address like :address ) "; $condition[":address"] = "%{$_REQUEST["address"]}%"; } $statement = $pdo->prepare( $sql ); $statement->execute( $condition ); $results = $statement->fetchAll(); ?> <table border="1"> <caption>検索結果</caption> <tr> <th></th> <th>ホテル名</th> <th>宿泊料金</th> <th>住所</th> </tr> <?php foreach( $results as $result ){ ?> <tr> <td><img src="hotel/<?php print( htmlspecialchars( $result["id"], ENT_QUOTES )); ?>.png" /></td> <td><?php print( htmlspecialchars( $result["hotel_name"], ENT_QUOTES )); ?></td> <td>\<?php print( htmlspecialchars( number_format( $result["price"] ),ENT_QUOTES ) ); ?></td> <td> <?php print( htmlspecialchars( $result["address"], ENT_QUOTES ) ); ?> </td> </tr> <?php } } ?> </table> </div>

    • ベストアンサー
    • MySQL
  • このようなソースを書いたのですが下に表示した二つのテーブルがどうしても

    このようなソースを書いたのですが下に表示した二つのテーブルがどうしても左よりに表示されてしまいます。 一行に2つのテーブルを横に並べつつその2つのテーブルを中央に表示できないでしょうか? よろしくお願いいたします <HTML><Div Align=center><HEAD><TITLE>検索結果詳細画面</TITLE></HEAD><BODY> <BR><BR><BR> <B>検索詳細画面</B><BR> <form action='/humans/servlet/Seach' method='get'> <table bor 社員番号</th> <td width=200> sno</td></tr><tr> <th>氏名</th> <td> name</td></tr><tr> <th>ヨミガナ</th> <td> kana</td></tr><tr> <th>住所</th> <td> address</td></tr><tr> <th>生年月日</th> <td> birthday</td></tr> <tr><th>性別</th> <td> sex</td></tr> <tr><th>身長</th> <td> hight</td></tr> <tr><th>体重</th> <td> weight</td></tr> <tr><th>血液型</th> <td> blood</td></tr> <tr><th>携帯電話番号</th> <td> mtel</td></tr> <tr><th>自宅電話番号</th> <td> ttel</td></tr></table><hr /> <br>家族(扶養家族)のデータ</br> <br></br><table border=1 align=left><tr><th width=150>氏名</th> <td width=200> name</td></tr><tr> <th>ヨミガナ</th> <td> kana</td></tr><tr> <th>生年月日</th> <td> birthday</td></tr><tr> <th>性別</th> <td> sex</td></tr><tr> <tr><th>身長</th> <td> hight</td></tr> <tr><th>体重</th> <td> weight</td></tr> <tr><th>血液型</th> <td> blood</td></tr> <tr><th>携帯電話番号</th> <td> mtel</td></tr> <tr><th>自宅電話番号</th> <td> ttel</td></tr> <tr><th>続柄</th> <td> reration</td> </tr></table> <table border=1 align=left><tr><th width=150>氏名</th> <td width=200> name2</td></tr><tr> <th>ヨミガナ</th> <td> kana2</td></tr><tr> <th>生年月日</th> <td> birthday2</td></tr><tr> <th>性別</th> <td> sex2</td></tr><tr> <tr><th>身長</th> <td> hight2</td></tr> <tr><th>体重</th> <td> weight2</td></tr> <tr><th>血液型</th> <td> blood2</td></tr> <tr><th>携帯電話番号</th> <td> mtel2</td></tr> <tr><th>自宅電話番号</th> <td> ttel2</td></tr> <tr><th>続柄</th> <td> reration2</td> </tr></table><br></br><br></br><br></br><br></br><br></br><br></br><br></br>

  • PHPの読解お願いいたします

    PHP初心者です。 環境 XAMPP1.7.0(最新) アパッチなど一括ダウンロード OS:ビスタ 多次元配列について以下のコードについて疑問があります。 ●の部分が疑問点となっております ~~~~~~~~~~~~~~~~~~~~~~~~~~~ <body> <table border="2"> <tr> <th>都市名</th><th>最高気温</th><th>最低気温</th> </tr> <?php $data=array( array("東京",32,25), array("名古屋",28,21), array("大阪",27,20), array("京都",26,19), array("福岡",27,22), ) foreach($data as $city){ print "<tr>"; ● foreach($city as $value) print "<td>{$value}</td>"; ●● } print "</tr>"; ?> </table> </body> </html> ~~~~~~~~~~~~~~~~~~~~~~~~~~ ●・・ここで<tr>を持ってくる必然性がわかりません。 例えば print "<td>{$value}</td>"のコードの<td>の横に付けることでも可能ではないのしょうか? ●●・・foreachがネストになり、多次元配列となっています。 まず$dataを取得しそれぞれを$cityに格納、次のforeachで$cityに格納された1行目のarray("東京",32,25)を一つづつ$valueに格納していくのだとは思いますが、例えばこのforeachネストの一連の流れを以下のように1つのforeachで記載することがなぜエラーになるのか分かりません。 foreac($data as $city){ print "<tr><td>{$city}</td></tr>" } $cityの中にはarray("東京",32,25) array("名古屋",28,21), array("大阪",27,20),array("京都",26,19),array("福岡",27,22), が格納されているので、別にこれをネストして{$value}に格納しなくてもそのまま変数$cityのみで表を作成できるのではないかと思っています。 まあでもエラーが出ますので、私の考えに大きな誤りがあるわけですが、誤っている部分をご指摘ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでMySQLを使った検索のプログラム

    「たったコレだけでPHPプログラミングが理解できる本」を参考にPHPでプログラムを書いていまして、 ビジネスホテルの検索機能をチェックボックス機能を余分につけて検索できないか試したのですが、 チェックボックスにチェックを入れると全く検索できず他のテキストボックスに入力するだけなら検索できます。 なんとかチェックボックスを有効にできないかいろいろなサイトを調べたり本を読んだりしましたが解決策が見つかりません。 いろいろな機能に対応できるようなプログラムを組みたいと思ったのでかなりの初心者で大変恐縮ですが、どなたかご教授お願いできないかと思っております。 あと参考になるサイトがございましたら、教えていただきたいと思っております。 何卒よろしくお願い致します。 前半省略 <form name="search_form" action="" method="post" > <input type="hidden" name="cmd" value="search" /> <table> <tr> <th>物件種別</th> <td> <input type="checkbox" name="kodawari_key[]" value="温泉" <?php if( $_REQUEST["kodawari_key"] == "温泉" ){ print( 'checked' ); } ?>/> 温泉 <input type="checkbox" name="kodawari_key[]" value="ランチ" <?php if( $_REQUEST["kodawari_key"] == "ランチ" ){ print( 'checked' ); } ?>/> ランチ<br /> <input type="checkbox" name="kodawari_key[]" value="ディナー" <?php if( $_REQUEST["kodawari_key"] == "ディナー" ){ print( 'checked' ); } ?>/> ディナー</td> </tr> <tr> <th>価格帯</th> <td> <input type="text" name="price_min" value="<?php print( htmlspecialchars( $_REQUEST["price_min"] ,ENT_QUOTES ) ) ?>" size="8"> ~ <input type="text" name="price_max" value="<?php print( htmlspecialchars( $_REQUEST["price_max"] ,ENT_QUOTES ) ) ?>" size="8"><br /> </td> </tr> <tr> <th>住所</th> <td><input type="text" name="address" value="<?php print( htmlspecialchars( $_REQUEST["address"] ,ENT_QUOTES ) ) ?>" size="20"></td> </tr> </table> <input type="submit" value="検索" class="Btn-gray button"> </form> <p>&nbsp;</p> <?php if( $_REQUEST["cmd"] == "search" ){ $pdo = new PDO("mysql:host=localhost; dbname=hotel_reservation; charset=utf8", "koredake", "koredake123", array( PDO::ATTR_EMULATE_PREPARES => false ) ); $sql = "select * from hotels where 1 = 1 "; $condition = array(); if( !empty( $_POST["kodawari_key"] )){ $sql = $sql . " and kodawari_key = :kodawari_key"; $condition["kodawari_key"] = $_REQUEST["kodawari_key"]; } if( !empty( $_REQUEST["price_min"] ) ){ $sql = $sql . " and price >= :price_min "; $condition[":price_min"] = $_REQUEST["price_min"]; } if( !empty( $_REQUEST["price_max"] ) ){ $sql = $sql . " and price <= :price_max "; $condition[":price_max"] = $_REQUEST["price_max"]; } if( !empty( $_REQUEST["address"] ) ){ $sql = $sql . " and ( pref like :pref or city like :city or address like :address ) "; $condition[":pref"] = "%{$_REQUEST["address"]}%"; $condition[":city"] = "%{$_REQUEST["address"]}%"; $condition[":address"] = "%{$_REQUEST["address"]}%"; } $statement = $pdo->prepare( $sql ); $statement->execute( $condition ); $results = $statement->fetchAll(); ?> <table border="1"> <caption>検索結果</caption> <tr> <th></th> <th>ホテル名</th> <th>宿泊料金</th> <th>住所</th> </tr> <?php foreach( $results as $result ){ ?> <tr> <td><img src="hotel/<?php print( htmlspecialchars( $result["id"], ENT_QUOTES )); ?>.png" /></td> <td><?php print( htmlspecialchars( $result["hotel_name"], ENT_QUOTES )); ?></td> <td>\<?php print( htmlspecialchars( number_format( $result["price"] ),ENT_QUOTES ) ); ?></td> <td> <?php print( htmlspecialchars( $result["pref"], ENT_QUOTES ) ); ?> <?php print( htmlspecialchars( $result["city"], ENT_QUOTES ) ); ?> <?php print( htmlspecialchars( $result["address"], ENT_QUOTES ) ); ?> </td> </tr> <?php } } ?> </table> </div> </body> </html>

    • ベストアンサー
    • MySQL
  • DBのデータを表示させたい

    こんにちは PHPは今まで他人様の作成したスクリプトをそのまま使用したりちょこっと改造するだけでしたが、 現在必要としているスクリプトが探してもなさそうなので 自分で作成しようと決めて勉強を始めましたが どうしても悩んでいる部分があるのでご教授いただけると助かります。 環境は以下の通りです apache 1.3.37 PHP 5.25 MySQL 5.0 現在の状況なのですが `uid` mediumint(8) NOT NULL auto_increment, `user` varchar(25) NOT NULL, `pass` varchar(32) NOT NULL, `place` varchar(32), `sev` varchar(32), `date` varchar(25) NOT NULL, `regdate` datetime, `gate` varchar(25), `statue` varchar(25), PRIMARY KEY (`uid`), KEY `user` (`user`), KEY `date` (`date`), KEY `gate` (`gate`), KEY `statue` (`statue`) このようなテーブルが作成してありユーザーがフォームから登録したものをDBに保存していき、 1ページに数件分ずつの表示で何ページにもわたって 全件を表示するようなページをです。 フォームからDBへのデータの保存はできるようになりましたが 表示をする際に何件もの表示をするのにどういった手法で行うのがいいのかで悩んでいます。 現在は最新の1件だけ表示されるようなページになっています。 <?php include ("config.php"); $con = mysql_connect($dbhost, $dbuser, $dbpasswd); $selectdb = mysql_select_db($dbname, $con); $sql = "SELECT * FROM testdata ORDER BY regdate DESC"; $rst = mysql_query($sql, $con); $datanum = mysql_num_rows($rst); if ($datanum < 1) { print("データがありません。<br>\n"); print("登録は <a href=\"regist.php\">こちら</a> から"); mysql_close($con); exit; } $data = mysql_fetch_array($rst) ?> <table width="95%" border="0" cellspacing="1"> <tr> <td><table width="100%" border="0"> <tr <td colspan="6">登録情報</td> </tr> <tr> <td width="13%">登録者名</td> <td width="20%"> <?=$data['user']?> </td> <td width="13%">場所</td> <td width="20%"> <?=$data['place']?> </td> <td width="13%">サーバー</td> <td width="20%"> <?=$data['sev']?> </td> </tr> <tr> <td>登録日時</td> <td> <?=$data['regdate']?> </td> <td>日時</td> <td> <?=$data['date']?> </td> <td colspan="2">&nbsp;</td> </tr> </table></td> </tr> <tr> <td><table width="100%" border="0"> <tr> <td colspan="5">状態</td> </tr> <tr> <td width="16%">ゲート</td> <td width="30%"><?=$data['gate']?></td> <td>&nbsp;</td> <td width="16%">statue</td> <td width="30%"><?=$data['statue']?></td> </tr> </table></td> </tr> </table> DBから何件分もの表示をするにはDBのデータを連想配列にするのかなと思っているのですが いまいちどんな手法が良いのかわかりません。よろしければご教授くださいませ。

    • ベストアンサー
    • PHP
  • PHPで絞り込み検索をしたいのですが・・・

    PHP歴1週間の初心者です。 今、ある一覧画面でデータの絞り込み検索を行おうと思っているのですが、イマイチうまくいきません。 一覧画面内の機能は以下の通りです ・ファイルのアップロード ・アップロードしたファイルの一覧 ・検索機能(トリガー:ボタン) ⇐ ここが分からない ボタンを押したら検索を行い、該当ファイルのみを一覧表示させたいのですが・・・ 変数に値が入っていなかったり、入ってると思ってたら入って無かったりでよくわからない状況にあります。 とりあえず、各機能のソースを貼り付けます。 ※要所のみ貼り付けます。 <一覧画面のソース> require('dbconnect.php'); // クエリー実行 $query = "select distinct * from main_t"; $result = mysql_query($query); ?> <table border = "5" width = "110%"> <tr> <th>ファイル番号</th><th>シールリーク度合</th><th>ベアリング摩耗</th><th>ファイルの種類</th><th>工場名</th><th>個体識別番号</th><th>型名</th><th>運転時間</th><th>マイク</th><th>故障診断実行日時</th><th>削除</th><th>推移観察</th> </tr> <?php while($row = mysql_fetch_array($result)){ // 各列の値を変数に取り出す $fid = $row['fid']; $fext = $row['fext']; $seal = $row['シールリーク度合']; $bear = $row['ベアリング摩耗']; $fkind = $row['ファイルの種類']; $ffact = $row['工場名']; $fnum = $row['個体識別番号']; $fkind = $row['型名']; $ftime = $row['運転時間']; $fmc = $row['マイク'] = ""; $rdate = $row['故障診断実行日時']; // ファイルのパス名を決定 $bname = "$fid"; $fpath = "$folder_files/$fid.$fext"; $tpath = "$folder_thumbs/$fid.$fext"; echo "<tr>"; echo "<td>$bname</td>"; echo "<td>$seal</td>"; echo "<td>$bear</td>"; echo "<td>$fkind</td>"; echo "<td>$ffact</td>"; echo "<td>$fnum</td>"; echo "<td>$fkind</td>"; echo "<td>$ftime</td>"; echo "<td>$fmc</td>"; echo "<td>$rdate</td>"; print('<td><a href = "pastdata.php?fid=' . $row['fid'] . '">このポンプの過去の推移を見る</a></td>'); echo "</tr>"; } ?> <アップロード> // POST以外は受け付けない if($_SERVER['REQUEST_METHOD'] != "POST") exit("アップロードが失敗しました"); // アップロードされたファイルを特定 $ftemp = $_FILES['yourfile']['tmp_name']; $fname = $_FILES['yourfile']['name']; $ftype = strtolower($_FILES['yourfile']['type']); $fsize = $_FILES['yourfile']['size']; $ferror = $_FILES['yourfile']['error']; // ファイルを確認 if(!is_uploaded_file($ftemp) || $fsize > $file_maxsize || $ferror > 0) exit("アップロードが失敗しました"); // ディレクトリ名を取得 $path = "/k/RDMS/Data/leak/leak_飯塚工場_20131021125944.txt"; $dir = dirname($path); // ファイル名と拡張子を取得 $finfo = pathinfo($fname); // ファイル名全体から拡張子以外の部分を取得 $fname = $finfo['basename']; // 拡張子を取得 $fext = strtolower($finfo['extension']); // ファイル名から拡張子を抽出 $bname = basename("$fname", ".txt"); // 中身を覗くファイルの名前を指定 $file = file_get_contents("$dir/$fname", NULL, NULL, 0, 12); // 改行するまでの値をそれぞれ配列に格納 $ratio = preg_split("{\n}", $file); // "_" を基準にファイル名を分割して配列に保存 $output = ""; $keyword = preg_split("{_}", $bname); // データベースに接続 require('dbconnect.php'); // クエリー実行(命令:insert) $query = "insert into main_t (fext, シールリーク度合, ベアリング摩耗, ファイルの種類, 工場名, 故障診断実行日時)" . " values ('$fext', '$ratio[0]', '$ratio[1]', '$keyword[0]', '$keyword[1]', '$keyword[2]')"; $result = mysql_query($query); // INSERT文で挿入された行のfid $fid = mysql_insert_id(); header("Location: http://{$_SERVER['SERVER_NAME']}/filelist.php"); <検索機能> ⇐ ここです。 <?php // データベースの接続 require('dbconnect.php'); // パラメータの取得 if(isset($_GET['keyword[1]'])) $keyword[1] = $_GET['keyword[1]']; // クエリー実行 $result = mysql_query('select * from main_t where keyword[1] ='.$keyword[1]); ?> <tr> <th>ファイル番号</th><th>シールリーク度合</th><th>ベアリング摩耗</th><th>ファイルの種類</th><th>工場名</th><th>個体識別番号</th><th>型名</th><th>運転時間</th><th>マイク</th><th>故障診断実行日時</th><th>削除</th> </tr> <?php while($row = mysql_fetch_array($result)){ // 各列の値を変数に取り出す $fid = $row['fid']; $fext = $row['fext']; $seal = $row['シールリーク度合']; $bear = $row['ベアリング摩耗']; $fkind = $row['ファイルの種類']; $ffact = $row['工場名']; $fnum = $row['個体識別番号']; $fkind = $row['型名']; $ftime = $row['運転時間']; $fmc = $row['マイク'] = ""; $rdate = $row['故障診断実行日時']; echo "<tr>"; echo "<td>$bname</td> echo "<td>$seal</td>"; echo "<td>$bear</td>"; echo "<td>$fkind</td>"; echo "<td>$ffact</td>"; echo "<td>$fnum</td>"; echo "<td>$fkind</td>"; echo "<td>$ftime</td>"; echo "<td>$fmc</td>"; echo "<td>$rdate</td>"; echo "</tr>"; } ?> 以上が、検索機能に関わるもののソースです。 長々と申し訳ありません。 現時点では、工場名で絞り込もうとしています。 しかし、keyword[1]が未定義だったり、中身なかったりと言われます。 何卒、助言を宜しくお願い致します。

  • エラーになってしまうCREATE文

    MySQL 5.0.21(Win版)を導入してみたのですが、 http://hotwired.goo.ne.jp/webmonkey/2000/01/index2a_page5.html にある下記のSQL文を「MySQL Command Line Client」から実行すると CREATE TABLE employees ( id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMENT, first varchar(20), last varchar(20), address varchar(255), position varchar(50), PRIMARY KEY (id), UNIQUE id (id)); を実行すると、 mysql> CREATE TABLE employees ( id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMEN T, first varchar(20), last varchar(20), address varchar(255), position varchar(5 0), PRIMARY KEY (id), UNIQUE id (id)); ERROR 1067 (42000): Invalid default value for 'id' mysql> とエラーになってしまいます。なぜでしょうか?

    • ベストアンサー
    • MySQL
  • PHP+MySqlでの検索

    検索ページから下記のソースに検索結果を表示させようと思っておりますが、スペース区切りにして検索をかけるとヒットしません。 こちらのソースのどの部分にどの様なSQL文を書けば実装出来ますでしょうか? 宜しくお願いします。 <?php require_once('Connections/tm.php'); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; } $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $colname_search = "-1"; if (isset($_GET['search'])) { $colname_search = $_GET['search']; } mysql_select_db($database_tm, $tm); $query_search = sprintf("SELECT * FROM posts WHERE title LIKE %s ORDER BY modified DESC", GetSQLValueString("%" . $colname_search . "%", "text")); $search = mysql_query($query_search, $tm) or die(mysql_error()); $row_search = mysql_fetch_assoc($search); $totalRows_search = mysql_num_rows($search); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無題ドキュメント</title> </head> <body> <table width="583" border="1"> <tr> <th width="82" scope="col">タイトル</th> <th width="113" scope="col">メッセージ</th> <th width="111" scope="col">開始時間</th> <th width="105" scope="col">名前</th> <th width="138" scope="col">詳細</th> </tr> <tr> <td height="20"><?php echo $row_search['title']; ?></td> <td><?php echo $row_search['message']; ?></td> <td><?php echo $row_search['modified']; ?></td> <td><?php echo $row_search['n_name']; ?></td> <td><a href="request_list.php?recordID=<?php echo $row_search['id']; ?>">詳細</a></td> </tr> </table> </body> </html> <?php mysql_free_result($search); ?>

    • ベストアンサー
    • MySQL
  • ユーザー登録画面

    学校のPHPの課題でPHPmyadminを使ってユーザー情報の登録画面を作っています。プログラムは大体できたのですがうまく動いてくれません。自分の作ったプログラムのどこが間違っているか教えていただけないでしょうか? できればどのように直したらいいか教えていただけたらと思います。 ↓が作ったプログラムです。 <?php $host = "localhost"; if (!$conn = mysql_connect($host,"root","admin")){ die("データベース接続エラー.<br />"); } mysql_select_db("kisop", $conn); $name = mysql_real_escape_string($_POST['name']); $postal_code = mysql_real_escape_string($_POST['postal_code']); $state = mysql_real_escape_string($_POST['state']); $city = mysql_real_escape_string($_POST['city']); $street = mysql_real_escape_string($_POST['street']); if ($name == ""){ exit ("名前が入力されていません"); } $sql = "INSERT INTO user_table(name,postal_code,state,city,street) VALUES('$name', '$postal_code', '$state', '$city' ,'$street')"; mysql_query($sql, $conn) or die("登録できませんでした"); print("登録しました。<a href=\"user.php\">user.php</a>で確認してください。"); ?> <html> <head><title></title> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> </head> <body> <table width="100%"> <tr><td align="center"><h1>ユーザ情報登録</h1></td></tr> </table> <table width="100%"> <tr> <td valign="top"> <form action="user.php" method="post"> <table border align="center"> <tr><td>名  前</td><td><input type=\"text\" name=\"name\"></td> <tr><td>郵便番号</td><td><input type="text" name="postal_code"></td></tr> <tr><td>都道府県</td><td><input type="text" name="state"></td></tr> <tr><td>市 町 村</td><td><input type="text" name="city"></td></tr> <tr><td>番  地</td><td><input type="text" name="street"></td></tr> <tr><td colspan="4" align="center"><input type="submit" value="登録"></td></tr> </table> </form> </td> </tr> </table> </body> </html> phpmyadminにはkisopというデータベースを作りuser_tableというテーブルを作りました。user_tableにはname postal_code state city streetという項目を作りました

    • ベストアンサー
    • PHP

専門家に質問してみよう