- 締切済み
mysql+php リストボックスについて
リストボックスを使ってmysqlのテーブルから データを得たデータをテキストボックスに入れる方法で悩んでいます。 やりたいことはこんな感じです。 [商品A▼]←リストボックス リストボックスの内容は データベースより取得 [230 ]円←テキストボックス mysqlテーブル 商品 値段 商品A 230 商品B 460 商品Aを選ぶと自動的にテキストボックスに値段が 入るようにしたいのですが・・リストボックスの データを拾ってくることはできるのですが、テキスト ボックスに入力することができません。やり方を ご教授お願いします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
深く考えすぎのような気がします。 最初にsqlで情報を読み込んでおき、 セレクトで選択してサブミットするときに 各商品の情報をまとめて投げてやればすむでしょ? まぁ前回同様スルーされそうですが、この手の コーディングはなるべく単純な仕組みにおきかえて 書くと理解がふかまるとおもいます <?PHP if ($_GET["shohininfo"]==""){ print <<<eof <form action="$PHP_SELF"> <select name="shohininfo"> <option value="001,商品A,230">商品A <option value="002,商品B,460">商品B </select> <input type=submit value=check> </form> eof; }else{ $shohin=split(",",$_GET["shohininfo"]); print <<<eof 商品ID:{$shohin[0]}<br> 商品名:{$shohin[1]}<br> 価格:{$shohin[2]}<br> eof; } ?>
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 前で述べた通りJavaScriptを使用しない場合はブラウザ上で何が 行われたか取得できないためにボタンを用意して、それを選択してもらう 必要があります。 <?php // 選択された商品を受け取る $code = $_POST['n']; // どのボタンが押されたか $flg = $_POST['btn']; // 値段を初期化 $price = ""; $select = "<select name=\"n\">\n"; $select .= "<option value=\"\">商品選択\n"; while ( $r=mysql_fetch_array($result) ) { $selected = ""; // 画面を再描画した際に選択内容を保持 if ( $r['CCODE'] == $code ) { $selected = " selected"; } $select .= "<option value=\"{$r['CCODE']}\"$selected>{$r['NAME']}\n"; } $select .= "</select>\n"; if ( $flg == "値段を入力" ) { // 値段を入力ボタンが押された時、受け取った商品コードを使用して // テーブルより情報を取得し、price変数へ代入 // price変数は値段入力フィールドの初期値として使用 $sql = "SELECT PRICE FROM TESTTEST WHERE CCODE='$code'"; $result = mysql_query( $sql ); $r = mysql_fetch_array($result); $price = $r['PRICE']; } else if ( $flg == "登録" ) { // 登録ボタンが押された時 // 便宜上登録にしてあるが、商品選択後に行う処理をここへ print "登録処理"; } ?> <html> <head> <title>商品選択</title> </head> <body> <form action="test.php" name="test" method="post"> <?= $select ?> <input type="submit" value="値段を入力" name="btn"> <br> 値段<input type="text" name="p" value="<?= $price ?>"> <br> <input type="submit" value="登録" name="btn"> </form> </body> 上記のようにすると、「値段を入力」ボタンが押された場合はデータベースより 商品コードを元にして値段を取得します。 取得した値段をテキストフィールドのvalueにセットすることで表示を行います。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 JavaScriptを使用しないで実現しようとすると前に上げた1番の方式になり、 また、コンボボックスを変更した時に自動的に入力することが出来ません。 (コンボボックスを変更したという動作をJavaScriptで拾っている為) JavaScript無しでやる場合は 「値段入力」みたいなボタンを横に表示し、それをユーザに選択させて サーバにコンボボックスの商品コードの選択値を送信し、 その商品コードを使用してテーブルよりその商品の値段を取得して それをPHPにてテキストフィールドのvalueにセットして画面を呼び出します。
- yambejp
- ベストアンサー率51% (3827/7415)
mysqlとjavascriptを切り分けて考えるとわかりやすい かと思います。 ひとまずjavascripで以下のように書きます。 javascriptもオブジェクトとしてデータを管理する とスケーラビリティを確保できます これにあわせてmysql->phpでデータを流し込めば よいでしょう。 <script language=javascript> function setProperty(name,price){ this.name=name; this.price=price; } function changeSelectFunc(obj){ var val=obj.options[obj.selectedIndex].value; if (val==""){ obj.form.shohin_id.value="" obj.form.shohin_name.value="不明" obj.form.shohin_price.value="0" }else{ obj.form.shohin_id.value=val obj.form.shohin_name.value=shohin[val].name obj.form.shohin_price.value=shohin[val].price } } shohin =new Object(); shohin["001"]=new setProperty("商品A",230); shohin["002"]=new setProperty("商品B",460); shohin["003"]=new setProperty("商品C",500); </script> <form> <select onChange="changeSelectFunc(this)"> <option value="">選択して下さい <option value="001">商品A <option value="002">商品B <option value="003">商品C </select><br> ID:<input type="text" name="shohin_id"><br> 商品:<input type="text" name="shohin_name"><br> 価格:<input type="text" name="shohin_price"><br> </form>
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 方法はいろいろあると思いますが、こんな感じで出来ると思います。 <?php // 商品と値段を取得するSQL $sql = ""; // resultに取得した結果が入る $result = mysql_query ( $sql ); $count = 0; $price = array (); // コンボボックス用の文字列生成 $select = "<select name=\"n\" onChange=\"setPrice(this.selectedIndex);\">\n"; $select .= "<option value=\"\">商品選択\n"; while ( $r=mysql_fetch_array($result) ) { $select .= "<option value=\"\">{$r['NAME']}\n"; // 値段配列に取得した値段を代入 $price[$count] = $r['PRICE']; $count ++; } $select .= "</select>\n"; // JavaScript用の配列文字列を生成 $js = "var price = new Array(".implode ( ",", $price ).");\n"; ?> <html> <head> <title>商品選択</title> <script type="text/javascript"> <!-- <?= $js ?> function setPrice ( index ) { if ( index != 0 ) { document.test.p.value = price[index-1]; } else { document.test.p.value = ""; } } //--> </script> </head> <body> <form name="test"> <?= $select ?> 値段<input type="text" name="p"> </form> </body> こんな感じで行えば、商品を選ぶと事前に取得しておいた値段が 動的に入ります。 JavaScript必須となる書き方ですが。
補足
さっそくのご回答ありがとうございます。 javascriptなしでPHPだけでやろうとすると難しいものなのでしょうか?
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 ごめんなさい。読み返したら1の文章おかしかったです。 1.コンボボックスにて商品名が選択されたとき、データベースにアクセスして値段を取得 2.コンボボックス生成時に値段を取得しておいて、商品名が選択されたときに取得済みの値段を表示する 1.は選択するたびにデータベースへのアクセスがあります。 2.はそのページを表示した時のみのアクセスになります。
補足
2番の方法でできれば教えてください。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 値段は動的に選択されたときにデータベースより取得するか、 商品名のコンボボックスに商品名を追加するかどうかで処理がかわってきますが、 どちらの方法を取りますでしょうか?
補足
回答ありがとうございます。 値段のデータは動的に商品を選択されたときに 入力されるようにしたいと考えています。
補足
一番の方法になるとボタンを表示させてやらないといけないのでしょうか? 一番のやり方を詳しくおしえていただけないでしょうか。