2017-09-23 2 views
-2

Mon système de connexion fonctionne correctement jusqu'à maintenant. Je peux mettre le nom d'utilisateur et mot de passe correct et il se connectera mais pas vice versa. La seule chose qui ne fonctionne pas correctement est la vérification du statut. Si l'utilisateur a le statut '0', il ne doit pas se connecter. J'ai donc essayé d'imprimer le statut et rien n'a été montré. Puis j'ai fait la même chose avec le password_hash et j'ai obtenu le même résultat (ce qui est bizarre puisque password_verify() n'a pas de problème). L'utilisateur entré le mot de passe imprime donc ceci doit être une chose mysqli_result. De l'aide?Je ne peux pas obtenir msqli_result pour imprimer

include_once($_SERVER['DOCUMENT_ROOT'] . "/php_scripts/db_conx.php"); 

function CheckLogin($username, $password, $db_conx){ 
    time_nanosleep(0, 100000000); 
    $userQuery = $db_conx->prepare("SELECT * FROM users WHERE username = ?"); 
    $userQuery->bind_param('s', $username); 
    $userQuery->execute(); 
    $userResult = $userQuery->get_result(); 

    if($userResult->num_rows == 1){ 
     $password_hash = $userResult->fetch_assoc()['password']; 

     $status = mysqli_fetch_assoc($userResult)['status'];  // $status turns out null 
     echo($status);            // Prints nothing 
     printf("%s\n", $userResult->fetch_assoc()['password']);  // Prints nothing 
     print_r($userResult->fetch_assoc());      // Prints nothing 

     print($password);           //Prints the password correctly 

     if(password_verify($password, $password_hash) && $status != '0'){ 
      //password_verify() works like a charm 
      //Status check is the only thing that does not work 
      return true; 
     } else{ 
      return false; 
     } 

    } 
    return false; 
} 

L'utilisateur a le statut '0', il ne doit donc pas se connecter.

Répondre

1

Vous avancez le curseur de 4 positions mais vous n'avez probablement qu'une seule ligne. Utilisez fetch une seule fois et attribuez-le.

$row = $userResult->fetch_assoc(); 

puis vous pouvez affecter vos variables.

$password_hash = $row['password']; 
$status = $row['status']; 

et ils seront accessibles.

Vous pourriez également juste vérifier l'état de la requête:

SELECT * FROM users WHERE username = ? and status <> 0 

ou

SELECT * FROM users WHERE username = ? and status = 1 
+0

Votre avis a travaillé et maintenant mon script de connexion fonctionne comme un charme. Je vous remercie. –