<?php
session_start();
$root = 'root';
mysql_connect('localhost',$root,'') or die(mysql_error());
mysql_select_db("test_create_database") or die(mysql_error());
$result = mysql_query("SELECT * FROM members");
$row = mysql_fetch_assoc($result);
$username="";
$password="";
$id="";
if(isset($_POST["submit"]))
{
if(isset($_POST["submit"]) && !empty($_POST["username"]) && !empty($_POST["password"]) && !empty($_POST["id"]))
{
if(isset($_POST["username"]) && isset($_POST["password"]) && isset($_POST["id"]))
{ $username = $row["username"];
$password = $row["password"];
$id = $row["id"];
if($username == "John" && $password =="1234" && $id =="1")
{
echo "you're in";
}
else
{
echo "you're out!";
}
}
}
elseif (isset($_POST["submit"]) && (empty($_POST["username"]) || empty($_POST["password"]) || empty($_POST["id"])))
{
echo "enter all fields please!!!!";
}
}
session_destroy();
?>
如果首先正确填写所有字段并按下提交按钮,则“您在...中”文本将打印到网页上,字段中的文本将消失。但是如果我再次刷新页面,即使我调用了session_destroy()函数,打印的文本“你还在”仍然存在。我不明白为什么会议没有被销毁。任何帮助将不胜感激。
答案 0 :(得分:2)
关于session_start()
和session_destroy()
的位不会影响POST变量。正如BugFinder指出的那样,刷新页面通常会重新提交您刚刚提交的数据。这就是为什么'你'在'消息'再次出现。
防止此行为的一种方法是在处理提交的数据后重定向。然后,您可以设置会话变量以跟踪仍需要显示的消息(或者,如果用户是否已登录)。
您的代码看起来像这样:
<?php
session_start();
$root = 'root';
mysql_connect('localhost',$root,'') or die(mysql_error());
mysql_select_db("test_create_database") or die(mysql_error());
$result = mysql_query("SELECT * FROM members");
$row = mysql_fetch_assoc($result);
$username="";
$password="";
$id="";
if(isset($_POST["submit"]))
{
if(isset($_POST["submit"]) && !empty($_POST["username"]) && !empty($_POST["password"]) && !empty($_POST["id"]))
{
if(isset($_POST["username"]) && isset($_POST["password"]) && isset($_POST["id"]))
{ $username = $row["username"];
$password = $row["password"];
$id = $row["id"];
if($username == "John" && $password =="1234" && $id =="1")
{
//do stuff
$_SESSION['message'] = "you're in";
}
else
{
$_SESSION['message'] = "you're out!";
}
}
}
elseif (isset($_POST["submit"]) && (empty($_POST["username"]) || empty($_POST["password"]) || empty($_POST["id"])))
{
$_SESSION['message'] = "enter all fields please!!!!";
}
$selfLink = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$selfLink .= "?" . $_SERVER['QUERY_STRING'];
}
header('location: '.$selfLink);
exit;
}
if (isset($_SESSION['message'])) {
echo $_SESSION['message'];
unset($_SESSION['message']);
}
?>
请注意,重定向到页面本身似乎有点强制(使用$_SERVER['QUERY_STRING']
来获取当前页面的位置)。如果你知道文件名,或者在处理表单输入后重定向到不同的页面,它会更直观地工作。
答案 1 :(得分:0)
isset($ _ POST [“submit”])删除此检查。
提交表单并显式刷新页面后,$ _POST [“submit”]已设置,但如果您手动转到该页面,则不会设置$ _POST [“submit”]。