保留表单字段详细信息

时间:2013-08-31 09:58:54

标签: php forms retain

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

问题: 虽然我已经推出以下代码,但是当用户被重定向回注册表时,我无法保留表单的值:

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

我正在使用

header("location: form.php");

在我的php页面中发现错误时会进行验证。这条线对我来说是一个问题还是还有什么?我无法弄清楚问题。

修改: 另外,如果任何人可以指导我如何保留通过单选按钮和组合框选择的值,我将感激不尽。

3 个答案:

答案 0 :(得分:1)

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

但是,不要害怕,有一种简单的方法可以达到你想要的效果。

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

因为:HTTP is a stateless protocol.(在继续之前阅读此答案)。

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

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

每当form.php收到请求时,它会检查请求是来自表单提交还是新呼叫。如果是表单提交,则执行验证逻辑。如果发现任何错误,将重新设置页面,并按照您现在尝试执行此操作的方式填充值。 (但是,这次post变量可用,因为没有重定向。)

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

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

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

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

干杯!

答案 1 :(得分:-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%的案例中找到的一种方式。也许这对你不起作用,但至少你现在还有另外一种方法可以考虑:)

答案 2 :(得分:-2)

试试这个。

<input type="text" size="40" name="email" value="<?php echo (isset($_POST['email']) && !empty($_POST['email'])) ? $_POST['email'] : "" ?>" />
相关问题