2016-03-07 1 views
1

J'ai une instruction if qui est utilisée avec une page de connexion.Déclaration préparée Mysqli non wokring

J'ai essayé de le convertir en une instruction préparée par mysqli. C'était auparavant juste mysqli normal. Le problème est que quel que soit l'identifiant que j'entre, il continue de dire Id invalide! au lieu de passer à la bonne page.

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

parce que votre stmt est pas un tableau. vous devriez attraper le jeu de résultats dans une variable, puis vérifier avec if. – Deep

Répondre

0

Vous devez lire la documentation de la fonction mysqli_stmt_fetch() (http://php.net/manual/en/mysqli-stmt.fetch.php). Cette fonction renvoie uniquement des booléens en fonction de la réussite de la requête ou non. Vous devez utiliser bind_result() pour renvoyer les valeurs.

EDIT:

Selon les commentaires ci-dessous, ce code devrait fonctionner, vous aviez également retiré l'appel fetch() qui est encore nécessaire:

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

j'ai lier le résultat – user8010

+0

Désolé, mon mauvais, alors $ stmt ne sera pas un tableau, ce sera un entier parce que vous renvoyez une colonne 'id' de la base de données. –

+0

Iv a mis à jour mon code. L'instruction if a été supprimée avec l'autre étant remplacé par défaut. Pourtant, il ne montre toujours que id invalide. – user8010