2016-03-07 49 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

相关问题