我正在使用下面的PHP,并将其用于确定用户是否已授权访问下一页的表单。
但是,我必须至少填写两次表格,以使信息通过。如果我在第一次尝试中输入正确的信息,它将说出我编写的相应错误语句,然后,如果我将字面意义上的任何内容放入表单中并点击Submit,它将通过。
我可以输入一百万次不正确的信息,但是不会通过,但是如果我输入一次正确的信息,我必须点击“提交”,然后再次填写任何信息,然后再次点击“提交”,然后我将转到下一页。我删除了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\n\n$last\n\n$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>
答案 0 :(得分:0)
Sal,您一定不要着急。首先,让我们了解一下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
之前,它们应该不可用。我相信这会在您的表单中引起怪异的“ bug”(如果您想称呼它)。
要设置Cookie,您可以使用setcookie()
。但这不是您做的。您尝试做的是修改它们的值。这更简单:
$_COOKIE['first'] = $_POST['first'];
// ... and so on
如果您尝试unset()
$_COOKIE
,那么您的if
子句就可以了。
但是,我可以建议一种更简单的方法吗?
您已经在使用$_SESSION
。那么,当您可以通过PHP轻松管理会话时,为什么还要创建cookie管理的障碍呢?该值仍可以在您的rsvp.php
页上访问,并且浏览器将在关闭时自动“忘记”会话(除非您另有说明)。我提到这是因为您的代码中的注释: // cookie在浏览器关闭后过期
要使用会话,只需分配值,它们毕竟是一个数组。
$_SESSION['first'] = $_POST['first'];
这将释放您当前拥有的9行代码。