POST / Redirect / GET with Error handling

时间:2013-01-13 18:32:31

标签: php forms session post-redirect-get

这篇文章的原因是我试图避免表格重新提交错误"大多数浏览器在刷新表单时都会放弃。

采用以下示例:

用户位于名为 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;
        }
    }
        ?>

所以,总结一下:

  

我想避免表单重新提交问题,这就是我使用的原因   我的代码中的标题重定向

2 个答案:

答案 0 :(得分: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.'; }

答案 1 :(得分:0)

我知道这已经过时了,但我想补充一点,关于在SESSION对象中存储消息以供一次性使用的原始解决方案没有任何问题。这是一种称为“Flash消息”的常见做法,它是存储在会话中的消息,在一次读取时会被删除。该技术受到Rails的欢迎。 PHP摘要如下:

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