• ベストアンサー

POSTでセレクトフォームの値を渡す

こんにちは。初めて質問させていただきます。 過去ログを検索して似たような内容の投稿は読んだのですが、どうにも自分がやりたいことへの応用が利かないため投稿させていただきました。環境はPHP4.3.2 DBはMYSQLを使用しています。 やろうとしていることは、入力フォーム上(index.phpとします)で任意(セレクトフォーム)でテーブルを選択し、その選択したテーブルにセレクトフォームの下にあるテキストフォームの値を挿入しようと考えています。 引っかかっている部分はセレクトの値の部分です。(テキストの方はテーブルを固定すると問題なかったので省略します) <<index.php>> <form action="inputdata.php" method="post"> <select name="dblist"> <? $mysql = mysql_connect(SERVER,USER,PASS) or die ("MYSQLに接続できませんでした\n"); mysql_select_db(DB,$mysql) or die ("データベースの接続に失敗しました\n"); $dbresult = mysql_query("SELECT * FROM listtable", $mysql); while($row = mysql_fetch_assoc($dbresult)){ echo "<option value='{$row['list_tb']}'>{$row['list_name']}"; } mysql_close($mysql); ?> </select> //これより下にテキストが入りますが省略します </form> 上記のような渡し方の場合、受け取る側(inputdata.php)を $table = $_POST['dblist']; と書いているのですが、echoで$tableを表示してもなにも表示されませんでした。(nullでした) 受け取り側(inputdata.php)の書き方が悪いのでしょうか?それともそもそもの渡し方(index.php)が悪いのでしょうか? 基礎的なことかもしれないのですが、適切な受け渡し方法があれば教えてください。よろしくお願いします。

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

  • ベストアンサー
  • mappy88
  • ベストアンサー率20% (15/75)
回答No.2

こんにちは。 そもそも以下のコードは正常に動作しているのでしょうか? ------------------------------------------------ <? $mysql = mysql_connect(SERVER,USER,PASS) or die ("MYSQLに接続できませんでした\n"); mysql_select_db(DB,$mysql) or die ("データベースの接続に失敗しました\n"); $dbresult = mysql_query("SELECT * FROM listtable", $mysql); while($row = mysql_fetch_assoc($dbresult)){ echo "<option value='{$row['list_tb']}'>{$row['list_name']}"; } mysql_close($mysql); ?> ------------------------------------------------ POSTする画面が表示され、そのソースに<option>が羅列されていればサーバー側で正常に動作していると判断できます。また、ブラウザに表示されているドロップダウンリストの内容が期待した値ならサーバー側は正常でしょう。 まずはサーバーサイドの部分を一時的に固定にしてみてドロップダウンリストが正常に表示されている事を前提にPOSTしてみて受取側で確認されてはどうでしょうか? $table = $_POST['dblist']; この記述自体は間違いないと思います。 #<form>にname属性が無いのは気のせい?

naruwanko
質問者

お礼

mappy88さんありがとうございました!動くようになりました。 >そもそも以下のコードは正常に動作しているのでしょうか? この一文にふとそういえばと思ってDBを呼び出すのではなく普通にhtmlで直書きしてみたところ、正常に動いていないことがわかりました。 DBの読み込みでは選択肢($row['list_name'])がすべて表示されていたので正しく動いていると思い込んでいたのですが、htmlでも思ったようにはならずDBの問題以前だとわかりました。 結果、<select name="dblist">は<select name="dblist[]">でなければいけないことがわかり、$table=$_POST['dblist']も、 if($_POST["dblist"]){ foreach($_POST["dblist"] as $key=>$value){ $table = $value; } } 上記のようにしたところ値を受け取ることができました。 ただ<form>のname属性ですが、これをつけるとループしているようで(読み込みが以上に長いだけかもしれませんが)nameはつけませんでした。PHPだけでなくHTMLのサイトや書籍なんかも読んでいたのですが、name属性をつけているものがあったりなかったりだったので省略可能なのかと思っていたんですが、ここら辺はまだ自分でもわからないので調べてみようかと思います。 助かりました。どうもありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 んっと…今後にもつながる話になるかと思うので。 取り合えずまず、$_POST(と、できれば$_GETを念のため)の、全てのkeyと全てのvalueを一覧表示してみることをお勧めします。 それによって「どこに問題があるのか」を絞っていくことが出来るので。 一覧表示には foreach を使います。使い方などは是非調べてみてください。

naruwanko
質問者

お礼

ご回答いただきありがとうございました。 foreachは普段良く使っていたのですが、問題の発見という手立てに一覧表示してみるということはまったく思いつかず、大変勉強になりました。 mappy88さんへのお礼にも書かせていただいたのですが、foreachを使うことでなぜ値が正しく取得できなかったのか確認することができました。 この方法は今後も使わせていただこうと思います。 大変勉強になりました。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A