2017-05-03 69 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變量或空值到會話,會話不提高例外。但是鍵和值列表,不能添加不初始變量或空值。