- ベストアンサー
POSTの後のUPDATE文について
- PHPとMySQLを使用した文字列の検索画面から、複数のレコードを修正する際に、対象レコードのみが修正される問題が発生しています。
- 修正の一覧画面では、指定した氏名で複数のレコードが表示されますが、修正を行うと最後のレコードのみが修正されてしまいます。
- 解決方法としては、修正の際に対象レコードのIDを正しく取得しているか確認することや、UPDATE文の条件に氏名の指定を追加することが考えられます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
前回指摘しませんでしたが、 tableタグの記述 formタグの記述 $sql="select * from `m_student` where `stuname`='$simei'"; $ss=mysql_query($sql); while($soso=mysql_fetch_assoc($ss)){ ?> <tr> <td><input type="submit" value="修正" name="sub1"></td> <input type="hidden" name="id" value="<?=$soso['id'];?>"> <td><?=$soso['bankcode'];?></td> <td><?=$soso['d_to'];?></td> </tr> <? } print '</form></table>'; はそもそも、おかしいですよ。これだと表示されるテーブルは、 <table> <form> <tr> <td><input type="submit" value="修正" name="sub1"></td> <input type="hidden" name="id" value="xxxxx"> <td>xxxxx</td> <td>xxxxx</td> </tr> <tr> 繰り返し </tr> </form> </table> だから、$soso['id']以外の値がPOSTされていません。これは削除の時の ソースじゃないですか?いずれにせよこのコードだと最後の1件しか POSTされません。全部処理したいなら<form>と</form>をwhileのループの 中にいれ、ボタンを押す都度、そのレコードを更新するようにすれば、 update.phpをそのまま使えます。以下のように <table> <?php $sql="select * from `m_student` where `stuname`='$simei'"; $ss=mysql_query($sql); while($soso=mysql_fetch_assoc($ss)){ print <<<ROWEND <form action="update.php" method="POST"> <td><input type="submit" value="修正" name="sub1"></td> <input type="hidden" name="id" value=" $soso['id'] "> <td><input type="text" name="bankcode" value=" $soso['bankcode'] "></td> <td><input type="text" name="d_to" value=" $soso['d_to'] "></td> </form> </tr> ROWEND; } print("</table>"); ?> しかしこれだといくつも修正ボタンを押さなければならない。 修正ボタンひとつで、検索結果行全部を更新するためには、両方とも大幅 に改造しなければならない。 つまり<input>タグのname属性を id1,id2,... bankcode1,bankcode2,.... というように動的に増加させながら出力し、 update.phpの方でもpostされたデータを配列に格納して、 データの数だけ、更新のSQLを発行する作りにする必要がありそう。 もっと、簡単なアイデアがあればよいけど...
その他の回答 (1)
- yyr446
- ベストアンサー率65% (870/1330)
$sql="UPDATE m_student SET bankcode = '$bankcode' WHERE id = '$id'"; だとidが$idと一致しているものだけ更新していますよね。 送信フォームが --- <input type="hidden" name="id" value="16"> <input type="hidden" name="id" value="24"> --- ととすると、同じnameがあると、後のnameのvalueがセットされて、 $id=$_POST["id"]の中身は24になっているから、あってます。
補足
早速お返事ありがとうございます。 ご指摘の通り最後のidをPOSTしてしまう確認はとれました。 ただ $sql="select * from `m_student` where `stuname`='$simei'"; $ss=mysql_query($sql); while($soso=mysql_fetch_assoc($ss)){ ?> <tr> <td><input type="submit" value="修正" name="sub1"></td> <input type="hidden" name="id" value="<?=$soso['id'];?>"> <td><?=$soso['bankcode'];?></td> <td><?=$soso['d_to'];?></td> </tr> <? } print '</form></table>'; に変わる構文が思いつきません。 アドバイス頂けると幸いです。
お礼
ありがとうございました。 >修正ボタンひとつで、検索結果行全部を更新するためには、両方とも大幅 >に改造しなければならない。 修正は、1つずつ行う事にします。 自分では、かなりピンチだったので大変助かりました。 重ね重ね御礼申し上げます。