2015-11-30 26 views
-1

我終於開始將我的登錄系統從MySQLi更改爲Prepared語句。目前我有這個:MySQLi在登錄頁面無法正常工作的情況下準備好的語句

<?php 
session_start(); 
require 'settings.php'; 
if(count($_POST)>0) { 
    $user = $_POST['user_name']; 
    $pass = $_POST['password']; 
    /* Create a new mysqli object with database connection parameters */ 
    $mysqli = new mysqli($host, $mysql_user, $mysql_pass, $db); 

    if(mysqli_connect_errno()) { 
    echo "Connection Failed: " . mysqli_connect_errno(); 
    exit(); 
    } 

    /* Create a prepared statement */ 
    if($stmt = $mysqli -> prepare("SELECT * FROM members WHERE username=?")) { 

    /* Bind parameters 
    s - string, b - blob, i - int, etc */ 
    $stmt -> bind_param("s", $user); 

    /* Execute it */ 
    $stmt -> execute(); 

    /* Bind results */ 
    $stmt -> bind_result($id, $username, $password); 

    /* Fetch the value */ 
    $stmt -> fetch(); 

    $hash = $password; 
$passwordcheck = password_verify($pass, $hash); 
} 
if($hash == $passwordcheck){ 
$_SESSION["user_id"] = $id; 
$_SESSION["user_name"] = $username; 
} else { 
$message = "Invalid Username or Password!"; 
} 
    /* Close statement */ 
    $stmt -> close(); 
} 
if(isset($_SESSION["user_id"])) { 
header("Location:dashboard.php"); 
exit(); 
} 
?> 

問題是,如果我把正確的密碼和用戶名放在它只是把我的登錄頁面。我檢查了我的服務器error_log,並修復了它提供的錯誤,但沒有解決問題。我對準備好的陳述真的很陌生,實際上會使用一些幫助。提前致謝。

如果我回顯出所有的變量,除了初始用戶和傳遞之外,所有的變量都是空的。

在一個側面說明,我MySQLi的結構是這樣的:

id | username | password | showtasks | showblog | superuser 

1 | Administrator | biglonghash | 1 | 1 | 1 

提前再次感謝。

+0

你的問題是更換bind_result?這個代碼不工作或有錯誤? – ashkufaraz

+0

@ashkufaraz nope。沒有錯誤顯示。它只是重定向回登錄頁面。 – LaughingQuoll

+0

什麼是'password_verify'?和'$ username','$ password' – ashkufaraz

回答

0

您設置$ _POST變量

$user = $_POST['user_name']; 
$pass = $_POST['password']; 

bind_result使用這個變量

$stmt -> bind_result($id, $username, $password); 

與此

$stmt -> bind_result($id, $user , $pass); 
+0

但我想從表中獲取用戶名和密碼。不是從那個階段的形式。 – LaughingQuoll