2017-11-15 4 views
-4

Ich habe 2 Klassen - db.class.php und user.class.php. Innerhalb der zweiten habe ich zwei Methoden zur Registrierung zugeordnet - register und registerValidation. db Datei ist verantwortlich für die Angabe von DB-Anmeldeinformationen und Initialisierung der Verbindung. Ich möchte meinen Beitrag nicht wirklich verschmutzen, deshalb werde ich dir nur db-Code als link geben, weil ich nicht wirklich denke, dass das Problem dort liegt.php Registrierung nicht auf db Problem

Der Code von register Methode und validation Methode ist:

<?php 

require_once 'token.php'; 

class User 
{ 
    //db and table name 
    private $conn; 
    private $table_name = "users"; 

    // constructor with $db as database connection 
    public function __construct($db) 
    { 
     $this->conn = $db; 
    } 

    public function registerValidation($nick,$email,$password) 
    { 
     if(
      (strlen($nick) < 5 || strlen($nick) > 20) || 
      (strlen($email) < 3 || strlen($email) > 100) || 
      (strlen($password) < 6 || strlen($password) > 50) 
     ) 
     { 
      //$error = 'nick or email or password is wrong length'; 
      //echo json_encode($error); 
      return false; 
     } 
     else 
     { 
      // query to check if email already exists 
      $query = " 
       SELECT 
        * 
       FROM 
        " . $this->table_name . " 
       WHERE 
        id = ? 
        OR 
        email = ? 
       "; 

      // prepare query statement 
      $stmt = $this->conn->prepare($query); 

      // bind params 
      $stmt->bindParam(1, $nick); 
      $stmt->bindParam(2, $email); 

      // execute query 
      $stmt->execute(); 

      //count if there is same 
      $num = $stmt->rowCount(); 

      if ($num > 0) 
      { 
       return false; 
      } 
      else 
      { 
       return true; 
      } 
     } 
    } 

    public function register($nick,$email,$password) 
    { 
     try 
     { 
      $password = password_hash($password, PASSWORD_DEFAULT); 

      $query = " 
       INSERT INTO 
        users(user, user, user) 
       VALUES 
        (?, ?, ?)"; 

      // prepare query statement 
      $stmt = $this->conn->prepare($query); 

      //bind values from user 
      $stmt->bindparam(1, $nick); 
      $stmt->bindparam(2, $email); 
      $stmt->bindparam(3, $password); 

      $stmt->execute(); 

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

Ich habe auch Datei doRegister.php, die für die Client-Seite eine Art Endpunkt ist:

<?php 

if(isset($_POST['submit'])) 
{ 
    if(!empty($_POST['nick']) 
     && !empty($_POST['email']) 
     && !empty($_POST['password'])) 
    { 
     // instantiate database 
     require_once '../config/database.php'; 
     $database = new Database(); 
     $db = $database->getConnection(); 

     require_once '../classes/user.php'; 
     $user = new User($db); 

     if($user->registerValidation($_POST['nick'], $_POST['email'], $_POST['password'])) 
     { 
      $user->register($_POST['nick'], $_POST['email'], $_POST['password']); 
      http_response_code(201); 
     } 
     else 
     { 
      http_response_code(400); 
     } 
    } 
    else 
    { 
     http_response_code(400); 
    } 
} 
else 
{ 
    http_response_code(400); 
} 

Wenn ich http POST-Anfrage senden über Postbote bekomme ich 201(created), aber wenn ich nach localhost/phpmyadmin danach gehe, gibt es keinen neuen Datensatz innerhalb der Benutzertabelle in meiner MySQL-Datenbank. Warum?

201 created via postman no results in db

+0

Ist die Spaltennamen wie (Benutzer, Benutzer, Benutzer) in 'Register ($ Nick, $ E-Mail, $ Passwort) 'Funktion –

+0

Nein, es ist ID, Nick, E-Mail, Passwort, wie Sie auf dem zweiten Screenshot sehen können. – BT101

+0

In der 'Register' -Funktion, auch eine Überprüfung, ob die Einfügeabfrage erfolgreich war – Akintunde007

Antwort

1

Die register Funktion bei Ausführung der insert Anweisung wird auf jeden Fall wieder falsch. Es sieht auch so aus, als wären die Spalten falsch.

 $query = " 
      INSERT INTO 
       users(nick, email , password) 
      VALUES 
       (?, ?, ?)"; 

#before returning true or false do a check on execute() 
return $stmt->execute() === true ? true : false; 

Auch vor den Header 201 zurückkehrt, machen eine Überprüfung der register Funktion zu überprüfen, ob es wahr und nicht falsch ..