- 締切済み
計算結果をPOSTするには?
お世話になります。 $array_sale_price1=array($row["stock1_price"],$row["stock2_price"],$row["stock3_price"]); $sale_price1_max=max($array_sale_price1); $sale_price1_true1=$sale_price1_max * $row["profit1"]; $sale_price1_true=ceil($sale_price1_true1); $sale_price1_true1_not_stock_name=$row["buy_price"] * $row["profit1"]; $sale_price1_true_not_stock_name=ceil($sale_price1_true1_not_stock_name); if (empty($row["stock1_name"]) and empty($row["stock2_name"]) and empty($row["stock3_name"])) { echo"<div class='sale_price1_case2'>"; echo "<input type = \"hidden\" name = \"sale_price1[$row[item_id]]\" value = \""; echo "$sale_price1_true_not_stock_name"; echo "\">"; echo"<p>"; echo "$sale_price1_true_not_stock_name"; echo"</p>"; echo"</div>"; } else { echo"<div class='sale_price1_case2'>"; echo "<input type = \"hidden\" name = \"sale_price1[$row[item_id]]\" value = \""; echo "$sale_price1_true"; echo "\">"; echo"<p>"; echo "$sale_price1_true"; echo"</p>"; echo"</div>"; } $stock1_price_null=0; if (empty($row["stock1_name"])) { echo"<div class='stock_contents_case1'>"; echo "<input type = \"hidden\" name = \"stock1_price[$row[item_id]]\" value =\""; echo $row["stock1_price_null"]; echo "\">"; echo"<p>"; echo "---"; echo"</p>"; echo"</div>"; } else { echo"<div class='stock_contents_case1'>"; echo "<input type = \"text\" name = \"stock1_price[$row[item_id]]\" value =\""; echo $row["stock1_price"]; echo "\" style='width:25px'>"; echo"</div>"; } 中略 //利幅1の設定 echo"<div class='sale_price1_case1'>"; echo "<input type = \"text\" name = \"profit1[$row[item_id]]\" value =\""; echo $row["profit1"]; echo "\" style='width:25px'>"; echo"</div>"; 中略 While文でデータを取得し、配列でデータを渡すことでデータを一括して更新するフォームを作っています。上記のソースような形で、sale_price1を他のデータ(stock1_price stock2_price stock3_price profit1)から計算して求めるフォームを作っているのですが、ボタンを一度押しただけではstock1_price stock2_price stock3_price profit1は更新されますが、計算結果が入るべきデータ(sale_price1)が更新されず、もう1回ボタンを押すと計算結果のデータがMySQLに格納されます。 よくよく考えて見れば、1回目にボタンを押した段階では計算結果(sale_price1)は修正前のstock1_price stock2_price stock3_price profit1で計算された計算結果(sale_price1)がポストされているので修正後の計算結果(sale_price1)がMySQLに格納されないという事が判明したのですが、修正後の値(フォームに新規に入力した値)から計算された値をPOSTするには、どうしたらよいのでしょうか? 色々な事を試してみたのですが、どうもうまくいきません。ご教授いただけましたら幸いです。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- mpx
- ベストアンサー率71% (149/209)
>> フォームの方で計算するという事ではなく、受け取り側のファイルで計算してPOSTするという事でしょうか? $sql.=" sale_price1='".$_POST[sale_price1][$item_id]."',"; の部分を下記のように最新データで再計算後にDBに書込みしては いかがでしょうかということです。 例 $array_sale_price1=array($_POST[sale_price1][$item_id],$_POST[sale_price2][$item_id],$_POST[sale_price3][$item_id]); $sale_price1_max=max($array_sale_price1); $sale_price1_true1=$sale_price1_max * $_POST[profit1][$item_id]; $sale_price1_true=ceil($sale_price1_true1); $sale_price1_true1_not_stock_name=$row["buy_price"] * $_POST[profit1][$item_id]; $sale_price1_true_not_stock_name=ceil($sale_price1_true1_not_stock_name); if (empty($row["stock1_name"]) and empty($row["stock2_name"]) and empty($row["stock3_name"])) { $sale_price1=$sale_price1_true1_not_stock_name; } else { $sale_price1=$sale_price1_true; } $sql.=" sale_price1='".$sale_price1."',"; 注)$row["buy_price"]や$row["stock1_name"]もPOSTされるなら$_POST["buy_price"][$item_id]や$_POST["stock1_name"][$item_id]に置き換えること
- mpx
- ベストアンサー率71% (149/209)
>> 修正後の値(フォームに新規に入力した値)から計算された値を >> POSTするには、どうしたらよいのでしょうか? PHPはサーバーサイドでしか動作しませんので、ブラウザ上で入力された値を計算してPOSTするには、javascriptなどのクライアント側で動作するスクリプトが必要です。 しかし、javascriptはクライアント側で動作する保障ができないので 考え方を変えることを薦めます。 ・クライアント側では、データのみ更新させてPOSTする。 ・サーバー側でPOSTされたデータを計算してからMySQLに格納する
補足
早速ご回答いただきまして、ありがとうございます。 なるほど、考え方を変えるですか・・・。 〉〉・サーバー側でPOSTされたデータを計算してからMySQLに格納する フォームの方で計算するという事ではなく、受け取り側のファイルで計算してPOSTするという事でしょうか? { $sql="update hametome_item set"; $sql.=" sale_price1='".$_POST[sale_price1][$item_id]."',"; $sql.=" sale_price2='".$_POST[sale_price2][$item_id]."',"; $sql.=" sale_price3='".$_POST[sale_price3][$item_id]."',"; 中略 $sql.=" profit1='".$_POST[profit1][$item_id]."',"; $sql.=" profit2='".$_POST[profit2][$item_id]."',"; $sql.=" profit3='".$_POST[profit3][$item_id]."',"; $sql.=" where item_id = ".$item_id; mysql_query($sql); } } 受け取り側のファイルは上記のようなソースになっています。 引き続きご教授いただけましたら幸いでございます。
お礼
もう一度質問内容を考え直して質問してみたいと思いますので この質問はクローズします。 お教えいただきましてありがとうございました。
補足
ご教授頂きまして、ありがとうございます。 お教えいただいたようにやってみたのですが、どうもうまくいかないようです。何かいい方法はないものでしょうか?ご教授いただけましたら幸いです。よろしくお願いします。