Authentifizierung zu jeder PHP-App mit MySQL hinzufügen
PHP ist eine serverseitige Open-Source-Skriptsprache, die in HTML eingebettet werden kann, um Webanwendungen zu erstellen. Es wird verwendet, um dynamische Webanwendungen zu entwickeln und die Anwendung mit einer Datenbank zu verbinden.
In dieser Anleitung erfahren Sie, wie Sie ein Authentifizierungssystem mit PHP- und MySQL-Datenbanken aufbauen. Wir erwarten, dass Sie die Grundlagen von PHP und MySQL kennen, bevor Sie beginnen.
Erstellen des Layouts mit HTML und Bulma CSS
Das Frontend dieses Projekts wird mit HTML und Bulma CSS erstellt . Bulma CSS ist eines der beliebtesten CSS-Frameworks für die Gestaltung von Webseiten. Sie können Bulma CSS verwenden, indem Sie das minimierte CSS aus dem CDN in Ihre PHP-Datei importieren.
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css">
MySQL-Datenbank integrieren
MySQL ist ein relationales SQL-Datenbankverwaltungssystem, das zum Ausführen von CRUD-Operationen an den Daten verwendet wird. Diese Webanwendung verwendet phpMyAdmin zur Verwaltung der Datenbank.
phpMyAdmin ist ein kostenloses, in PHP geschriebenes Software-Tool, das die Verwaltung von MySQL über das Web abwickeln soll.
Sie können phpMyAdmin installieren, indem Sie einen WAMP-Server auf Ihrem Windows-Rechner (oder XAMPP unter Linux ) einrichten und die folgende URL aufrufen
http://localhost/phpmyadmin
Der Bildschirm sieht so aus:

Erstellen der Datenbank
Sie können die Datenbank entweder über SQL-Abfragen oder über die von phpMyAdmin bereitgestellte GUI erstellen. In dieser Anwendung ist der Name der Datenbank auth, und der Tabellenname ist auch Benutzer. Die Attribute der Tabelle sind ID, Benutzername, E-Mail und Passwort.
So erstellen Sie die Datenbank und Tabelle mit SQL-Befehlen:
CREATE DATABASE auth;
CREATE TABLE users(
id int,
username varchar(255),
email varchar(255),
password varchar(500),
);
Verbinden der App mit der Datenbank
Erstellen Sie eine Datei namens db.php in Ihrem Projektordner, in der Sie Ihre Datenbank verbinden und diese Datei in andere PHP-Dateien importieren, um sie zu verwenden.
Die Verbindung wird mit der Methode mysqli_connect() hergestellt. Diese Methode akzeptiert vier Argumente: den Servernamen, den Benutzer, das Kennwort und den Datenbanknamen.
Sie können die Variable $connection beim Ausführen von Abfragen verwenden, indem Sie die Datei db.php in andere PHP-Dateien importieren.
<?php
$connection = mysqli_connect("localhost", "root", "", "auth") ;
?>
Mit PHP anmelden
Die erste Phase des Aufbaus eines Authentifizierungssystems umfasst die Registrierung oder Registrierung. Das Frontend-Layout der Anmeldeseite hat ein Formular mit einer Aktion , die eine POST-Anfrage auf der Seite stellt. Es hat vier Eingabefelder: Benutzername, E-Mail, Passwort und Passwort bestätigen.
<form class="card m-3 p-6 m-5 container mx-auto" action="./register.php" method="POST">
<h1 class="title is-1 has-text-center">Register Here</h1>
<input class="input is-primary mt-4" type="text" name="username" placeholder="Username">
<?php if ($usernameErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$usernameErrorMsg</p>" ?>
<input class="input is-primary mt-4" type="email" name="email" placeholder="Email">
<?php if ($emailErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$emailErrorMsg</p>" ?>
<input class="input is-primary mt-4" type="password" name="password" placeholder="Password">
<?php if ($passwordErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$passwordErrorMsg</p>" ?>
<input class="input is-primary mt-4" type="password" name="confirm-password" placeholder="Confirm Password">
<?php if ($confirmPasswordErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$confirmPasswordErrorMsg</p>" ?>
<button type="submit" name="submit" class="button is-primary mt-4">Register</button>
<p class="mt-2 text-center">Already have an account ? <a href="./login.php">Login</a></p>
</form>

Die isset () Methode überprüft , ob die Schaltfläche geklickt wird oder nicht, da sie die Register – Taste mit dem $ _POST zugreifen können [] Superglobal.
Zuvor müssen Sie die Datei db.php in die Datei register.php importieren. Es gibt eine Reihe von Variablen, die für die Eingabevalidierung deklariert sind. Sehen Sie sich den Code unten an.
include "./db.php";
$error = "";
$emailErrorMsg = "";
$usernameErrorMsg = "";
$passwordErrorMsg = "";
$confirmPasswordErrorMsg = "";
Eingabevalidierung auf der Registerseite
Bevor Sie mit der Eingabevalidierung fortfahren, müssen Sie mit $_POST[] auf die Werte der Eingabeelemente zugreifen .
Die Methode mysqli_real_escape_string() hilft dabei, Sonderzeichen aus der Zeichenfolge zu entfernen, da sie beim Ausführen von Abfragevorgängen böswillige Aktionen verursachen können.
$username = mysqli_real_escape_string($connection, $_POST["username"]);
$email = mysqli_real_escape_string($connection, $_POST["email"]);
$password = mysqli_real_escape_string($connection, $_POST["password"]);
$confirmPassword = mysqli_real_escape_string($connection, $_POST["confirm-password"]);
if($username == ""){
$usernameErrorMsg = "Please enter your username";
}
if($email == ""){
$emailErrorMsg = "Please enter the email";
}else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$emailErrorMsg = "Please enter a valid email";
}
if($password == ""){
$passwordErrorMsg = "Enter your password";
}
if($confirmPassword == ""){
$confirmPasswordErrorMsg = "Enter confirm password";
}
if(strlen($password) < 6){
$passwordErrorMsg = "Enter a password greater than 6 characters";
}else if($password!=$confirmPassword){
$confirmPasswordErrorMsg = "Password and Confirm Password field should be same";
}

Zunächst prüfen Sie, ob die Felder leer sind oder nicht. Für das E-Mail-Eingabefeld müssen Sie überprüfen, ob der Benutzer eine gültige E-Mail eingegeben hat oder nicht mit der Methode filter_var() . Die Länge des Kennwortfelds sollte größer als 6 sein. Dies sind die grundlegenden Überprüfungen, die Sie beim Erstellen einer Anwendung beachten müssen.
Wenn keine Fehler vorliegen, können Sie mit der Ausführung von Abfragebefehlen für die Datei register.php fortfahren.
if($error == "" && $emailErrorMsg == "" && $passwordErrorMsg == "" && $confirmPasswordErrorMsg == ""){
$query = "SELECT * FROM auth WHERE email = '$email'";
$findUser = mysqli_query($connection, $query);
$resultantUser = mysqli_fetch_assoc($findUser);
if($resultantUser){
$error = "User already exists";
}
$password = md5($password);
$query = "INSERT INTO auth (username, email, password) VALUES('$username', '$email', '$password')";
$insertUser = mysqli_query($connection, $query);
$_SESSION['username'] = $username;
$_SESSION['email'] = $email;
header("location: home.php");
}
Sie müssen eine Abfrage ausführen, die überprüft, ob die E-Mail bereits in der Datenbank vorhanden ist oder nicht. Die Methode mysqli_query() wird verwendet, um alle Abfrageoperationen auszuführen. Das Ergebnis der Abfrage müssen Sie in der Methode mysqli_query_assoc() übergeben . Diese Methode wandelt das Ergebnis in ein assoziatives Array von Zeichenfolgen um.
Wenn der Benutzer bereits existiert, müssen Sie einen Fehler mit der Meldung anzeigen: Benutzer existiert bereits. Andernfalls müssen Sie die Felder in die Datenbank einfügen. Da es keine gute Praxis ist, Passwort-Strings im Klartext zu speichern, wandelt die Methode md5() das Passwort in einen Hash um und speichert es dann.
Sobald der Benutzer in der Datenbank gespeichert ist, müssen Sie den Benutzernamen oder die E-Mail in das Superglobal $_SESSION[] laden und den Benutzer auf die Startseite umleiten.
Ein Blick auf den Startbildschirm
Der Benutzer kann nur auf die Homepage zugreifen, wenn er eingeloggt ist. Auf der Homepage müssen Sie überprüfen, ob die SESSION existiert oder nicht. Wenn kein SESSION- Set vorhanden ist, müssen Sie den Benutzer auf die Anmeldeseite umleiten.

Anmelden mit PHP
In dieser Anwendung meldet sich der Benutzer mit E-Mail und Passwort an. Das HTML-Layout für login.php :
<form class="card m-3 p-6 m-5 container mx-auto" action="./login.php" method="POST">
<h1 class="title is-1 has-text-center has-text-black">Login Here</h1>
<?php if ($error != "") echo " <div class='button is-danger is-light'>$error</div>" ?>
<input class="input is-primary mt-4" name="email" type="email" placeholder="Email">
<?php if ($emailErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$emailErrorMsg</p>" ?>
<input class="input is-primary mt-4" name="password" type="password" placeholder="Password">
<?php if ($passwordErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$passwordErrorMsg</p>" ?>
<button class="button is-primary mt-4" type="submit" name="submit">Login</button>
<p>Don't have an account? <a href="./register.php">Register here</a></p>
</form>

Authentifizieren des Benutzers
Sie müssen die Eingaben ähnlich wie bei der Registrierung des Benutzers validieren.
$email = mysqli_real_escape_string($connection, $_POST["email"]);
$password = mysqli_real_escape_string($connection, $_POST["password"]);
if($email == ""){
$emailErrorMsg = "Please enter the email";
}else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$emailErrorMsg = "Please enter a valid email";
}
if($password == ""){
$passwordErrorMsg = "Enter your password";
}
Sobald keine Validierungsfehler vorliegen, werden die Werte der Eingabefelder in der SQL-Abfrage ausgeführt. Um den Hash-Wert des Passworts zu erhalten, übergeben Sie das Passwort in der Methode md5() .
if($emailErrorMsg == "" && $passwordErrorMsg == ""){
$password = md5($password);
$query = "SELECT * FROM users WHERE email = '$email' AND password='$password'";
$find_user = mysqli_query($connection, $query);
if(mysqli_num_rows($find_user) == 1){
$_SESSION["email"] = $email;
while($row = mysqli_fetch_assoc($find_user)){
$_SESSION["username"] = $row["username"];
}
header("location:home.php");
}else{
$error = "Invalid credentials";
}
}

Nachdem Sie das gehashte Passwort abgerufen haben, übergeben Sie die E-Mail und das gehashte Passwort an die SQL-Abfrage und führen Sie sie mit der Methode mysqli_query() aus .
Wenn Sie das Ergebnis erhalten, müssen Sie es in der Methode mysqli_num_rows() übergeben . Wenn die Methode mysqli_num_rows() den Wert 1 zurückgibt, können Sie den Benutzer authentifizieren.
Speichern Sie die E-Mail und den Benutzernamen in $_SESSION[] und leiten Sie den Benutzer auf die Startseite um.
Den Benutzer abmelden
Die Benutzerauthentifizierung wird mit dem superglobalen $_SESSION[] durchgeführt. Um den Benutzer abzumelden , müssen Sie die SESSION zerstören und den Benutzer auf login.php umleiten .
session_start();
$_SESSION = array();
session_destroy();
header("Location: login.php");
exit;
Ein sicheres Authentifizierungssystem ist wichtig
Sie haben bereits gelernt, ein Authentifizierungssystem mit PHP und MySQL hinzuzufügen. Sie können dieses Projekt auf die nächste Stufe heben, indem Sie erweiterte Funktionen hinzufügen oder dieses System in ein groß angelegtes Projekt wie eine Social-Media-App, eine Blog-Seite oder ein anderes Großprojekt integrieren. Lerne und baue so viel wie möglich Neues.
Möchten Sie mehr über PHP erfahren? Es gibt viele Manipulationen, die Sie mit dem richtigen PHP-Know-how durchführen können.