1

我有收集所有必要信息的用户注册表。当用户选中“我同意所有条款和条件”框时,提交按钮被启用,以便用户可以提交表单。我将此数据发布到另一个进行验证的 php 页面,如果发现任何错误,注册表会再次出现,显示某些错误,缺少一些必要的信息。

问题: 尽管我输入了以下代码,但当用户被重定向回注册表单时,我无法保留表单的值:

<input type="text" size="40" name="email" value="<?php echo isset($_POST['email']) ? $_POST['email'] : NULL; ?>" />

我在用

header("location: form.php");

当在我的进行验证的 php 页面中发现错误时。这条线是给我造成问题还是有其他问题?我无法弄清楚问题所在。

编辑: 此外,如果有人可以指导我如何保留通过单选按钮和组合框选择的值,我将不胜感激。

4

3 回答 3

1

正如许多其他人在评论中指出的那样,您做错了。

但是,不要害怕,有一种简单的方法可以实现您想要的。

首先,了解重定向后您无法访问 $_POST 值。如果你想知道为什么?

因为:HTTP 是一种无状态协议。(在继续之前阅读此答案)。

现在我明白 HTTP 是无状态的。那么,如何维护表单状态?

好吧,通常人们将验证逻辑保持在同一页面上。因此,考虑到您的注册表单位于 form.php ,表单操作将指向 form.php 本身,而不是任何成功页面。

每当 form.php 收到请求时,它都会检查请求是来自表单提交还是新调用。如果是表单提交,则执行验证逻辑。万一发现任何错误,页面将重新发出,并以与您现在尝试相同的方式填充值。(但是,这次 post 变量可用,因为没有重定向。)

如果没有错误,那么您将访问者重定向到确认页面等。

如果请求是第一个请求(即不是来自表单提交)。您可以跳过验证部分并直接发出带有默认值的表单 html。

如果您仍然想知道如何检测请求是否来自表单提交,有一个简单的方法可以做到这一点。在您的表单中,添加一个名为的隐藏字段hdnVar,其值设置为yes或您喜欢的任何内容。然后在对 form.php 的每个请求上,只需检查 $_POST['hdnvar'] 是否存在,如果它存在并且值与您设置的一样,那么请求来自表单提交。

希望我能说清楚。如有任何疑问,请询问:)

干杯!

于 2013-08-31T10:08:41.297 回答
-1

如果我使用任何类型的验证,根据经验,我action="<?php $_SERVER['REQUEST_URI']"会在与表单 IE 相同的页面上使用和处理任何必要的操作

if(isset($_POST['an_expected_input']) {
    // First validate
    if($is_valid) {
        // Do action with the post data
        // Posibly redirect to a confirmation page
    } else {
        // Do whatever needed for feedback to the visitor
        // Add posted values back to the form
    }
}

这是我在 99% 的案例中发现的一种方法。也许它对你不起作用,但至少你现在还有另一种方法要考虑:)

于 2013-08-31T10:12:28.997 回答
-2

尝试这个。

<input type="text" size="40" name="email" value="<?php echo (isset($_POST['email']) && !empty($_POST['email'])) ? $_POST['email'] : "" ?>" />
于 2013-08-31T10:03:44.913 回答