こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MySQL 5 PHP 5 データの受け渡しについて 困ってます。。

MySQL 5 PHP 5 データの受け渡しについて 困ってます。。

下記内容で困ってます。機能としては

(1)プロダクトテーブルからデータを読み込み表示。
※プロダクトテーブルには商品データが8件登録されています。

(2)注文ボタンが押されたら受注テーブルにデータをカキコミ。

なんですが。。。

プロダクトテーブルから読み込んだデータを受注テーブルに書き込むと

$product_id がいつも8(受注テーブルデータの一番最後の数字)
$product_name  同じ
$product_price 同じ
・・・

になってしまいます。

whileループしているので変数に代入するのも繰り返されて一番最後のデータが

いつも格納されている状態だと思うのですが、この解決策を教えて下さい!

最近始めたばかりで良く理解出来ないので噛み砕いて教えてくれる方お願いします><

<?php
//----------------------------------------
// □:テーブルからデータを読む
//----------------------------------------
$mysql->query("SELECT * FROM products ORDER BY product_id") or die(mysql_error());
while($row = $mysql->fetch()){
$product_id = $row["product_id"];
$product_name = $row["product_name"];
$product_price = $row["product_price"];
echo <<<EOT
<tr>
<td align="center">$product_id<input name="product_id" type="hidden" value="$product_id" size="10" /></td>
<td align="center">$product_name<input name="product_name[$product_id]" type="hidden" value="$new_product_name" size="10" /></td>
<td align="right">$product_price<input name="product_price[$product_id]" type="hidden" value="$new_product_price" size="10" /></td>
<td><input name="new_use_date[$product_id]" type="text" value="$new_use_date" size="20" /></td>
<td><input name="new_use_time[$product_id]" type="text" value="$new_use_time" size="20" /></td>
<td><input name="remarks[$product_id]" type="text" value="$new_remarks" size="40" /></td>
<td><input name="submit_add" type="submit" value="注文する" /></td>
</tr>
EOT;
}
//ここまでwhileループ[終了の閉じカッコ]
?>

投稿日時 - 2010-06-23 11:25:21

QNo.5988948

困ってます

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

上記のソースだけでは全体像がつかめないので、見た印象だけ。

・書き込みの処理の部分が無いので、書き込み処理での問題点が不明
・product_idのフィールド(の名前)が1つしか無いので、product_idの値は一番最後に読み込んだものだけが(formのmethodがpostの場合は)POSTされると思う

投稿日時 - 2010-06-23 12:25:31

補足

回答有難う御座います!

カキコミ処理は。。。

//----------------------------------------
// ■ POSTされたとき
//----------------------------------------
if ($_SERVER["REQUEST_METHOD"]=="POST"){
//--------------------------------
// □ 新規追加
//--------------------------------
if (isset($_POST["submit_add"])){
//--------------------------------
// □ POSTされたデータを取得
//--------------------------------
//新規追加
$no = htmlspecialchars($_POST["usr_no"], ENT_QUOTES);//追加会員番号
$new_order_id = htmlspecialchars($_POST["new_order_id"], ENT_QUOTES);//追加注文番号
$new_product_id = htmlspecialchars($_POST["product_id"], ENT_QUOTES);//追加商品番号
$new_product_name = htmlspecialchars($_POST["new_product_name"][$product_id], ENT_QUOTES);//追加商品名
$new_product_price = htmlspecialchars($_POST["new_product_price"][$product_id], ENT_QUOTES);//追加商品価格
$new_order_date = htmlspecialchars($_POST["new_use_date"][$product_id], ENT_QUOTES);//追加ご利用日
$new_dates = htmlspecialchars($_POST["new_use_date"][$product_id], ENT_QUOTES);//追加ご利用時間
$new_remarks = htmlspecialchars($_POST["remarks"][$product_id], ENT_QUOTES);//追加備考内容
$new_order_date = htmlspecialchars($_POST["order_date"][$product_id], ENT_QUOTES);//追加注文日時
//--------------------------------
// □ SQL文作成
//--------------------------------
if ($error==""){
$sql = "INSERT INTO order_details VALUES($usr_no,'$new_order_id','$new_product_id','$new_product_name','$new_product_price','$new_use_date','$new_use_time','$new_remarks',now())";
$mysql->query($sql)
※エラー処理等は省きます

私も少し考えてみますがもし時間があったら教えて戴けると幸いです。

宜しくお願いします。

投稿日時 - 2010-06-23 12:31:27

このQ&Aは役に立ちましたか?

14人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

POSTデータを取り出してる部分の「$product_id」がどこから来てる値なのか分からないのですが、これは

> $new_product_id = htmlspecialchars($_POST["product_id"], ENT_QUOTES);//追加商品番号

で取り出してる「$new_product_id」では無いのですか?

で、この「$new_product_id」は先にも書いたとおりPOST元では一番最後に読み込んだデータの値しか入ってこないので、これを用いて他のPOSTデータをインデックスすると、どの注文ボタンを押しても一番最後に読み込んだデータ値しか保存されないことになります。

したがって、POSTデータのproduct_idの値を用いてその他のPOSTデータをインデックスして取り出すなら、注文フォームの方で押された注文ボタンに対応するproduct_idをちゃんとPOSTするようにする必要があると思います。

注文の選択をsubmitボタンで行うならvalueの値をそれぞれ変えて区別するとか、あるいはボタンは1つにしてラジオボタンとか選択メニューを使って選択を行うとかが妥当かと思います。
あるいはこのままでproduct_idをボタンで選択された商品の値に変えるにはJavascript等を用いる必要があるかと……

投稿日時 - 2010-06-23 16:29:43

あなたにオススメの質問