※ ChatGPTを利用し、要約された質問です(原文:自ファイルにsubmitしたら、ループ状態になった)
データベース更新後にページがループ状態になる問題
このQ&Aのポイント
質問内容は、特定のページでデータベースが更新された後、ページがループ状態になる問題についてです。
問題の発生原因は、データベース更新後にページが再度表示されることによるループ状態の発生です。
解決策としては、データベース更新後にリダイレクトを行うことでループ状態を回避する方法があります。
自ファイルにsubmitしたら、ループ状態になった
対象ブラウザ:Chrome11, iPhoneのsafari
サーバ側:PHP4.4
HTML5
Console.jsライブラリを使用しデバックした結果、ループ状態になるケースついて質問です。
スクリプト例: 会員ユーザがサーバに対して、自分のメールアドレスに変更をかける
<!DOCTYPE html>
<html lang="ja">
<head>
<script type="text/javascript" src="./Console.js"></script>
<script type="text/javascript" src="./include.js"></script><!-- 関数goAction()が定義されたファイル -->
<script type="text/javascript">
<!-- /* インデントは、全角スペースでやっております */
function wait() {
Console.print("Hello !");
if ( goAction ) {
Console.print("Hello ! goAction ");
if(document.FORM1) {
Console.print("Hello ! FORM1");
return
}
}
setTimeout("wait()", 200);
}
wait();
-->
</script>
</head>
<body>
<?php
if ($_POST['update'] != 'true') {
?>
<form name="FORM1" method="POST">
<input type="hidden" name="update" value="true">
<INPUT type="button" onclick="goAction()" value=" 送信 "><!-- 自ファイルへsubmit()させる 関数goAction() -->
</form>
<?php
}
else
{
/* 省略:POSTさせたデータでDBに対して更新をかけ、成功したら
更新結果をhtml表示する
*/
}
?>
</body>
</html>
上記ページへ初めてブラウザアクセスすると、Console.print()の表示結果、
Hello !
Hello ! goAction
Hello !
Hello ! goAction
Hello ! FORM1
となることは、理解できるのですが。
onclick="goAction()"の実行で、データベースが更新成功した時、
このファイルが再度表示された後、Console.print()の表示結果が、
Hello !
Hello ! goAction
...
のループ状態になってしまいます。
なぜこのような状態が発生するのでしょうか?
ちなみに、関数goAction()は、メールアカウントの文字を正規表現でチェックした後、
document.FORM1.submit(); するだけのものです。
よろしくお願いします。
お礼
ご回答ありがとうございます。 納得できました。 いろいろと確かめて見たいと思います。