• ベストアンサー

PHP プルダウンメニュー MYSQL

PHPを習い始めているのですがどうしても分からない問題が出てきました。 プルダウンメニューを作成し、その中の項目を選択すると検索ボタンをお押さずに別のページにとび、選択項目の必要情報(全件情報)をページが切り替わったと同時にMYSQLから吐き出したいのですが、どうしてもやり方が分かりません。  色々と調べていたらjavascriptを使い検索ボタンを押さずに、 プルダウンから項目を選んだだけでページは切り替わることは出来たのですが、その次の工程にしているページが切り替わったと同時に選択項目の 必要情報を画面に出力する方法が分かりません、、 下にあるスクリプトでプルダウンから直接違うページに飛ばしており、 <!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=Shift_JIS" /> <SCRIPT LANGUAGE="JavaScript"><!-- function Jump() { tu = document.f.elements['jumpto'].options[document.f.elements['jumpto'].selectedIndex].value if( tu != '-' ) { location.href = tu; } else { alert('移動先を選択して下さい。'); } } // --></SCRIPT> <FORM NAME="f"> <SELECT NAME="jumpto" onChange="Jump();"> <OPTION VALUE="-" SELECTED>移動先を選択</OPTION> <option value="page1.php" >aaa</option> <option value="page2.php" >bbb</option> <option value="page3.php">ccc</option> <option value="page.php">ddd</option> </SELECT> </FORM> 例えばpage1.phpに飛んで、ページが切り替わったと同時に 全件情報を出力したいのですが どのたかお分かりになるかたが いましたら是非お伺い出来ませんでしょうか? 宜しくお願い致します。

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

  • ベストアンサー
  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.6

#1です。 もっとスマートなやり方があるかもしれないのですが、以下の方法で出来ました。 ------ 渡す側のPHPファイル ------- と書かれている行の下の<?phpから ------ 受け取る側のPHPファイル(tokyo.php) ------- と書かれている行の上の?>までをコピーし、メモ帳に貼り付けます。 hoge.phpとか名前を付けて保存します。 保存時に同じように文字コードに関しての警告が出て続行しますかと聞かれるのではいを選択すると保存が出来ます。 保存後はDreamWeaverで開く事が出来ます。 開いたらDOCTYPEを定義する部分↓の4箇所に?がついているはずです。 <!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">? ・EN" "? ・.dtd">? ・xmlns="??http ・1999/xhtml">? の4箇所です。 この?を消してください。 それで正常に機能するかと思います。

noname#130289
質問者

お礼

出来ました!! なにからなにまでお教えして頂きましてありがとうございました!! まだ自分の中で全部理解しきれてない場所もあり、さっそく勉強をさせて頂きます! 分からない所で困っている中、一から丁寧に教えてくださり 本当にありがとうございました!

その他の回答 (5)

  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.5

ソースをここまで見せていただいて初めて一旦自分に飛ばしてから各ページへ飛ばすということがわかりました。 とりあえず急ぎということなので動けばよしということで(笑) それと、わけがわからなくなったら一旦全てコメントアウトして上から順にコメントを外していくようなデバッグでひとつずつ処理を確認していったほうがよいと思います。 あと、自分は単純な文字列出力以外のhtmlタグなどはechoで書くとエスケープやら改行やらゴチャゴチャとしてしまうのでphp部分は<?php ?>で囲み、html部分はなるべくphpの外に出して書くようにしています。一般的かどうかといわれると何とも言えませんがその方が自分はわかりやすいです。 ですので自分流に変更をかけたものですが参考にしてくださいませ。。 インデントは投稿時になくなってしまうと思うので体裁はあとで整えてください。 ------ 渡す側のPHPファイル ------- <?php //extract($_GET['fld']); $fld = $_GET['fld']; if(isset($_GET['fld'])){ switch ($fld){ case "東京都": $s1="selected";$s2="";$s3="";$s4=""; break; case "埼玉県": $s1="";$s2="selected";$s3="";$s4=""; break; case "千葉県": $s1="";$s2="";$s3="selected";$s4=""; break; case "神奈川県": $s1="";$s2="";$s3="";$s4="selected"; break; default: echo "error!\n"; exit; } } $self = $_SERVER['SCRIPT_NAME']; ?> <!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=shift_jis" /> <SCRIPT LANGUAGE="JavaScript"> <!-- function Jump() { tu = document.f.elements['jumpto'].options[document.f.elements['jumpto'].selectedIndex].value if( tu != '-' ) { location.href = tu; } } // --> </SCRIPT> <title>住所検索</title> </head> <body> <FORM NAME="f"> <SELECT NAME="jumpto" onChange="Jump();"> <OPTION VALUE="-" >移動先を選択</OPTION> <option value="<?php echo $self ?>?fld=<?php echo urlencode('東京都') ?>" <?php echo $s1 ?>>東京都</option> <option value="<?php echo $self ?>?fld=<?php echo urlencode('埼玉県') ?>" <?php echo $s2 ?>>埼玉県</option> <option value="<?php echo $self ?>?fld=<?php echo urlencode('千葉県') ?>" <?php echo $s3 ?>>千葉県</option> <option value="<?php echo $self ?>?fld=<?php echo urlencode('神奈川県') ?>" <?php echo $s4 ?>>神奈川県</option> </SELECT> </FORM> <?php if($fld == "東京都"){ ?> <p> <form action="tokyo.php" method="post" > <select name="area"> <option value="-">選択して下さい</option> <option value='東京都'>東京都</option> <option value='東京都足立区'>東京都足立区</option> <option value='東京都北区'>東京都北区</option> <option value='東京都葛飾区'>東京都葛飾区</option> <option value='東京都荒川区'>東京都荒川区</option> <option value='東京都江戸川区'>東京都江戸川区</option> <option value='東京都台東区'>東京都台東区</option> </select> </p> <p><input type="submit" value="検索"> <input type="reset" value="リセット"></p> </form> <?php } ?> ------ 受け取る側のPHPファイル(tokyo.php) ------- <?php $area = $_POST['area']; echo $area; //以降データベース処理; ?>

noname#130289
質問者

補足

夜遅くまでご丁寧にご説明して頂き、また スクリプトまで書いてご指導していただけたこと大変感謝しております。 自分も早く人に教えれる位まで勉強をしたいと思います。 またスクリプトの書き方のご指導などや自分以外の人が書いたスクリプトは 大変勉強になります。 お礼のお言葉を申してる最中大変申し訳ないのですが、 一点記載して頂きましたスクリプトでお伺いしたいことがございます。 こちらでコピペをして確認をしようと思ったのですが、 現在のエンコーディングではドキュメントないの全ての文章を正しく 保存できません。UTF-8 またドキュメント内の特殊文字をサポートするエンコードに変更して下さいとのアラートがでます。 ちなみに私は今dreameaver8もしくはmiを利用しております。 UTF-8にエンコードを変えても同じアラートが出てきてしまい、 スクリプトを何度も見直したのですが どこのことを示してるのか分かりませんでした。 なにかご存知な所はございますでしょうか。 たびたびご質問をして大変申し訳ございません、。

  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.4

#1です。 補足を見ますと、都道府県別に人の情報を表示したいということでよろしいでしょうか。 >$sql= "select * from woo where add1 like '%$fld%'"; ということは カラム名add1の値を受け取って$fldへ格納したいということですね。 >このadd1(都道府県)というのがpage1.phpで表示したい情報になっており、これをキーとして振り分けしたいのですが、 都道府県名を渡したいのであれば渡す側の<optin>タグは、 <option value="page1.php?fld=<?php echo urlencode('東京都') ?>">東京都</option> <option value="page2.php?fld=<?php echo urlencode('神奈川県') ?>">神奈川県</option> という形にしてみたらいかがでしょうか。 URLのパラメータとして受け取る場合はPOSTで受けるのではなく extract($_GET['fld']); のようにGETで受け取る事が出来ます。 都道府県名だけを受け取るのであれば $fld=$_GET(['fld']); でもいけます。 あと、 echo "<font color = \"red\">", $rows, "件のデータがヒット<br></font>\n"; のソースの$rowsの両脇はカンマではなく.(ドット)で文字列の連結です。 それから while($row = mysql_fetch_array($result)){ とするのであれば、 $rows = mysql_num_rows($result); はいらないかと思います。 最後に、ちょっと感じたのですが、内容だけが違う同じレイアウトページに情報を出力するのであれば、page1.php、page2.phpといったようにphpファイルを分ける必要はないかと思います。 ただ、何か理由があってそれぞれ別のファイルに出力したいのでありましたら読み流してください。

noname#130289
質問者

補足

たびたびご丁寧にご説明して頂きまして大変感謝しております。 こちらでご返答して頂きました内容を検討してみました。 こちらでなんども色々なパターンにて試しているのですが、 どうにもページの切り替わりと同時に情報が出てくる動作が出来ません。 最後に大変恐縮ですがこちらが受け取り側のスクリプトになりますので 見て頂けないでしょうか。page1.phpはtokyo.phpになっております。 また >>内容だけが違う同じレイアウトページに情報を出力するのであれば、page1.php、page2.phpといったようにphpファイルを分ける必要はないかと思います。 こちらですが正直やり方がどうしても分からずこのような形になってしまいました。今時間がなく急いでる所もありますが終わり次第また勉強し直そうと思っております。ありがとうございます。 <!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=Shift_JIS" /> <SCRIPT LANGUAGE="JavaScript"><!-- function Jump() { tu = document.f.elements['jumpto'].options[document.f.elements['jumpto'].selectedIndex].value if( tu != '-' ) { location.href = tu; } else { alert('移動先を選択して下さい。'); } } // --></SCRIPT> <title>住所検索</title> </head> <body> <?php extract($_GET['fld']); //東京都一覧 if($fld == "東京都"){$s01 = "selected";} if($fld == "東京都足立区"){$s02 = "selected";} if($fld == "東京都北区"){$s03 = "selected";} if($fld == "東京都葛飾区"){$s04 = "selected";} if($fld == "東京都台東区"){$s05 = "selected";} if($fld == "東京都墨田区"){$s06 = "selected";} if($fld == "東京都江東区"){$s07 = "selected";} ?> <FORM NAME="f"> <SELECT NAME="jumpto" onChange="Jump();"> <OPTION VALUE="-" >移動先を選択</OPTION> <option value="tokyo.php?fld=<?php echo urlencode('東京都') ?>">東京都</option> <option value="saitama.php?fld=<?php echo urlencode('埼玉県') ?>">埼玉県</option> <option value="chibaken.php?fld=<?php echo urlencode('千葉県') ?>">千葉県</option> <option value="kanagawaken.php?fld=<?php echo urlencode('神奈川県') ?>">神奈川県</option> </SELECT> </FORM> <?php echo " <p> <form action=\"tokyo.php\" method=\"post\" >\n <select name=\"fld\">\n <option value=\"\" $s00>選択して下さい</option>\n <option value=\"東京都\"$s01>東京都</option>\n <option value=\"東京都足立区\"$s02>東京都足立区</option>\n <option value=\"東京都北区\"$s03>東京都北区</option>\n <option value=\"東京都葛飾区\"$s04>東京都葛飾区</option>\n <option value=\"東京都荒川区\"$s05>東京都荒川区</option>\n <option value=\"東京都江戸川区\"$s06>東京都江戸川区</option>\n <option value=\"東京都台東区\"$s07>東京都台東区</option>\n </select>\n</p> <p><input type=\"submit\" value=\"検索\"> <input type=\"reset\" value=\"リセット\"></p>\n </form>\n ";

  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.3

#1です。 >DBに格納しているキーとはフォームなどから 蓄積した情報に個別ないしIDをつけておくと言うことでしょうか? そのIDなどをもとに飛ぶ先のphpでうけとるという形なのでしょうか? その通りです^^ どんな商品にも品番は必ずありますよね。 それと同じでDB内に持つ(蓄積する)データには引っぱり出したり更新したりするための、重なってはならないキー(ID)が必要になります。 1,2,3などの連番をキーにしたりすれば重複も防げるので割と一般的かと思われます。 テーブルの中が以上のように整理されればキーを元に#2さんのような方法で ・DB接続 ・SQL発行 ・結果取得 ・表示 の手順でいけます。

noname#130289
質問者

補足

ご丁寧のお答えして頂きどうもありがとうございます。 さっそく試していたのですが、うまく機能しなかったので もう一度ご質問をさせて下さい。、 先ほど書きました<option value="page1.php" >aaa</option>の部分にキーを足して<option value="tokyo.php?key=key_add1" >東京都</option>に致しました。 このadd1(都道府県)というのがpage1.phpで表示したい情報になっており、 これをキーとして振り分けしたいのですが、 上のURLにはpage1.php?key=key_add1"このような形で表示されるのですが、 変化が起きませんでした。現在extract($_POST)で受けてるとか関係あるのでしょうか? こちらが飛び先のページのmysqlの所になります。 if($fld<>''){ //MySQLサーバに接続 if (!$int_connect = @mysql_connect("××", "××××", "××××")) { die("can't connect mysql server."); } //データベースに接続 if (!@mysql_select_db("×××", $int_connect)) { die("can't use selected database."); } $sql= "select * from woo where add1 like '%$fld%'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); echo "<font color = \"red\">", $rows, "件のデータがヒット<br></font>\n"; if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["renban"]; echo " "; echo $row["tourokubi"]; echo "<br />"; echo $row["people"]; echo " "; echo $row["add1"]; echo $row["add2"]; echo "-"; echo $row["sta"]; echo " "; echo $row["tel"]; echo $row["url"]; echo $row["sejitu"]; echo $row["pr"]; echo "</p><hr />"; } } } ?> </body> </html>

  • calltella
  • ベストアンサー率49% (317/635)
回答No.2

page1.php を以下の内容にする。 //MySQLサーバに接続 if (!$int_connect = @mysql_connect("$sql_host", "$sql_user", "$sql_pass")) { die("can't connect mysql server."); } //データベースに接続 if (!@mysql_select_db("$db_name", $int_connect)) { die("can't use selected database."); } $sql = "ここにSQL文を書く"; //sqlの実行 if(!$int_result = @mysql_query($sql)){ die("sql error."); } //検索結果の表示 while ($str_array = @mysql_fetch_array($int_result)){ ここに出力のHTMLを書く 値を取得するには $str_array['フィールド名']; }

  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.1

DBに格納されている内容に対しては必ずキーとなるものがあるはずですよね? そのキーを <option value="page1.php?key=key_aaa" >aaa</option> <option value="page2.php?key=key_bbb" >bbb</option> のようにURLにつけて飛ばし、飛んだ先のphpで $key=$_GET['key']; みたいな感じで受け取ってそれをキーにした内容をDBから取得し、出力すればよいのではないでしょうか?

noname#130289
質問者

補足

さっそくの回答ありがとうございます! まだ始めたばかりの初心者なのでお伺いをしたいのですが、 DBに格納しているキーとはフォームなどから 蓄積した情報に個別ないしIDをつけておくと言うことでしょうか? そのIDなどをもとに飛ぶ先のphpでうけとるという形なのでしょうか? ご回答頂いた返答でなにかもう少しで分かりそうな気がします。

関連するQ&A