Für den Login werden folgende 4 Dinge benötigt
- Datenbank
- PHP Datenbank Connect
- HTML Formular
- PHP Login Abfrage
Die SQL Datenbank
Für den Login muss zwingend der Benutzer in einer Datenbank hinterlegt werden. In diesem Beispiel benutzen wir einen Benutzername und Passwort. Oft wird anstatt des Benutzernamens auch die E-Mail Adresse verwendet.
-- Tabelle User erstellen
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- id primary setzen und username unique
ALTER TABLE `users`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `username` (`username`);
-- auto-increment für id
ALTER TABLE `users`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
Zu Beginn erstellen wir eine neue Tabelle Names ‚users‘ mit 3 Spalten. Einmal für die ID, Benutzernamen und das Passwort. (Die Namen der Spalten sind nur zum Verständnis! Wichtig ist, solche klaren Wörter nicht zu verwenden sondern umzuschreiben wie z. B. pss_wrd)
Als nächsten setzten wir noch die Indexes.
Und zum Schluss aktiviert man für den Primary Key noch das Auto_Increment.
Mit Hilfe von PHPmyAdmin könnt ihr dieses auch bequem mit der Maus zusammenbauen oder diesen SQL Befehl kopieren und ausführen.
In die Tabelle ‚users‘ einen beliebigen Benutzernamen einfügen und dieses als Passwort:
$2y$10$qCgb4MKzbMKAqUU2LOFBQ.wGoAD6yBElFA7V7EPwK.QGCViJjx4mu
Das Passwort bedeutet „Test„.
Das ist ein Hashwert des aktuellen PHP Hash Generator. Bitte aus Sicherheitsgründen niemals Passwörter im Klartext speichern! Bei der Registration darauf achten!
Datenbank Verbindung
Diese Funktion ist notwendig um eine Verbindung zur Datenbank herzustellen. Hier ist es wichtig die geforderten Daten griffbereit zu haben.
Die Funktion kann entweder in die Login PHP Datei oben mit eingebunden werden, oder in eine extra Datei und diese dann per require in das jeweilige Dokument mit eingebunden werden. Das spart viel Code und später auch Arbeit.
Im Code Beispiel wird genau beschrieben wo welche Daten eingetragen werden müssen.
Info: Bei einer lokalen Datenbank per XAMPP ist standartgemäß kein Passwort gesetzt und kann somit leer gelassen werden.
function pdo_connect_mysql()
{
// Hier kommen die MYSQL DB-Connect Daten rein
$DATABASE_HOST = 'localhost'; //Adresse der Datenbank
$DATABASE_USER = 'root'; //Benutzer der Datenbank
$DATABASE_PASS = ''; //Passwort der Datenbank
$DATABASE_NAME = 'login_php'; //Der Name der Datenbank
try {
return new PDO('mysql:host=' . $DATABASE_HOST . ';dbname=' . $DATABASE_NAME . ';charset=utf8', $DATABASE_USER, $DATABASE_PASS);
} catch (PDOException $exception) {
// Bei einem Fehler kommt diese Fehlermeldung
exit('Failed to connect to database!');
}
}
Das HTML Formular
mit <form></form> sagen wir das dies ein Formular ist und grenzen damit alle dazugehörigen Input Felder ein. Alle <input> Felder und der <button> müssen innerhalb des Formular sein. Die Methode muss POST sein, da wir Daten abschicken wollen. Um Daten zu empfangen, würde man GET nutzen .
Das erste <input> ist für den Benutzernamen und das zweite für das Passwort. Dabei ist der Typ des Passwort Feldes wichtig und sollte auf „password“ sein. Das verschleiert das Passwort bei der Eingabe.
Jedes Input Feld und auch der Button brauchen einen Name-Attribut, da PHP dies braucht um den Inhalt auszulesen. Ich habe dafür einmal ‚username‘ für den Benutzernamen und ‚password‘ für das Passwort gewählt.
Der Button dient zum ausführen des Logins.
Nach dem Formular, habe ich ein kleine if Bedingung gesetzt, um später eine kleine Fehlermeldung bei falschen Login zu haben. Dies ist aber nicht für die eigentliche Funktion notwendig.
Die PHP Login Funktion
//In die Variable $pdo wird unsere Datenbanke Verbindungsfunktion ausgeführt
$pdo = pdo_connect_mysql();
//Führt die Abfrage wenn der Button mit dem name "login" betätigt wird
if (isset($_POST['login'])) {
$error = false;
$username = $_POST['username'];
$password = $_POST['password'];
if (!$error) {
$statement = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$result = $statement->execute(array('username' => $username));
$user = $statement->fetch();
//Überprüfung des Passworts
if ($user !== false && password_verify($password, $user['password']){
$_SESSION['userid'] = $user['id'];
header('Location: index.php');
exit();
} else {
$errorMessage = "Der Benutzername oder das Passwort war ungültig
";
}
}
}
}
Sobald der Login Button gedrückt wird, startet die Abfrage in PHP.
Hier werden die Daten aus den Input Feldern per Post in Variablen gespeichert, um mit diese zum verarbeiten verwenden zu können.
Dann wird mithilfe des username der passende Benutzer ausgewählt und anschließend mit der PHP integrierten Funktion „password_verify“ das Passwort verglichen.
Falls dies passt wird die ID des Benutzers in die Session Variable gespeichert um mit dieser dann später arbeiten zu können. Außerdem wird man auf die index.php Seite geleitet.
Falls der Benutzername oder das Passwort nicht passt, erscheint die Fehlermeldung unter dem Eingabeformular.
Fazit und Abschluss
Es ist eine sehr einfache Programmierung. Für einen effektiven Einsatz müssten die Felder noch per Javascript validiert werden. Doch mit einem solchen Wissensstand kann man gut weitermachen und sich ausprobieren. Falls Sie Interesse an einem persönlichen Online Kurs haben, dann kontaktieren Sie mich einfach. Falls Sie generell eine neue Website benötigen dann schauen sie doch mal hier vorbei : Webdesign. Viel Spaß weiterhin beim programmieren.