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

我知道这很旧,但我想补充一点,关于将消息存储在 SESSION 对象中以供一次性使用的原始解决方案没有任何问题。这是一种称为“Flash Messages”的常见做法,它是存储在会话中的消息,在读取一次时会被删除。Rails 使该技术流行起来。PHP总结如下:

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

于 2017-07-18T15:43:07.477 回答