在正确的信息通过之前需要提交两次PHP表单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在正确的信息通过之前需要提交两次PHP表单相关的知识,希望对你有一定的参考价值。

我正在使用下面的php和我用来确定用户是否有权访问下一页的表单。

但是,我必须填写表格至少两次才能获得相关信息。如果我在第一次尝试时输入正确的信息,它会说出我编码的相应错误陈述,然后如果我把任何字面上的任何东西放入表单并点击提交,它将会通过。

我可以输入不正确的信息一百万次而且它不会通过,但是如果我输入正确的信息一次,我必须点击提交然后再次填写表格中的任何信息并再次点击提交,然后我会被带到下一页。我完全删除了if (isset ($_COOKIE)块以查看它是否有所作为,但它做了完全相同的事情。

<?php
include_once "database.php";
session_start();
if (isset($_POST['submit'])) {
    if (isset($_COOKIE['first'])){
        setcookie("first",'',time()-3600,"/");
        setcookie("last",'',time()-3600,"/");
        setcookie("city",'',time()-3600,"/");
    }
    $first=$_POST["first"];
    $last=$_POST["last"];
    $city=$_POST["city"];
    setcookie("first",$_POST["first"],0,"/");//cookie expires after browser closes
    setcookie("last",$_POST["last"],0,"/");//cookie expires after browser closes
    setcookie("city",$_POST["city"],0,"/");//cookie expires after browser closes
    clearstatcache();
    $sql="SELECT * FROM invited WHERE FIRSTNAME='".$_COOKIE['first']."' AND LASTNAME='".$_COOKIE['last']."' AND CITY='".$_COOKIE['city']."'";
    $found=mysqli_query($conn,$sql);
    echo "$first

$last

$city";
    if (mysqli_num_rows($found)){
        $success="<script>window.location.href='rsvp.php'</script>";
    }
    else{
        $fail="ERROR, Could not find";
    }
}
?>

html表格:

        <form action="" method="POST">
            <p>Enter Family Name (as it appears on your invitation): </p>
            <input class="entry" type="text" name="first" placeholder="FIRST NAME" required><br><br>
            <input class="entry" type="text" name="last" placeholder="LAST NAME" required><br><br>
            <input class="entry" type="text" name="city" placeholder="CITY (ONLY)" required><br><br>
            <input type="submit" onclick="getCookie()" name="submit">
        </form>
答案

萨尔,你不能急于这个。让我们首先了解你的setcookie函数实际上做了什么:

它设置了cookie,对吗?当然。

但是,如果您继续阅读第二段,您将理解:

一旦设置了cookie,就可以在下一页加载$_COOKIE数组时访问它们。 Cookie值也可能存在于$_REQUEST中。

所以这两个代码块是浪费的重复代码:

if (isset($_COOKIE['first'])){
    setcookie("first",'',time()-3600,"/");
    setcookie("last",'',time()-3600,"/");
    setcookie("city",'',time()-3600,"/");
}

//...

setcookie("first",$_POST["first"],0,"/");//cookie expires after browser closes
setcookie("last",$_POST["last"],0,"/");//cookie expires after browser closes
setcookie("city",$_POST["city"],0,"/");//cookie expires after browser closes

由于它们在相同的运行时实例中运行,因此在下次加载或您请求的下一个POST之前它们不应该可用。我认为这会在你的表格中引起奇怪的“错误”(如果你想把它称之为)。

要设置cookie,您可以使用setcookie()。但这不是你在做什么。你要做的是修改它们的值。哪个更简单:

$_COOKIE['first'] = $_POST['first'];
// ... and so on

如果你想unset() $_COOKIE然后你的if条款是好的。


但是,我可以建议一种更简单的方法吗?

您已经在使用$_SESSIONs了。那么,当您可以通过PHP轻松管理会话时,为什么要创建cookie管理的障碍?该值仍可在rsvp.php页面上访问,浏览器将在关闭时自动“忘记”会话(除非您另有说明)。我提到由于您的代码中的注释:// cookie在浏览器关闭后过期

要使用会话只需分配值,它们只是一个数组。

$_SESSION['first'] = $_POST['first'];

这将释放您目前拥有的9行代码。

以上是关于在正确的信息通过之前需要提交两次PHP表单的主要内容,如果未能解决你的问题,请参考以下文章

使用 .on 和 .validate 的 jQuery 必须提交两次表单才能验证

jQuery提交表单两次

php避免form表单重复提交

php form提交账户密码 怎么写验证

重复使用代码而不提交表单两次

php submit 提交了两次