• ベストアンサー

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)が悪いのでしょうか? 基礎的なことかもしれないのですが、適切な受け渡し方法があれば教えてください。よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • フォームへ値の渡し方について

    こんばんわ。 PHPの勉強をしています。 入力されたIDを元にDBから氏名をクエリし、テキストボックスへ表示させようとしていますが、テキストボックスの指定の仕方が分からず、行き詰っています。 各テキストフォームは<?php?>の中に記述しています。 初心者のため簡単にできることなのかもしれませんが、ご教授願います。 <form method="POST" action="hyouji.php"> ID: <?php if($_POST["ID"]){ $id = $_POST["ID"]; echo "<input type=text name=ID onChange = submit() value = '$id'>"; ECHO "YES"; }else{ echo "<input type=text name=ID onChange = submit()>"; ECHO "NO"; } ?> Name: <?php echo "<input size=28 type=text name=Name ><br>"?> /*上記、テキストボックスに値を入力*/ <input type=submit name=bottun1 value=入力> </form> <?PHP $host = 'localhost'; $user = 'root'; $pass = 'root'; $db = 'DB'; if($_POST["ID"]){ $id = $_POST["ID"]; $link=mysql_connect($host,$user,$pass) or die("接続エラー"); mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis"); mysql_select_db($db,$link) or die("接続エラー"); $sql="SELECT * FROM test WHERE id = '$id'"; $res=mysql_query($sql,$link) or die("データ抽出エラー"); $rows = mysql_fetch_array($res,MYSQL_ASSOC); echo "<tr>"; echo "<td>".$rows["user_id"]."</td>"; echo "<td>".$rows["customer"]."</td>"; echo "</tr>"; mysql_close($link); }else{ echo "表示データはなし"; } ?> 以上、長文になりましたがよろしくお願いします。

    • ベストアンサー
    • PHP
  • フォームから送信した値とMySQLの値と比較したい

    PHP初心者です。 フォームから送信した値とMySQLの値を比較したいのですが、行き詰まっています。 以下の、”//(1)↓”のところが動作しません。どなたか助けていただけないでしょうか? MYSQLの値は1レコードのみの抽出し、そのカラム”seikai”と、フォームから送信された”rad”と比較したいのです。 <?php //区画 $kukaku = "1"; // ファイルインクルード include("db.php"); // データベース接続 $conn = mysql_connect($host, $user, $pw) or die("データベース接続エラー"); mysql_select_db($db, $conn) or die("接続エラー"); // データ抽出 $sql = "SELECT * FROM $table where id = '$kukaku'"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); // データを受け取る $rad = @$_POST["rad"]; ?> <table width="200" border="1"> <?php while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { ?> <tr> <td>DBの正解<?php echo $row["seikai"]?><br> 送信された答え=<?php echo $rad?> </td> </tr> <?php } ?> </table> <?php if ($rad == ""){ echo "<p><font color=#FF0000><b>答えを選択して下さい!</b>"; echo "<p><a href=\"form.php\">戻る</a>"; exit (); } //(1)↓ if ($seikai == $rad){ echo "<p><font color=#FF0000><b>正解です!</b></font>"; exit (); } // 接続解除 mysql_close($conn); ?>

    • ベストアンサー
    • MySQL
  • DBに入力されている値のセレクトフォームを受け取りたいです

    こんにちは。 たびたびすみません・・・・。 MySQLのテーブルの顧客名をセレクトメニューで 表示できて大喜びしていたのですが・・・。 【登録】→【確認】→【MySQLの該当テーブルに保存】 としたいのです。 テキストエリアで入力した項目は、【確認】画面で <?php echo htmlspecialchars($_POST["siire_no"]) ?> と入力すると、ちゃんと表示されるのですが・・・。 先日教えて頂いた、テーブルからセレクトメニューを作る コードを使わせて頂いて $res=mysql_query("select * from kokyaku"); while ( $rows=mysql_fetch_array($res) ) {   print "<option value=\"".$rows['kokyaku_id']."\">".$rows['kokyaku_name']."\n"; } と書いて、【確認】画面で <?php echo htmlspecialchars($_POST["kokyaku_id"]) ?> とすると、顧客テーブルで指定していた、顧客の番号が 表示されます。 これを、siireテーブルに保存するときの顧客情報 フィールドには、顧客番号で入れたいけれども、 【登録確認】画面では、番号ではなく、顧客名を 表示させたい場合は、どのように記述すれば よいのでしょうか・・・・。 ためしに、 <?php echo htmlspecialchars($_POST["kokyaku_name"]) ?> と書いてみたりしたのですが 【確認】画面で、顧客の欄だけ何も出なくなったり してしまいました。 どうかご指導よろしくお願いいたします。 使用環境:PHP5+MySQL4+Apache

    • ベストアンサー
    • PHP
  • PHP セレクトフォームの連動

    初めての質問です。よろしくお願いします。 今、同一ページ内で二つのセレクトフォームを連動させてライブ写真の表示をさせようとしているのですが、上手くいきません。 内容は、まず1つ目のセレクトにライブ会場名を表示します。そのセレクトをクリックすると、連動してもう一つのセレクトに写真名のリストが表示されるようにします。 今困っているのは一つ目のセレクトをクリックし、二つ目のセレクトの連動はどうにかできたのですが、二つ目のセレクトをクリックすると一つ目のセレクトが初期状態に戻ってしまいます。 質問がヘタクソなので、ソースとURLを書いておきます。ソースが分かりにくいとは思いますがご了承ください。お分かりになる方は分かりやすく教えてください。よろしくお願いします。 URL http://www.officekuwa.com/soulsurvivores/ontheroad/gallery.php データーベースの内容です。 gallery_title(ライブ会場名が登録されたテーブル) id,title,date,active gallery (写真名が登録されたテーブル) id,cid,title,photos,date,active //一つ目のセレクト // ライブ会場名表示 $gallery_query = "select * from gallery_title where id =".$_POST['setID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery = mysql_fetch_assoc($gallery_cat_data); <FORM method="post" name="setForm" action="/soulsurvivores/ontheroad/gallery.php?ID=<?php echo _hs($gallery['id']); ?>"> <SELECT NAME="setID" CLASS="formPulldown" STYLE="width:175px" onChange="document.setForm.submit()"> <option value=''>Select a Photo Set</option> // 会場名表示 $gallery_query = "select * from gallery_title"; $gallery_cat_data = mysql_query($gallery_query, $db); while($gallery_cat = mysql_fetch_assoc($gallery_cat_data)) { $SELECTED = (($_POST['setID'] == $gallery_cat['id'])?" SELECTED":""); <option value="<?php echo _hs($gallery_cat['id']); ?>"<?php echo _hs($SELECTED);?>><?php echo $gallery_cat['title'];?></OPTION> </SELECT> </TD></FORM> <option value="<?php echo _hs($gallery_cat['id']); ?>"<?php echo _hs($SELECTED);?>><?php echo $gallery_cat['title'];?></OPTION> </SELECT> </TD></FORM> } //二つ目のセレクト // 写真タイトル名表示 if ($_SERVER["REQUEST_METHOD"] == "POST") { $gallery_query = "select * from gallery where cid =".$_POST['setID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery_cat = mysql_fetch_assoc($gallery_cat_data); ?> <FORM method="post" name="phoForm" action="/soulsurvivores/ontheroad/gallery.php?ID=<?php echo _hs($gallery_cat['id']);?>&setID=<?php echo _hs($gallery_cat['cid']);?>"> <SELECT NAME="ID" CLASS="formPulldown" STYLE="width:275;background-color:#FFFFFF" onChange="document.phoForm.submit()"> <option value=''>Select a Photo</option> <?php } } if ($_SERVER["REQUEST_METHOD"] == "POST") { $gallery_query = "select * from gallery where cid =".$_POST['setID']."; $gallery_disp_data = mysql_query($gallery_query, $db); while($gallery_disp = mysql_fetch_assoc($gallery_disp_data)) { $SELECTED = ((!isset($_POST['setID']) Or $_POST['setID'] == "none")?" SELECTED":""); ?> <OPTION VALUE="<?php echo _hs($gallery_disp['cid']);?>" <?php echo _hs($SELECTED); ?>><?php echo $gallery_disp['title'];?></OPTION> <?php } } ?> </SELECT> // 写真の表示 <?php if ($_SERVER["REQUEST_METHOD"]=="POST") { $SELECTED = "SELECTED"; if(!isset($_POST['ID'])) { print ""; } else { // 写真の表示 $gallery_query = "select * from gallery where cid =".$_POST['ID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery_cat = mysql_fetch_assoc($gallery_cat_data); ?> <img src="<?php echo _hs($gallery_cat['photos']); ?>" alt="" hspace="0" vspace="6" border="0"> <?php } } ?>

    • 締切済み
    • PHP
  • セレクトフォームで選択した複数の値の挿入

    こんにちは。 標題の通りセレクトフォームで複数の値を渡した時のテーブルへのInsertの方法について悩んでいます。 環境はPHP5.1.2、MYSQL5、Apache2です。 やりたいことはセレクトフォームで複数の値を選択した場合、カンマ区切りにしてひとつのフィールドに格納したいということです。 現在つまづいている部分は、カンマ区切りにした値をInsertする部分です。表示するだけならいいのですが、どうしても最後の値しかInsertできません。(ちなみに挿入する値は数値です。フィールドはカンマを入れるのでVarcharにしています) 下にソースを書きましたが、この書き方だと前の値が上書きされているためだということはわかるのですが、どうしても書き方がわかりません。 できれば $value = $id['0'].",".$id['1'].",".$id['2']....; というような形で挿入したいのです。(ほかに同等の形になるよい方法があればこの形にこだわりません) へたな説明で申し訳ありませんがよろしくお願いします。 <<index.php>> <form action="entry.php" method="post"> <select name="bugID[]" multiple> <option value="id1" name="bugid">AA</option> <option value="id2" name="bugid">BB</option> <option value="id3" name="bugid">CC</option> <option value="id4" name="bugid">DD</option> </select> <input type="submit" value="送信"> </form> <<entry.php>> if($_POST["bugID"]){ foreach($_POST["bugID"] as $value){ $bug_id = $value.","; } } mysql_select_db($DB,$mysql) or die ("Entryデータベースの接続に失敗しました\n".mysql_error()); $query = "insert into ".entryTA." (bug_id)"; $query .= " values('{$bug_id}')"; mysql_query($query,$mysql);

    • ベストアンサー
    • PHP
  • PHPでの検索機能がうまく動きません

    PHPでの検索機能が動かなくて困っています。 <form>で入力した値を、MySQLのWHEREで条件付けて取り出したいのですがうまくいきません....。 最終的に、 1、formに検索ワードを入力 2、DBから条件にあったレコードを持ってくる 3、持ってきた値を表示 という機能にしたいのですが....。 --- --- --- --- --- --- --- --- --- --- --- --- <?php //データベースに接続 mysql_connect('xxx', 'xxx', 'xxx') or die(mysql_error()); mysql_select_db('xxx'); mysql_query('SET NAMES UTF8'); //フォームで送られてきた条件を元にSELECT文を作成 if (!empty($_POST['nm'])) { $q = $_POST['nm']; $sql = 'select * from test_tb where name like "%$q%"'; $record = mysql_query($sql) or die(mysql_error()); } ?> <html> <body> <form action="" method="post">    名前:<input type="text" name="nm">    <input type="submit" name="exec" value="検索"> </form> <?php while($row = mysql_fetch_assoc($record)): ?> <?php echo $row['id']; ?> <?php echo $row['name']; ?> <?php endwhile ?> </body> </html> --- --- --- --- --- --- --- --- --- --- --- --- エラーは表示されないのですが、結果も表示されません。 さまざまなサイトや他の方の質問、MySQLやPHPの本を参考にしたのですが うまくいかなかったのでご質問させていただきました。 プログラミング初心者の上、はじめての質問で不備があると思いますが、 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • フォーム受け渡しからのSELECT

    初めて投稿します。 DreamWeaverを使ってPHP+MySQLでDBを作っております。ログ表示部分まで完成して検索用のhtmlフォームから条件を指定して検索結果のみをSELECTして表示させたいのですが、どうしても全データが表示されてしまいます。 検索フォーム <form method="post" action="view.php"> <input type="text" name="test"> <div align="left"></div> <input type="submit" name="search" value="検索"> </form> ログ表示PHP(view.php) session_start(); if ($_POST['search'] == "") { $wh = $_SESSION['wh']; } else { if ($cupon != "") { $and = ($wh == "") ? ("") : (" and "); $wh .= $and . "test like '%$test%'"; } if ($wh != "") { $wh = "where " . $wh; } $_SESSION['wh'] = $wh; } ~~~~~~~~~~~~~~~ mysql_select_db($database_connTestDB, $connTestDB); $query_rsTestDB = "SELECT * FROM test_db $wh ORDER BY updtime DESC"; $query_limit_rsTestDB = sprintf("%s LIMIT %d, %d", $query_rsTestDB, $startRow_rsTestDB, $maxRows_rsTestDB);......

    • ベストアンサー
    • PHP
  • PHPについて。

    PHPで占いを作っているのですが、ランダム表示にするにはどうすればいいですか。 <html> <head> <title>入力フォーム</title> </head> <body> <center> <?php //接続 $link = mysql_connect("○○○","○○○","○○○"); if(!$link){ die('Connected error !'.mysql_error()); } //DB選択 $db_selected = mysql_select_db('○○', $link); if(!$db_selected){ die('Connected error !'.mysql_error()); } //フォーム入力文字を表現 $○○= $_POST['name']; /* echo $○○.'<br>'; */ //ハッシュ値の取得 $hash = crc32($○○); if($hash < 0){ $hash = 0 - $hash; } /* echo $hash; */ $result = mysql_query("SELECT ○○") or die("sql error !"); $retukazu = mysql_num_rows($result); $kekka = $hash % $retukazu + 1; //文字コード設定 mysql_query("SET NAMES sjis"); $sql = mysql_query("SELECT ○○ = $kekka"); if(!$sql){ die('query_error !'.mysql_error()); } while($row = mysql_fetch_assoc($sql)){ echo '<center><br />あなたはきっと・・・<br /><br /><font color= "Red"><strong>'.$row['Memo'].'</strong></font>です<br />'; } ?> </p> </body> </html>

    • ベストアンサー
    • PHP
  • ページ間の値の受け渡しについて

    緊急でPHPを用いて開発しなければならず、値の受渡し方法が調べても 結果がうまく出来ないために教えて下さい。 説明がうまくできないので、ソースの一部を下記に記載しております。 【keikaku.php】 <?php $link = DB接続 $query = "SELECT (1) , (2) , (3) FROM KEIKAKU WHERE 営業所= '東京'"; $res_result = mysql_query($query,$link); echo ("<form action='keikaku_input.php' method='POST'>"); while($row = mysql_fetch_array($res_result)){  echo ("<table border=1>");  echo ("<tr>");  echo ("<td><input type='radio' name='name' value=''></td>");  echo ("<td>");  echo $row['(1)'];  echo ("</td><td>");  echo $row['(2)'];  echo ("</td><td>");  echo $row['(3)'];  echo ("</td>");  echo ("</tr>"); } echo ("<input type='submit' value='次へ'>"); echo ("</form>"); ?> というSQLで一覧を表示させて、対象行のラジオボタンが選択されると (1)と(2)の値を使い、【keikaku_input.php】で更に別のSQLを実行後に 結果を表示させる事を行ないたいのです。 【keikaku.php】→【keikaku_input.php】へ(1)と(2)の値を渡したい場合 はどのようにすれば良いかご教授願えませんでしょうか?

    • ベストアンサー
    • PHP
  • <select> の<option value>が指定していできません。

    はじめましてチャーシューと申します。 <HTML> <HEAD><TITLE>LOGIN PAGE</TITLE> <?php $db=mysql_connect("localhost","shisan","yu0414") or die("データベースへの接続に失敗しました。"); mysql_select_db("shisan",$db); $rs=mysql_query("SELECT userID,name FROM user order by userID",$db); ?> </HEAD> <BODY> <?php print("<SELECT>"); while($row=mysql_fetch_array($rs)){ print("<option>"); print($row['name']); print("</option>"); } print("</SELECT>"); mysql_free_result($rs); mysql_close($db); ?> </BODY> </HTML> を <HTML> <HEAD><TITLE>LOGIN PAGE</TITLE> <?php $db=mysql_connect("localhost","shisan","yu0414") or die("データベースへの接続に失敗しました。"); mysql_select_db("shisan",$db); $rs=mysql_query("SELECT userID,name FROM user order by userID",$db); ?> </HEAD> <BODY> <?php print("<SELECT>"); while($row=mysql_fetch_array($rs)){ print("<option value="$row['userID']">");←ここを追加しました。 print($row['name']); print("</option>"); } print("</SELECT>"); mysql_free_result($rs); mysql_close($db); ?> </BODY> </HTML> のように変更すると Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\shisan\login.php on line 14というエラーが起きてしまいます。 環境はWindowsXP professional apache,mysql,php5はxamppを使用しています。 ご教授お願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう