2017-04-11 11 views
1

Ich habe eine mysql-Spalte namens "gebannt" mit dem Wert von 0, wenn sie nicht sind, und einen Wert von 1, wenn sie sind, die innerhalb der Tabelle "Benutzer" ist. Derzeit gibt dieser Code einen Fehler "Falsche Benutzername/Passwort-Kombination!" wenn eine Person einer Sperre aber ich kann nicht herausfinden, wie es zu erhalten, zu sagen „Sie sind verboten“, wenn der Wert von „verboten“ ist 1.Login-System, Benutzer gesperrt php

<?php 

if(isset($_POST['submit'])){ 
    session_start(); 
    // configuration 
    $dbhost  = "localhost"; 
    $dbname  = "login"; 
    $dbuser  = "."; 
    $dbpass  = "."; 

    // database connection 
    $conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $conn->exec("SET CHARACTER SET utf8mb4"); 
    // new data 

    $username = !empty($_POST['username']) ? trim($_POST['username']) : null; 
    $passwordAttempt = !empty($_POST['password']) ? trim($_POST['password']) : null; 

    // query 
    $result = "SELECT id, username, password, banned FROM users WHERE username= :username AND banned = '0'"; 

    $stmt = $conn->prepare($result); 
    $stmt->bindValue(':username', $username); 
    $stmt->execute(); 
    $user = $stmt->fetch(PDO::FETCH_ASSOC); 

    if($user === false){ 
     //Could not find a user with that username! 
     //PS: You might want to handle this error in a more user-friendly manner! 
     $error = "Incorrect username/password combination!"; 
    } else{ 
     //User account found. Check to see if the given password matches the 
     //password hash that we stored in our users table. 

     //Compare the passwords. 
     $validPassword = password_verify($passwordAttempt, $user['password']); 

     //If $validPassword is TRUE, the login has been successful. 
     if($validPassword){ 

     $_SESSION['login_user'] = $username; 
     header("location: home.php"); 
      exit; 

     } else{ 
     $error = "Incorrect username/password combination!"; 
     } 
    } 

} 

?> 
+0

Es ist in der Regel eine gute Idee, um die Dinge zu beseitigen wie ' === false' und stattdessen das "if ($ user)" umkehren und die Reihenfolge der Blöcke umkehren. – tadman

Antwort

3

nicht Sie einen verbotener Scheck in der Abfrage setzen, lassen die Abfrage gibt die Daten aus der Datenbank zurück. Und dann überprüfen Sie die Bedingung, wenn verboten == 1 dann zeigen Sie den Fehler, dass der Benutzer gesperrt ist. Also sollten Sie den Code so etwas wie so sein:

$result = "SELECT id, username, password, banned FROM users WHERE username= :username"; 

$stmt = $conn->prepare($result); 
$stmt->bindValue(':username', $username); 
$stmt->execute(); 
$user = $stmt->fetch(PDO::FETCH_ASSOC); 

if($user === false){ 
    $error = "Incorrect username/password combination!"; 
} else{ 
    if($user['banned'] == '1') 
    { 
       //give the banned error and return; 
    } 
    else 
    { 
      //Do the login stuff 
    } 
0

Es sieht aus wie Sie gerade eine „else if“ müssen in der Mitte gibt ...

if($user === false){ 
    //Could not find a user with that username! 
    //PS: You might want to handle this error in a more user-friendly manner! 
    $error = "Incorrect username/password combination!"; 
} else if ($user['banned'] == 1){ 
    $error = "Hey! You are banned"; 
} else {