这是代码有3个用户,代码只为2个用户运行,条件idLogin = 1和idLogin = 2,我不知道为什么在条件idLogin = 3它做& #39; t work。
<?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>
答案 0 :(得分:0)
我可能错了,但我不认为您可以检查 $ S_SESSION [&#39; myid&#39;] 的bool isset ,同时在同一if语句中检查其内容。我想您可能必须先检查会话是否已设置,然后检查 $ _ SESSION [&#39; myid&#39;] 的值。
试试这个:
if ((!isset($_SESSION['mysesi']) && !isset($_SESSION['myid'])) || $_SESSION['myid'] !='3')
{
echo "<script>window.location.assign('login.php')</script>";
}
您还应该考虑使用PDO objects进行MySQL交互。更重要的是,如果要按照目前的方式使用mysqli,则需要在MySQL查询中使用它们来清理下面的用户输入。
最后,您不应该以纯文本格式存储密码。在将密码存储到数据库之前,有许多哈希算法可用于哈希密码。但是,PHP5.5及更高版本包含password_hash功能,可以让您更轻松。
答案 1 :(得分:0)
我认为错误可能在这里......
if($user==$username && $pass=$password) // here is single `=` sign
它应该像:
if($user==$username && $pass==$password) // double `==` for comparasion