- ベストアンサー
PHPで一括更新する方法について教えてください
- PHP+MYSQLでショッピングカートの在庫数を一括修正する方法について教えてください。
- 現在、商品の一覧表をwhile文を使用して表示していますが、一覧表の下に「一括更新」ボタンを配置し、内容を一気に修正してPOSTする方法を知りたいです。
- PHP初心者なので、どのような方法が適切なのか分からない状況です。ご教授いただけると幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
print_r($_POST); の結果が Array ( [server_name] => Array ( [0] => hogehoge.com [1] => agehoge.com 中略 ) [sale_price1] => Array ( [0] => 1980 [1] => 380 中略 ) 中略 ) のようになっているとします。 if(isset($_POST['server_name'])){ foreach($_POST['server_name'] as $item_id=>$server_name) { $sql="update hametome_item set"; $sql.=" server_name='".$_POST['server_name'][$item_id]."',"; $sql.=" sale_price1='".$_POST['sale_price1'][$item_id]."'"; 中略 $sql.=" where item_id = ".$item_id; mysql_query($sql); } echo "レコードの修正が完了しました。"; }
その他の回答 (2)
- mpx
- ベストアンサー率71% (149/209)
>> どの辺がいけないのか分かりません。 少なくとも3箇所はおかしなところが有ります 1.foreach文の中にexitが有るため1回しか実行されない 2.mysql_query($sql);が有るのに$sqlの文法が間違っている 3.foreachの中で1レコードずつ処理しなければならないのに $sqlに全レコード文を1文で書こうとしている 多分他にも多くの間違いが有ると思います。 まず、 server_management_remove.phpの先頭で print_r($_POST); で所望のデータが送信されているか確認しましょう mysql_query($sql);の$sqlを確認して正しくSQL文が必要な数分 正しく生成されているか確認しましょう
補足
お世話になります。 print_r($_POST); で確認してみたところ、希望のデータが送られてきているようです。 if($server_name<>""){ $sql="update hametome_item set foreach($_POST[server_name] as $item_id=>$server_name) { server_name=$_POST[server_name][$item_id]; } foreach($_POST[sale_price1] as $item_id=>$sale_price1) { sale_price1=$_POST[sale_price1][$item_id]; } 中略 where item_id = $item_id"; mysql_query($sql); echo "レコードの修正が完了しました。"; といったように修正してみたのですが、何分配列というものを初めて扱 うためか混乱気味でどうしたらいいのか分かりません。 何度も質問をするような形になってしまい申し訳ないのですが、具体的 にどうすればよいのかご教授いただけましたら幸いです。
- mpx
- ベストアンサー率71% (149/209)
ソースで記述すると長くなるので、概要だけですが 1.whileループをformタグの内側で回す 2.inputタグのnameは全て配列で記述する 例 sale_price1[$row["item_id"]] profit1[$row["item_id"]] server_management_remove.phpでは、 $_POST['sale_price1'][item_idの値] と$_POST['profit1'][item_idの値]に全てのデータが入っているので、 foreach($_POST['sale_price1'] as $item_id=>$sale_price1){ $profit1=$_POST['profit1'][$item_id]; // ここで、$item_id をもとに$sale_price1と$profit1を書換える } 注)上記は動作を説明するためのものです。$_POSTデータは検証した後処理しないとセキュリティ上の問題が発生します
補足
早速のアドバイスを頂き、まことにありがとうございます。 ご教授いただいた内容に伴い修正を行ってみたのですが、どうもうまく いきません。大変お手数かとは存じますが、追加で質問をさせていただ きたく思います。 if($server_name<>""){ $sql="update hametome_item set foreach($_POST[sale_price1] as $item_id=>$sale_price1) { $server_name=$_POST[server_name][$item_id]; $sale_price1=$_POST[sale_price1][$item_id]; $sale_price2=$_POST[sale_price2][$item_id]; $sale_price3=$_POST[sale_price3][$item_id]; $quantity=$_POST[quantity][$item_id]; $real_stock=$_POST[real_stock][$item_id]; $buy_price=$_POST[buy_price][$item_id]; $buy_stock=$_POST[buy_stock][$item_id]; $minimum_sell=$_POST[minimum_sell][$item_id]; $minimum_buy=$_POST[minimum_buy][$item_id]; $stock1_price=$_POST[stock1_price][$item_id]; $stock1_quantity=$_POST[stock1_quantity][$item_id]; $stock2_price=$_POST[stock2_price][$item_id]; $stock2_quantity=$_POST[stock2_quantity][$item_id]; $stock3_price=$_POST[stock3_price][$item_id]; $stock3_quantity=$_POST[stock3_quantity][$item_id]; $profit1=$_POST[profit1][$item_id]; $profit2=$_POST[profit2][$item_id]; $profit3=$_POST[profit3][$item_id]; $sell_char1=$_POST[sell_char1][$item_id]; $sell_char2=$_POST[sell_char2][$item_id]; $sell_char3=$_POST[sell_char3][$item_id]; $buy_char1=$_POST[buy_char1][$item_id]; $category_id=$_POST[category_id][$item_id]; where item_id = $item_id"; mysql_query($sql); echo "レコードの修正が完了しました。"; exit; } といったようなソースを書いてみたのですが、配列というものを初めて 扱ったもので、どの辺がいけないのか分かりません。 低レベルな質問で大変申し訳ないのですがご教授いただけましたら幸い です
お礼
お世話になってます。 お教えいただいた内容を参考に修正を行ってみたところ、意図する動作を させる事が出来ました。 配列を扱ったのは初めてだったのですが、ものすごく勉強になりました。 私の質問に何度もお付き合いいただき、ありがとうございました。