2016-05-02 10 views
-2

Ich habe versucht, von Grund auf ein PDO, OOP Benutzer/Register-System in PHP zu machen, und ich steckte in dem Punkt, wo ich nicht verstehe, warum ich es die Handle Anfrage Fehler Trowing ist.Localhost kann nicht Anfrage PDO register Benutzer

Das ist meine index.php mit Login-Datei und registrieren:

<?php 
session_start(); 

//set timezone 
date_default_timezone_set('Europe/Copenhagen'); 

//database credentials 
define('DBHOST','localhost'); 
define('DBUSER','admin'); 
define('DBPASS','Ddy6MUXhtUz3mNpE'); 
define('DBNAME','notes_app'); 

//application address 
define("BASE_URL","/"); 
define("ROOT_PATH",$_SERVER['DOCUMENT_ROOT'] . "/"); 

try { 
    $db_connection = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS); 
    $db_connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 
catch(Exception $e) { 
    echo "Connection failed " . $e->getMessage(); 
    die(); 
} 

include_once('models/user.php'); 
$user = new User($db_connection); 

Und das ist mein Benutzermodell:

<?php 

class User { 
    private $db; 

    function __construct($db_connection) { 
     $this->db = $db_connection; 
    } 

    public function register($username, $password) { 
     try { 
      $crypted_password = password_hash($password, PASSWORD_DEFAULT); 

      $stmt = $this->db->prepare("INSERT INTO users(username, password) VALUES(:user_name, :user_pass)"); 

      $stmt->execute(array(":user_name"=>$username, ":user_pass"=>$crypted_password)); 

      return $stmt; 
     } 
     catch(Exception $e) { 
      echo $e->getMessage(); 
     } 
    } 

    public function login($username, $password) { 
     try { 
      $stmt = $this->db->prepare("SELECT * FROM users WHERE username=:user_name"); 
      $stmt->bindParam(':user_name', $username); 
      $stmt->execute(); 
      $userRow = $stmt->fetch(PDO::FETCH_ASSOC); 

      if($stmt->rowCount() > 0) { 
       if(password_verify($username, $userRow['password'])) { 
        $_SESSION['user_session'] = $userRow['id']; 
        return true; 
       } 
       else { 
        return false; 
       } 
      } 
     } 
     catch(Exception $e) { 
      echo $e->getMessage(); 
     } 
    } 

    public function is_loggedIn() { 
     if(isset($_SESSION['user_session'])) { 
      return true; 
     } 
    } 

    public function redirect($url) { 
     header("Location: $url"); 
    } 

    public function logout() { 
     session_destroy(); 
     unset($_SESSION['user_session']); 
     return true; 
    } 
} 

<?php 
    require_once('inc/config.php'); 

    if($user->is_loggedIn()!="") { 
    $user->redirect('account.php'); 
    } 

    // login 
    if(isset($_POST['login-submit'])) { 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    if($user->login($username, $password)) { 
     $user->redirect('account.php'); 
    } 
    else { 
     $error[] = "Username or Password are not correct!"; 
    } 
    } 

    //register 
    if(isset($_POST['register-submit'])) { 
    $username = trim($_POST['username']); 
    $password = trim($_POST['password']); 

    if($username == "") { 
     $error[] = "You need to specify a username!"; 
    } 
    else if($password == "") { 
     $error[] = "Please add a password!"; 
    } 
    else if(strlen($password) < 6) { 
     $error[] = "Password must have at least 6 characters"; 
    } 
    else { 
     try { 
     $stmt = $db_connection->prepare("SELECT username FROM users WHERE username=:user_name"); 
     $stmt->bindParam(':user_name', $username); 
     $stmt->execute(); 
     // execute(array(':user_name'=>$username)); 
     $row->$stmt->fetch(PDO::FETCH_ASSOC); 

     if($row['username'] == $username) { 
      $error[] = "Sorry, this username is already taken!"; 
     } 
     else { 
      if($user->register($username, $password)) { 
      $user->redirect('index.php?success'); 
      } 
     } 
     } 
     catch(Exception $e) { 
     echo $e->getMessage(); 
     } 
    } 
    } 



?> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>Login/Register</title> 

    <!-- Bootstrap --> 
    <link href="css/bootstrap.min.css" rel="stylesheet"> 
    <link href="css/style.css" rel="stylesheet"> 
    </head> 
    <body> 
    <div class="container"> 
     <div class="row"> 
     <div class="col-md-6 col-md-offset-3"> 
     <div class="panel panel-login"> 
      <div class="panel-heading"> 
      <div class="row"> 
       <div class="col-xs-6"> 
       <a href="#" class="active" id="login-form-link">Login</a> 
       </div> 
       <div class="col-xs-6"> 
       <a href="#" id="register-form-link">Register</a> 
       </div> 
      </div> 
      <hr> 
      </div> 
      <div class="panel-body"> 
      <div class="row"> 
       <div class="col-lg-12"> 
       <?php 
       if(isset($error)) { 
        foreach($error as $error) { 
       ?> 
        <div class="alert alert-danger"> 
         <i class="glyphicon glyphicon-warning-sign"></i> &nbsp; <?php echo $error; ?> 
        </div> 
       <?php 
        // end for each 
        } 
       // end of if statement 
       } else if(isset($_GET['success'])) { ?> 
       <div class="alert alert-info"> 
        <i class="glyphicon glyphicon-log-in"></i> &nbsp; Successfully registered! You can now log in! 
       </div> 
       <?php } ?> 
       <form id="login-form" action="#" method="post" role="form" style="display: block;"> 
        <div class="form-group"> 
        <input type="text" name="username" id="username" tabindex="1" class="form-control" placeholder="Username" value=""> 
        </div> 
        <div class="form-group"> 
        <input type="password" name="password" id="password" tabindex="2" class="form-control" placeholder="Password"> 
        </div> 
        <div class="form-group text-center"> 

        </div> 
        <div class="form-group"> 
        <div class="row"> 
         <div class="col-sm-6 col-sm-offset-3"> 
         <input type="submit" name="login-submit" id="login-submit" tabindex="4" class="form-control btn btn-login" value="Log In"> 
         </div> 
        </div> 
        </div> 
        <div class="form-group"> 
        <div class="row"> 
         <div class="col-lg-12"> 
         <div class="text-center"> 

         </div> 
         </div> 
        </div> 
        </div> 
       </form> 
       <form id="register-form" action="#" method="post" role="form" style="display: none;"> 
        <div class="form-group"> 
        <input type="text" name="username" id="username" tabindex="1" class="form-control" placeholder="Username" value=""> 
        </div> 
        <div class="form-group"> 
        <input type="password" name="password" id="password" tabindex="2" class="form-control" placeholder="Password"> 
        </div> 
        <div class="form-group"> 
        <div class="row"> 
         <div class="col-sm-6 col-sm-offset-3"> 
         <input type="submit" name="register-submit" id="register-submit" tabindex="4" class="form-control btn btn-register" value="Register Now"> 
         </div> 
        </div> 
        </div> 
       </form> 
       </div> 
      </div> 
      </div> 
     </div> 
     </div> 
    </div> 
    </div> 

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
    <!-- Include all compiled plugins (below), or include individual files as needed --> 
    <script src="js/bootstrap.min.js"></script> 
    <script src="js/tabs.js"></script> 
    </body> 
</html> 

Das ist mein config.php ist

Ich habe mehrere Stunden versucht das Problem zu finden aber leider konnte ich es nicht finden, ich kann den var_dump nicht drucken da mein stöbern r empfängt den internen Fehler 500.

+5

Beitrag den entsprechenden Code auf SO, nicht auf externe Websites. –

+0

Was ist der Fehler in den Protokollen? –

+0

** Speichern Sie niemals Nur-Text-Passwörter! ** Bitte verwenden Sie PHP [integrierte Funktionen] (http://jayblanchard.net/proper_password_hashing_with_PHP.html), um die Passwortsicherheit zu behandeln. Wenn Sie eine PHP-Version kleiner als 5.5 verwenden, können Sie das 'password_hash()' [compatibility pack] (https://github.com/ircmaxell/password_compat) verwenden. Stellen Sie sicher, dass Sie [Passwörter nicht umgehen] (http://stackoverflow.com/q/36628418/1011527) oder verwenden Sie einen anderen Bereinigungsmechanismus vor dem Hashing. Wenn Sie dies tun, * ändert * das Passwort und verursacht unnötige zusätzliche Codierung. –

Antwort

2

Das Problem aufgrund der folgenden Zeilen ist:

  • In Ihrer login() Methode der User Klasse,

    if(password_verify($username, $userRow['password'])) { ... 
    
  • Und auf index.php Seite, während der Verarbeitung von Registrierungsformular,

    $row->$stmt->fetch(PDO::FETCH_ASSOC); 
    

So sollte Ihr login() Methode wie folgt sein:

public function login($username, $password) { 
    try { 
     $stmt = $this->db->prepare("SELECT * FROM users WHERE username=:user_name"); 
     $stmt->bindParam(':user_name', $username); 
     $stmt->execute(); 
     $userRow = $stmt->fetch(PDO::FETCH_ASSOC); 

     if($stmt->rowCount() > 0) { 
      if(password_verify($password, $userRow['password'])) { 
       $_SESSION['user_session'] = $userRow['id']; 
       return true; 
      }else{ 
       return false; 
      } 
     } 
    } 
    catch(Exception $e) { 
     echo $e->getMessage(); 
    } 
} 

Und diese Zeile ändern

$row->$stmt->fetch(PDO::FETCH_ASSOC); 

zu

$row = $stmt->fetch(PDO::FETCH_ASSOC); 
+0

Ich hätte keine Antwort auf ablaufende Pastebin Links geschrieben. –

+0

@ Fred-ii- Die Links sind nicht abgelaufen, es funktioniert an meinem Ende. Ich habe die Frage bearbeitet. –

+0

Alle Links Pastebin Links sind eingestellt, gelöscht werden * in 29 Tagen *. Sieh es dir selbst an. –

Verwandte Themen