新代码
$count= mysqli_num_rows($result);
if ($count==1){
$row=mysqli_fetch_row($result);
if(($row[1]==$username) && ($row[2]==$password))
{
echo $row[1];
$_SESSION["myusername"]= $username;
$_SESSION["mypassword"]= $password;
header("location: login_success.php");
exit();
} else {
echo "No user found";
}
} else {
echo "No rows selected";
//}
mysqli_close($dbc); // Closing Connection
}
}
?>我修改了代码,但头语句导致它停止。如果我删除标题,它会像预期的那样工作
$username = stripslashes($sent_username);
是罪魁祸首,因为您将获取的用户名保存在$sent_user
而不是$sent_username
中。因为这是你在查询中使用的:
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
其中$username
没有任何意义,如果你回滚,看看它真正持有什么,即$username = stripslashes($sent_username);
,现在你看到罪魁祸首$sent_username
,它在哪里?没有,确实是打错了。
而不是:
$sent_user=$_POST['myusername'];
$sent_password=$_POST['mypassword'];
$username = stripslashes($sent_username);
$password = stripslashes($sent_password);
试试这个:
$sent_user=$_POST['myusername'];
$sent_password=$_POST['mypassword'];
$username = stripslashes($sent_user);
$password = stripslashes($sent_password);
编辑:这应该解决了你的问题,但是有几件事你应该重新检查。
1)头文件的正确语法:
而不是:
header("location:login_success.php");
使用:
header("Location: login_success.php");
2) echo
你的查询看看到底发生了什么,正确的表,正确的列和正确的值正在发送。
3)我怎么能忘记最重要的部分,无论你对会话做什么,总是在你打算使用会话的每个文件的代码开头写session_start();
。
^一个例子:
<?php
session_start();
$host="localhost"; // Host name
$db_username=""; // Mysql username
$db_password=""; // Mysql password
$db_name="test_db_connection"; // Database name
$tbl_name="logintable"; // Table name
$error=''; // Variable To Store Error Message
if (isset($_POST['submit']))
//
删除
echo $row[1];
在header命令上方。头必须总是在向客户端提供任何其他输出之前发生。这是因为在HTTP规范中,报头是第一位的,并且必须采用正确的格式。
如果你试图在PHP中使用Header后,你已经发送了其他内容到客户端,那么它将触发一个警告,因为你已经试图违反HTTP规范。文档是这样说的:
请记住,必须在发送任何实际输出之前调用header(),可以通过普通的HTML标记、文件中的空白行或PHP调用。使用include或require函数或其他文件访问函数读取代码,并且在调用header()之前输出空格或空行是一个非常常见的错误。当使用单个PHP/HTML文件时,也存在同样的问题。
http://php.net/manual/en/function.header.php