错误多用户PHP

时间:2015-12-04 03:09:28

标签: php mysqli

这是代码有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> 

2 个答案:

答案 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