在正确的信息通过之前需要提交两次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
条款是好的。
但是,我可以建议一种更简单的方法吗?
您已经在使用$_SESSION
s了。那么,当您可以通过PHP轻松管理会话时,为什么要创建cookie管理的障碍?该值仍可在rsvp.php
页面上访问,浏览器将在关闭时自动“忘记”会话(除非您另有说明)。我提到由于您的代码中的注释:// cookie在浏览器关闭后过期
要使用会话只需分配值,它们只是一个数组。
$_SESSION['first'] = $_POST['first'];
这将释放您目前拥有的9行代码。
以上是关于在正确的信息通过之前需要提交两次PHP表单的主要内容,如果未能解决你的问题,请参考以下文章