这是一个有3个用户的代码,该代码只为2个用户运行,它处于idLogin=1和idLogin=2的条件下,我不知道为什么在idLogin=3的条件下它不起作用。
<?php
error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));
$username = $_POST['username'];
$password = $_POST['password'];
$login = $_POST['login'];
if (isset($login)) {
$mysqli = new mysqli("localhost", "root", "", "loginda");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}
$res = $mysqli->query("SELECT * FROM login where username='$username' and password='$password'");
$row = $res->fetch_assoc();
$idLogin = $row['id_login'];
$user = $row['username'];
$pass = $row['password'];
$type = $row['type_login'];
if ($user == $username && $pass = $password) {
session_start();
if ($idLogin == "1") {
$_SESSION['mysesi'] = $user;
$_SESSION['myid'] = $idLogin;
echo "<script>window.location.assign('admin.php')</script>";
} elseif ($idLogin == "2") {
$_SESSION['mysesi'] = $user;
$_SESSION['myid'] = $idLogin;
echo "<script>window.location.assign('index.php')</script>";
} elseif ($idLogin == "3") {
$_SESSION['mysesi'] = $user;
$_SESSION['myid'] = $idLogin;
echo "<script>window.location.assign('index2.php')</script>";
} else {
?>
这是index2.php 的代码
<?php
session_start();
if (!isset($_SESSION['mysesi']) && !isset($_SESSION['myid'])=='3')
{
echo "<script>window.location.assign('login.php')</script>";
}
?>
<!DOCTYPE html>
<html lang="en">
..........
</html>
我认为这里可能有错误。。。
if($user==$username && $pass=$password) // here is single `=` sign
它应该像:
if($user==$username && $pass==$password) // double `==` for comparasion
我可能错了,但我不认为您可以检查boolisset是否存在$S_SESSSION['myid'],同时在同一if语句中检查其内容。我认为您可能必须首先检查会话是否已设置,然后检查$_SESSION['myid']的值。
试试这个:
if ((!isset($_SESSION['mysesi']) && !isset($_SESSION['myid'])) || $_SESSION['myid'] !='3')
{
echo "<script>window.location.assign('login.php')</script>";
}
您还应该考虑将PDO对象用于MySQL交互。更重要的是,如果你要像现在这样使用mysqli,你需要在MySQL查询中使用它们来净化下面的用户输入。
最后,您不应该将密码以明文形式存储。在将密码存储到数据库中之前,有许多哈希算法可用于对密码进行哈希。不过,PHP5.5及更高版本包含password_hash功能,让您的操作更轻松。