Php 保留表单字段详细信息

Php 保留表单字段详细信息,php,forms,retain,Php,Forms,Retain,我有收集所有必要信息的用户登记表。当用户选中“我同意所有条款和条件”框时,将启用“提交”按钮,以便用户可以提交表单。我将这些数据发布到另一个php页面上,该页面进行验证,如果发现任何错误,注册表将再次显示某些错误,其中缺少一些必要的信息 问题: 当用户被重定向回注册表时,我无法保留表单的值,尽管我输入了以下代码: <input type="text" size="40" name="email" value="<?php echo isset($_POST['email']) ? $

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

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

<input type="text" size="40" name="email" value="<?php echo isset($_POST['email']) ? $_POST['email'] : NULL; ?>" />
当在进行验证的php页面中发现错误时。这条线是不是给我带来了麻烦,还是有其他问题?我想不出这个问题

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

试试这个

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

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

但是,不要害怕,有一个简单的方法可以实现你想要的

首先,请理解重定向后无法访问$\u POST值。如果你想知道为什么

因为:(继续之前请阅读此答案)

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

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

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

若并没有错误,那个么你们将访问者重定向到确认页面等

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

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

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


干杯

如果我使用任何类型的验证,根据经验,请使用
操作=重定向后,将删除Post值。如果发现任何错误,请将其重定向到具有Post值的任何数组的表单页,并填写表单值,否则将出错。您需要调用.php文件。发布更多您的示例,将更容易帮助您。因此,在成功验证之后,我应该重定向到什么链接以及如何重定向?我只是推荐了一种进行验证的方法,接下来您如何处理数据完全取决于您。您是否正在尝试将已验证的数据添加到SQL?然后在同一页面上执行此操作,然后将用户重定向到登录页面。是的,已验证的数据将通过SQL存储到数据库中,我在保存信息方面没有问题。成功验证并将数据保存到数据库后,我想显示一条消息,即您的信息已成功添加到表单所在的同一页面上,并且此信息将显示在一个div中,该div仅在成功验证时可见。那么,根本不需要重定向用户。(甚至更好)。当您验证用户信息并将其添加到数据库中时,只需在表单上方的HTML中添加一个div,其中包含要显示的内容。一种简单的方法是创建一个变量
$isAdded
,并为其赋值
1
。在打印HTML时,如果
$isAdded
为1,则您也可以
回显div。我已将验证代码放在form.php上,并检查是否按下了提交按钮,如果验证已完成且显示了page form.php,如果未按原样显示页面,但我仍然无法保留表单字段的值…:(您好,您的代码永远不会抛出错误,但是,它永远不会实现OP尝试执行的操作。因为OP正在使用重定向到另一个URL,由于HTTP的无状态性质,除非他停止重定向回表单页,否则所有数据都将丢失。是的,这是真的。我想我给出的解决方案更像是一种新方法,而不是真正的方法ly解释了为什么这会起作用,为什么他的不起作用。Sunny解释得更好。你的方法在我看来很好,没有解释。基本上,我们太习惯于做这些事情了,以至于我们从来没有意识到人们在做验证等简单事情时使用的各种技术。
<input type="text" size="40" name="email" value="<?php echo (isset($_POST['email']) && !empty($_POST['email'])) ? $_POST['email'] : "" ?>" />
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
    }
}