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?
Ist die Spaltennamen wie (Benutzer, Benutzer, Benutzer) in 'Register ($ Nick, $ E-Mail, $ Passwort) 'Funktion –
Nein, es ist ID, Nick, E-Mail, Passwort, wie Sie auf dem zweiten Screenshot sehen können. – BT101
In der 'Register' -Funktion, auch eine Überprüfung, ob die Einfügeabfrage erfolgreich war – Akintunde007