2016-03-07 99 views
1

我有一個if語句與登錄頁面一起使用。Mysqli編寫的聲明沒有選擇

我一直在試圖將它轉換爲mysqli預處理語句。它以前只是普通的mysqli。

問題是無論我輸入什麼ID,都會說無效的ID!而不是切換到正確的頁面。

if (isset($_POST['login'])) 
{ 
require "connect.php"; 

session_start(); 

if (count($_POST) > 0) 
    { 
    if ($stmt = mysqli_prepare($conn, "SELECT id, Login_ID, Name, User_Role_ID FROM user WHERE Login_ID = ?")); 

    $lid = $_POST["id"]; 

    $stmt->bind_param("i", $lid); 

    $stmt->execute(); 

    $stmt->bind_result($id, $Login_ID, $Name, $User_Role_ID); 

     $_SESSION["Student_DB_ID"] = $id; 
     $_SESSION["Login_ID"] = $Login_ID; 
     $_SESSION["Name"] = $Name; 
     $_SESSION["User_Role_ID"] = $User_Role_ID; 

     switch ($User_Role_ID) 
      { 
     case "2": 
      header("Location: ../views/student/"); 
      break; //Student 
     case "1": 
      header("Location: ../views/admin/"); 
      break; //Admin 
     default: 
       echo "Invalid ID!"; 
      } 

/* close statement */ 
$stmt->close(); 
$conn->close(); 

    } 
} 
+1

因爲你的語句是不是數組。你應該在變量中捕獲結果集,然後檢查條件。 – Deep

回答

0

你需要閱讀文檔的mysqli_stmt_fetch()函數(http://php.net/manual/en/mysqli-stmt.fetch.php)。該函數僅返回布爾值,具體取決於查詢是否成功完成。您需要使用bind_result()來返回值。

編輯:

按照下面的評論,此代碼應工作,你也刪除取()調用,它仍然是必要的:

if (isset($_POST['login'])) { 
    require "connect.php"; 

    session_start(); 

    if (count($_POST) > 0) { 
     if ($stmt = mysqli_prepare($conn, "SELECT id, Login_ID, Name, User_Role_ID FROM user WHERE Login_ID = ?")) { 
      $lid = $_POST["id"]; 

      $stmt->bind_param("i", $lid); 
      $stmt->execute(); 
      $stmt->bind_result($id, $Login_ID, $Name, $User_Role_ID); 
      $stmt->fetch(); 

      $_SESSION["Student_DB_ID"] = $id; 
      $_SESSION["Login_ID"] = $Login_ID; 
      $_SESSION["Name"] = $Name; 
      $_SESSION["User_Role_ID"] = $User_Role_ID; 

      switch ($User_Role_ID) { 
       case "2": 
        header("Location: ../views/student/"); 
        break; //Student 
       case "1": 
        header("Location: ../views/admin/"); 
        break; //Admin 
       default: 
        echo "Invalid ID!"; 
      } 

      /* close statement */ 
      $stmt->close(); 
      $conn->close(); 
     } 
    } 
} 
+0

我有綁定結果 – user8010

+0

對不起,我的不好,然後$ stmt不會是一個數組,它將是一個整數,因爲你從數據庫返回一個'id'列。 –

+0

Iv更新了我的代碼。 if語句已被刪除,其他語句被默認取代。但它仍然只顯示無效的ID。 – user8010

相關問題