- ベストアンサー
MYSQLクエリのデータをテキストエリアにセットしたい
- MYSQLを使用してメールフォームの入力支援に郵便番号からそれぞれ都道府県、市区郡、住所、住所1とテキストエリア内に表示させたいのですがうまく表示されません。
- データベースに問い合わせし、クエリの結果をテキストエリアに表示する方法がわかりません。
- ソースコードとデータベースのカラムの情報を提供しました。どのように改善すればよいかアドバイスをお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
となると、DBからの取得ができていないのかもしれませんね。 $query を出力してみて、Dosプロンプトなどで直接SQLをたたいて見て、想定しているデータが取れるかを確かめて見てください。 ちゃんと取れているのでしたら、DBのクエリ発行~変数に入れる処理の間で何か原因があるということです。
その他の回答 (4)
- moon_night
- ベストアンサー率32% (598/1831)
PrintHead("新規会員登録フォーム"); のすぐ下で print $inpadd ." = " .$ZipCode['CODE_C']; print $ken ." = " .$ZipCode['KEN_C']; print $city ." = " .$ZipCode['ADD1_C']; print $address ." = " .$ZipCode['ADD2_C']; とするとちゃんと表示されますか?
お礼
ご丁寧なご回答本当にありがとうございます。 早速,試してみたのですが====という表示のみでした。 気がついたのですが、php内の構造に問題があるの かもしてません。 全体の構造はこのような感じです。 ________________ <?php> ヘッダ表示 require_once等の処理 各エラーコードの配列 DB接続 <?> フォーム文のhtml ________________ $_POSTの情報はうまく表示させることができますし 直前に<?=$inpadd ="あああああああ"?> とするとvalueの項目にうまく表示されます。 DBから出力した情報だけがうまく表示されないようです。
- moon_night
- ベストアンサー率32% (598/1831)
うーん、なんでですかね? 全部のvalueが空なんでしょうか? 一部だけでも値がはいっているのでしょうか。 input の直前に Print してみたらどうなるでしょうか? $inpadd などと $ZipCode を全て出力した結果は? あとは詳細なソースを見ないと分かりませんね。 とりあえずDBからはデータが取得できているようなので、その間に問題があるかとは思いますが。。。
お礼
何度もご回答くださり本当にありがとうございます。 全てのvalueに結果が表示されません。 inputの直前にprintするとうまく動作しなくなりました。 やはり記述部分と、データ取得部分の間に問題があるかもしれません。 長文になってしまい誠に申し訳ござませんがソースを貼らせて頂きます。 アドバイスいただけると助かります。よろしくお願いいたします。 __________________________________________________ <?php //外部設定ファイルにリンク require_once('./base/commoninc.php'); require_once('./base/errorinc.php'); //エラーメッセージ用配列 $elist = Array(); // email表示用変数 $inpemail = ""; //郵便番号検索のボタンを押したときの処理 if (count($_POST)){ if(isSet($_POST['add']) && isSet($_POST['kensaku'])){ Check_Addno(); } } ?>
補足
//スクリプトの続きです。 /** *************************************************** * * 郵便番号入力チェック * *************************************************** **/ <?php function Check_Addno(){ //エラー用変数 global $elist; //入力データを変数展開 extract($_POST); //郵便番号が入力されているかチェック if (!$addNo){ //郵便番号が入力されていない $elist[] = 80; }else if (!IsStringLength($addNo,7)){ //郵便番号が7文字で入力されていない。 $elist[] = 90; }else if (!Checkzipcode($addNo)){ $elist[] = 90; } //エラーがあるかどうかあった場合DB接続前にfalseとする if(count($elist)){ return false; } //データベースに接続 $conn_id = dbConnect(); //データベースに問い合わせ $query ="select * from ZIP_T where CODE_C='{$addNo}'"; //クエリの結果を返す $result_id = doquery($query,$conn_id); //該当するデータがあるか if (!mysql_num_rows($result_id)){ // 該当者がいない $elist[] = 100; } //該当するデータがなかった場合、falseとする if(count($elist)){ return false; } // 結果セットからキー配列(連想配列)へ $ZipCode = mysql_fetch_assoc($result_id); //格納 $inpadd = $ZipCode['CODE_C']; $ken = $ZipCode['KEN_C']; $city = $ZipCode['ADD1_C']; $address = $ZipCode['ADD2_C']; PrintHead("新規会員登録フォーム"); //エラー表示出力 if (count($elist)){ Set_Error_Message($elist); } //郵便番号用エラー主力 // error 出力 if(count($elist)){ // email フィールド用 $inpadd = $_POST['addNo']; } ?>
- moon_night
- ベストアンサー率32% (598/1831)
>echo $ZipCode["KEN_C"]; >echo $ZipCode["ADD1_C"]; >echo $ZipCode["ADD2_C"]; >にしてみるとデータは表示されました。 でしたら、結果はちゃんととれているんですね。何が原因でしょう・・・ 単に表示より結果取得が下にあるから・・・とかですか? (結果がセットされていない状態でPRINTしている) あとは <input type="text" name="city"value = "<?= $city ?>" size="40"> のところの valueがくっついているので半角スペースを空けてやるとか・・・ <input type="text" name="city" value = "<?= $city ?>" size="40">
お礼
何度もご回答ありがとうございます。 >単に表示より結果取得が下にあるから・・・とかですか? 確かに結果取得は表示より下にありました。 そこで、単純に結果取得を上にして表示を下に持って行きました。 valueのところの記述を確認してみましたがやはり問題ないようです。 しかし、やはりうまくいきません。 ブラウザのソースで確認してみたのですが各項目のvalueのところは""となってしまっておりました。 他にチェックするべき箇所や、こうしてみては?みたいなアドバイスなどございましたらご教授ください。 よろしくお願いいたします。
- moon_night
- ベストアンサー率32% (598/1831)
doquery が間違っているような気がします。 別で関数として設定してない場合は動かないのでは? mysql_query を使ってみましょう。 $result_id = mysql_query($query,$conn_id);
お礼
ご回答ありがとうございます。 早速do_queryで試してみたのですがやはり表示されません。 補足ができておらずまことに申し訳なかったのですが doqueryにかんしては別のPHPにてrequire_onceで定義しております。 試しに、 $inpadd = $ZipCode["CODE_C"]; $ken = $ZipCode["KEN_C"]; $city = $ZipCode["ADD1_C"]; $address = $ZipCode["ADD2_C"]; のところを、echo $ZipCode["CODE_C"]; echo $ZipCode["KEN_C"]; echo $ZipCode["ADD1_C"]; echo $ZipCode["ADD2_C"]; にしてみるとデータは表示されました。 データはきちんと格納されているようですので <input type="text" name="city"value = "<?=$city?>" size="40"> あたりに問題があるのでしょうか?
お礼
何回もアドバイスいただいて本当にありがとうございます。 ついに解決することが出来ました! $inpaddなどの変数をglobal宣言させることによって無事に 解決することが出来ました。 フォーム内の$inpaddが情報を取得できていなかったのが 原因のようでした。 moon_night様、親身になって考えていただいて本当に感謝しております。