0

この投稿の理由は、フォームが更新されたときにほとんどのブラウザで発生する「フォームの再送信エラー」を回避しようとしているためです。

次の例を見てください。

ユーザーはsignpetition.phpというページを表示しており、基本的なHTMLフォームが表示されています。

<div id="sign-errors" style="display: none;">
</div>

<form action="" method="post">
    <input type="submit" name="submit_button" value="sign petition" />
</form>

したがって、ユーザーがsubmitボタンをクリックすると、POSTデータが読み取られて検証されます。

signpetition.php

<?php
    if(isset($_POST['submit_button']))
    {
        // Do some validation

        if($errors == true)
        {
          // What to do here? I want to go back to the last page, but keep the errors. Should I store them in a session variable and then unset them after their use? I feel as though there must be a better solution to this.

            $_SESSION['error'] = "the error";
            header('Location: '. $_SERVER['REQUEST_URI'] , true, 303);
        exit;

        }
        else
        {
            $_SESSION['success'] = "your petition was successfully signed!";
            header('Location: '. $_SERVER['REQUEST_URI'] , true, 303);
        exit;
        }
    }
        ?>

だから、物事を要約すると:

フォームの再送信の問題を回避したいので、コードでヘッダーリダイレクトを使用しています

4

2 に答える 2

0

ユーザーがリダイレクトされている場合は、フォームの再送信は絶対に行わないでください。

それらをにリダイレクトしsubmitted.php、以下を使用します。

if(isset($_SESSION['error'])){ echo'the error';}
else if(isset($_SESSION['success'])){ echo'your petition was successfully signed!');}
else{ echo 'unknown error.'; }
于 2013-01-13T18:34:40.923 に答える
0

これは古いことは知っていますが、1回の使用でSESSIONオブジェクトにメッセージを保存することに関して、元のソリューションに問題はないことを付け加えたいと思います。これは「フラッシュメッセージ」と呼ばれる一般的な方法です。これは、セッションに保存され、1回読み取ると削除されるメッセージです。この手法はRailsによって普及しました。PHPの概要は次のとおりです。

http://www.phpdevtips.com/2013/05/simple-session-based-flash-messages/

于 2017-07-18T15:43:07.477 に答える