PHP Login

selbst programmieren

Für den Login werden folgende 4 Dinge benötigt

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.

				
					<form method="post">
  <ul>
    <li>
      <label for="username">Benutzername</label>
      <input type="text" id="username" name="username">
    </li>
    <li>
      <label for="password">Passwort</label>
      <input type="password" id="password" name="password">
    </li>
    <li>
      <button type="submit" name="login">Login</button>
    </li>
  </ul>
</form>
<div class="text-danger">
<!-- Hier wird dann die Fehlermeldung angezeigt, wenn der Benutzername oder das Passwort nicht gültig sind -->
      <?php
           if (isset($errorMessage)) { echo $errorMessage;}
       ?>
</div>
				
			

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<br>";
            }
        }
    }
}
				
			

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.

php Logo

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.

Weitere interessante Artikel für Sie