2017-06-01 3 views
3

Ich möchte einen Fehler anzeigen, wenn ein Benutzername existiert, aber kein Fehler wird geworfen.php oop überprüfen, ob ein Benutzer existiert?

Die Funktion ist auf der User.php und ich versuche, einen Fehler von dieser Funktion anzuzeigen.

ich referenzierte this, aber es ist nicht relevant für die OOP Weg.

User.php

public function check_user_exists($username) 
{ 
    try{ 
     $stmt = $this->db->prepare("SELECT user_name FROM users WHERE user_name=:username"); 
     $stmt->execute(array(':username'=>$username)); 
     $row = $stmt->fetch(PDO::FETCH_ASSOC); 
     $row['user_name'] == $username; 

    } 

    catch(PDOExeception $e) 
    { 
     echo $e->getMessage(); 
    } 
} 

Index.php

<?php 
session_start(); 

require_once 'User.php'; 
$guest = new User(); 



if($guest->is_logged()) 
{ 
    $guest->redirect('profile'); 
} 


if (isset($_POST['btn_signup'])){ 

    $username = htmlentities($_POST['txt_username']); 
    $unpass = htmlentities($_POST['txt_password']); 
    $password = password_hash($unpass, PASSWORD_BCRYPT, ['cost' => 12]); 
    $unemail = $_POST['txt_email']; 
    $email = filter_var($unemail, FILTER_VALIDATE_EMAIL); 

    $guest = new User(); 


    if($email == ""){ 
     $errors[]= "Enter a Email"; 
    } 

    if($username == ""){ 
     $errors[]= "Enter a Username please"; 

    } 

    if($password == ""){ 
     $errors[]= "Enter a Password"; 
    } 



    if($guest->check_user_exists($username)){ 
     $errors[]= "Username Already Taken"; 
    } 

    if($guest->signup($email,$password,$username)){ 
     $guest->redirect('profile'); 
     die('didnt redirect');  
    } 

    else{ 
     $errors[]= "Invalid Entry"; 
    } 
} 

$title = "Home"; 
require_once 'layouts/header.php'; 


?> 


    <div class="container"> 
     <div class="row"> 
      <div class="col-md-6"> 

      <?php 
      if(isset($errors)) 
      { 
       foreach($errors as $error) 
       { 
        ?> 
        <div class="alert alert-danger"> 
         <i class="glyphicon glyphicon-warning-sign"></i> &nbsp; <?php echo $error; ?> 
        </div> 
        <?php 
       } 
      } 
      else if(isset($_GET['joined'])) 
      { 
       ?> 
       <div class="alert alert-info"> 
         <i class="glyphicon glyphicon-log-in"></i> &nbsp; Successfully registered <a href='index.php'>login</a> here 
       </div> 
       <?php 
      } 
      ?> 

       <h1>Sign Up</h1> 




       <form action ="" method="POST"> 
        <div class="form-group"> 
        <label for="Email">Email address</label> 
        <input type="email" class="form-control" aria-describedby="emailHelp" name="txt_email" placeholder="Enter email"> 
        </div> 

        <div class="form-group"> 
        <label for="Username">Username</label> 
        <input type="text" class="form-control" aria-describedby="emailHelp" name="txt_username" placeholder="Enter Username"> 
        </div> 


        <div class="form-group"> 
        <label for="Password">Password</label> 
        <input type="password" class="form-control" aria-describedby="emailHelp" name="txt_password" placeholder="Enter password"> 
        </div> 


        <button type="submit" name="btn_signup" class="btn btn-primary">Submit</button> 
       </form> 

      </div> 
     </div> 
    </div> 


</body> 
</html> 
+3

Sie geben mit Ihrer Funktion nichts zurück. – Qirel

+0

** WARNUNG **: Verwenden Sie keine 'Htmlentities' für Benutzereingaben, die Sie in der Datenbank speichern. Diese Funktion soll verwendet werden, wenn Sie Benutzerdaten im HTML-Kontext anzeigen ** nur **, nicht willkürlich. Sie möchten, dass die in Ihren Datensätzen gespeicherten Daten so neutral und roh wie möglich sind. Wenn und wenn Sie in HTML anzeigen, rufen Sie 'htmlentities' für diesen Inhalt auf. Wenn Sie es in einem JavaScript- oder JSON-Kontext anzeigen, gibt es dafür auch spezielle Escape-Funktionen. – tadman

Antwort

1
public function check_user_exists($username) 
{ 
    try{ 
     $stmt = $this->db->prepare("SELECT user_name FROM users WHERE user_name=:username"); 
     $stmt->execute(array(':username'=>$username)); 
     return $stmt->fetchColumn() > 0; // fetchColumn return the number of rows selected 
    } 

    catch(PDOExeception $e) 
    { 
     echo $e->getMessage(); 
    } 
} 
+0

das funktioniert, danke, ich verstehe wirklich nicht, wie Rückkehr wahr oder falsch oder etc funktioniert auch, aber jetzt weiß ich .... ich denke – BARNOWL

+1

Keine Magie, nur Ausdruck Auswertung. Diese 'return $ row ['user_name'] == $ username;' ist die Rückgabe der $ name ['user_name'] == $ username; ', die ein boolescher Wert ist. Was Sie in if-Anweisungen schreiben, sind nur Ausdrücke, die einen booleschen Wert haben. Und wenn Sie einen Datenwert haben, können Sie ihn zurückgeben. –

+1

Sie müssen nicht wirklich 'return $ row ['user_name'] == $ username;' though. Sie erzielen den gleichen Effekt, wenn Sie die Eingabe mit dem Ergebnis der Abfrage vergleichen. Sie können jedoch nur prüfen, ob etwas abgerufen wurde. 'fetch()' gibt false zurück, wenn keine Zeilen zurückgegeben wurden. – Qirel

1

Ihre Funktion nicht zurück tatsächlich oder irgendetwas tun. Gib das Ergebnis von fetch() zurück, wenn es wahr zurückgibt - ein Ergebnis wurde gefunden. Wenn es false zurückgibt, gab es keine Zeile, die mit dem Benutzernamen übereinstimmt. Sie müssen danach nichts mehr überprüfen, da die Methode fetch() nur dann wahr ist, wenn ein Ergebnis gefunden wurde.

für das bereinigte Ihrer Funktion wie diese auch

public function check_user_exists($username) { 
    try{ 
     $stmt = $this->db->prepare("SELECT user_name FROM users WHERE user_name=:username"); 
     $stmt->execute(array(':username' => $username)); 
     return $stmt->fetch(PDO::FETCH_ASSOC); 
    } catch(PDOExeception $e) { 
     echo $e->getMessage(); 
    } 
} 

aussehen würde, ist es nicht eine gute Idee, um Ausgabefehler direkt (auf einer Test-/Entwicklungsumgebung seiner Ordnung, aber auf einer Live-Umgebung sollten Sie sich einloggen es (error_log()) statt.

+0

Danke, das ist auch gut – BARNOWL

+1

Sie müssen nicht überprüfen $ Zeile ['Benutzername]' == $ Benutzername; 'entweder (wie die andere Antwort vorschlägt), ist das Ergebnis von' fetch() 'alles was Sie brauchen ;-) – Qirel

+0

danke, du hast es funktioniert :) – BARNOWL

Verwandte Themen