2017-05-03 72 views
-2

这是我的登录代码会话没有得到声明

global $connection; 

if (isset($_POST['user_login'])) { 

    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $password= md5($password); 

    $login = mysqli_query($connection, "SELECT * FROM user WHERE email ='{$email}' AND password = '{$password}' "); 
    if(!$login) { 
     die("QUERY FAILED" . mysqli_error($connection)); 
    } 

    if(!$login || mysqli_num_rows($login) == 0) { 

     echo "<div class='alert alert-danger' role='alert'> <strong>Your Username or Password is invalid!</strong></div>"; 

    } else { 
     $_SESSION['user_id'] = $user_id; 
     $_SESSION['email'] = $email; 
     $_SESSION['username'] = $username; 

     header('Location: index.php'); 
    } 
} 

我用的print_r函数来显示所有的会话,但只对会话邮件是越来越声明。为什么没有声明user_id和username?我做错了什么?

+1

你是否开始会话?它看起来不像我 –

+0

您的代码易受[** SQL注入**](https://en.wikipedia.org/wiki/SQL_injection)攻击的影响。你应该使用[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)或[** PDO **](https://secure.php.net/ manual/en/pdo.prepared-statements.php)准备带有绑定参数的语句,如[**这篇文章**]所述(https://stackoverflow.com/questions/60174/how-can-i-prevent-sql步喷射功能于PHP)。 –

+0

MD5不足以进行密码散列。使用['password_hash()'](http://us3.php.net/manual/en/function.password-hash.php)和['password_verify()'](http://us3.php.net/ manual/en/function.password-verify.php)。 –

回答

0
  1. 您可能会忘记在顶部声明session_start();
  2. 看起来你在会话中使用user_idusername,但它们不会从PHP代码中的任何地方获取。所以,你可能会忘记从你的$login响应中获取并使用它们。

这是一个假设,因为你的代码看起来SELECT查询的基础上使用user_idusername

所以,你可以尝试使用此代码,具有从选择查询中使用的所有参数:

session_start(); 
global $connection; 

if (isset($_POST['user_login'])) { 

    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $password= md5($password); 

    $login = mysqli_query($connection, "SELECT * FROM user WHERE email ='{$email}' AND password = '{$password}' LIMIT 1"); 
    if(!$login) { 
     die("QUERY FAILED" . mysqli_error($connection)); 
    } 

    if(!$login || mysqli_num_rows($login) == 0) { 

     echo "<div class='alert alert-danger' role='alert'> <strong>Your Username or Password is invalid!</strong></div>"; 

    } else { 
     // get user_id and username fetched from your Select query 
     while($row = $login->fetch_assoc()) { 
      $_SESSION['user_id'] = $row['user_id']; // assuming user_id as a column 
      $_SESSION['email'] = $email; 
      $_SESSION['username'] = $row['username']; // assuming username as a column 
     } 
     header('Location: index.php'); 
    } 
} 
+0

给予反对票的人至少应该在这里解释原因? :) –

+0

不是我的失望,而是倾销一堆代码并且说“试试这个”,并且为什么改变了什么以及为什么会让答案更好 - 对于OP和未来的读者来说,不是倾销。 – Qirel

+0

@Satish Saini - 谢谢,让它工作。 :)对不起,他们不允许我投票。 – Unknown

-1

当你试图将不initilized变量或空值到会话,会话不提高例外。但是键和值列表,不能添加不初始变量或空值。