我有用户注册表格,收集所有必要的信息。当用户选中“我同意所有条款和条件”框时,启用提交按钮,以便用户可以提交表单。我将此数据发布到另一个执行验证的php页面,如果发现任何错误,则会再次显示注册表单,显示某些必要信息丢失的错误。
问题: 虽然我已经推出以下代码,但是当用户被重定向回注册表时,我无法保留表单的值:
<input type="text" size="40" name="email" value="<?php echo isset($_POST['email']) ? $_POST['email'] : NULL; ?>" />
我正在使用
header("location: form.php");
在我的php页面中发现错误时会进行验证。这条线对我来说是一个问题还是还有什么?我无法弄清楚问题。
修改: 另外,如果任何人可以指导我如何保留通过单选按钮和组合框选择的值,我将感激不尽。
答案 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'] : "" ?>" />