我总是用的 后/重新定向/Get 方法上我的形式。我的形式一般总是提交给自己。然而,当我们中的一个错误形成的,我不要发送任何新的标题。这是这样我就可以很容易地做到这样的东西

<input type="text" name="email" value="<?php echo $this->input->post('email', '') ?>" />

PHP仅仅是一个图书馆功能处理2参数,$_POST关键和默认的价值,如果它不存在。

这意味着如果有人犯一个错误的形式,他们没有补充表格第二次。缺点是,重新载入页面给他们的后的警告在他们的浏览器。

反正是有为了避免这一点,而无需使用的东西用于国家(即饼干、会议、数据库等)

有帮助吗?

解决方案

我觉得要做到这一点的最好办法是用头功能。您可以张贴到什么都文件,你甚至需要自行完成验证,然后用头重定向到回去的形式,如果它失败了。在会话或其他可访问变量存储post'd值,因此可以访问先前输入的数据。

当使用标题( “位置:myscript.php”);确保包括出口();事后否则你仍然会得到一个刷新POST警告。

myscript.php

if($_POST['submit'])
{
    //check for errrors

    if ($error)
    {
        $_SESSION['myPostVars'] = $_POST;
        header("location: myscript.php");
        exit();
    }
}

<form>
    // your form code
</form>

编辑:我刚才注意到您编辑您的问题,以避免使用会话

您可以序列后瓦尔要返回,并把它们在查询字符串(通过头发送()

其他提示

如果不在会话中保存状态,就无法避免这种情况。当您遇到错误时,您可能可以执行以下操作:

  1. 生成一个唯一的id
  2. 复制 $_POST 变量放入由上面的唯一 id 键入的会话中
  3. 像现在一样重定向,但将唯一 ID 作为查询字符串的一部分传递
  4. 更新您的库以在会话中查找此唯一 ID(错误情况),而不是访问 $_POST 直接变量,如果请求中未传递唯一 id 或您要查找的名称不存在,则使用默认值
  5. 在请求结束时从会话中删除唯一的 ID 条目。这可以避免过多的垃圾污染会话。您也可以在请求开始时执行此操作,具体取决于您的图书馆

我想你是说像这样的东西:

function Value($array, $key, $default = false)
{
    if (is_array($array) === true)
    {
        settype($key, 'array');

        foreach ($key as $value)
        {
            if (array_key_exists($value, $array) === false)
            {
                return $default;
            }

            $array = $array[$value];
        }

        return htmlspecialchars($array);
    }

    return $default;
}

<input type="text" name="email" value="<?= Value($_POST, 'email', ''); ?>" />

你也可能想要 阅读本教程.

你基本上做的是正确的。有没有特别好的办法避免“重新发布”的警告。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top