Wie programmiert man einen Website-Login mit PHP?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hallo,

dafür braucht's eine Datenbank und ein bisschen Code.

Hier mal ein Schritt-für-Schritt-Guide, wie ich das früher umgesetzt habe (heute aber nicht mehr empfehlen würde. Ich rate zur Verwendung des Frameworks Laravel).

1. connection.php

Um erstmal die Verbindung zum Datenbankserver sicherzustellen, würde ich mit der Datei connection.php beginnen.

<?php
define('DB_SERVER', 'hostname');
define('DB_USERNAME', 'database_username');
define('DB_PASSWORD', 'database_password');
define('DB_DATABASE', 'database');
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);

Da passiert erstmal nichts weiter, als dass die Daten der Datenbank festgelegt werden. In der Variable db wird die Verbindung aufgebaut (Datenbank-Objekt).

2. login.php

login.php wird das Script, das den Login handlet. Wir laden die gesendeten Daten und vergleichen sie mit den Daten in der Datenbank:

(Script auf paste.bin leider nicht mehr verfügbar. Siehe Hinweis unten!)

Theoretisch funktioniert es damit schon, da nun Daten abgefragt werden können. Nur können sie nicht eingegeben werden, da die Seite mit dem Loginformular fehlt. Das erweist sich aber nicht als schwierig.

Du musst darauf achten, dass die Namen der input-Tags, mit denen im Code übereinstimmen ($username = $_POST['username'] → Angabe in eckiger Klammer entspricht dem Namen des input-Tags).

Füge dem Dokument noch folgendes Snippet hinzu, um zu checken, ob der User schon eingeloggt ist. Falls er schon eingeloggt ist, wird das Ziel in der login.php angesteuert.

<?php
include('login.php'); 
// login.php einbinden

if ((isset($_SESSION['username']) != '')) {
  header('Location: home.php');
}
3. check.php

Diese Datei fügen wir einfach jeder Seite per include hinzu, die durch das Loginsystem abgesichert sein soll.

<?php
include('connection.php');
session_start();

$user_check=$_SESSION['username'];
$ses_sql = mysqli_query($db,"SELECT username FROM users WHERE username='$user_check' ");

$row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC);

$login_user = $row['username'];

if(!isset($user_check)){
  header("Location: gate.php");
}
?>

Den Seiten fügst du dann folgendes Snippet hinzu:

<?php
include('check.php');
?>
4. logout.php

Natürlich sollen sich die User auch wieder ausloggen können. Das klappt wie folgt:

<?php
session_start();
if(session_destroy()){
  header("Location: index.php");
}

Wir rufen die laufende Session auf und zerstören sie dann einfach. Folglich ist der Benutzer nicht mehr eingeloggt.

5. Das Formular...

...ist ja nicht wirklich schwer, hier ein simples Beispiel:

<form method="post">
  <label>Benutzername: <input type="text" name="username"></label>
  <label>Passwort: <input type="password" name="password"></label>
  <button type="submit" name="submit">Anmelden</button>
</form>

Da wir einen POST-Request durchführen, muss in "method"-Attribut auch POST stehen. Sonst wird es als GET-Request behandelt. Das Action-Attribut muss nicht gesetzt werden, da der Trigger in Punkt 2 schon am Anfang des Dokuments gesetzt wurde (durch Einbindung der login.php-Datei).

Diese Methode ist weder sehr performant, noch sicher. Es ist ein Übungsprojekt, der Realität sollte ein geeignetes App Routing verwendet werden!

Bei weiteren Rückfragen einfach melden. :-)

Liebe Grüße & viel Erfolg

Woher ich das weiß:Berufserfahrung – Software Engineer
Qualistator 
Fragesteller
 19.02.2017, 12:25

Wie bekomme ich beim Microsoft SQL Server Managment Studio die anmeldedaten für die Datenbank?

0
Niklas  19.02.2017, 16:36
@Qualistator

Habe noch nie damit gearbeite, aber die müsstest du doch irgendwo selbst festlegen könnnen.

0
BollerwagenXY  07.04.2020, 11:32

@Savix hast du zufällig den Code vom Pastebin noch. Würde das auch gerne benutzen, aber das Pastebin ist nicht mehr verfügbar!

0
Niklas  07.04.2020, 13:10
@BollerwagenXY

Hi, nein, das Script habe ich leider nicht mehr. Aber ich rate dir sowieso dazu, es mit einem Framework umzusetzen.

Falls nicht, das sollte helfen: In der login.php fragst du zunächst ab, ob das Login-Formular abgesendet wurde. Falls ja, speicherst du die Werte in zwei Variablen (meinetwegen $username und $password), rufst den passenden Datensatz aus der Datenbank auf und vergleichst dann das eingebene Passwort mit dem aus der Datenbank.

<?php
session_start();

// Ist der Nutzer bereits eingeloggt?
if(!$_SESSION["username"]) {
  // Prüft ob das Formular gesendet wurde
  if(isset($_POST["submit"])) {
    // Benutzername aus dem Formular
    $username = $_POST["username"];
  
    // Password aus dem Formular
    $password = $_POST["password"];
  
    // Hier kommt die SQL-Abfrage
    // ...
  
    // Hier der Vergleich der Passwörter
    if($password = $passwordFromDatabase){
      // Weiterleitung
    }else{
      print("Das Passwort ist falsch!");
    }
}else{
  print("Der Nutzer ist bereits eingeloggt!");
}
?>

Liebe Grüße

0

Ich habe mir auch schon einen SQL Server erstellt und SQL Server Managment Studio installiert.

Das ist toll. Dann hast du ja schon mal eine Grundlage für eine neue Datenbank, die du noch erstellen musst. In dieser würde ich die Logindaten speichern.

Ich weiß auch, dass ich dafür auch PHP brauche. Brauche ich dann einen PHP server?

Einen Server benötigst du definitiv, andernfalls könntest du deine Webseite nicht im Internet präsentieren. An PHP bist du nicht zwingend gebunden. Es ist auch möglich, mit anderen Programmiersprachen auf Serverseite zu arbeiten. Ein paar Möglichkeiten liste ich einmal auf:

  • Das ASP.NET-Framework (mit C#/VB.NET) wird von einem IIS- oder Apache-Webserver unterstützt
  • Für PHP, Perl, Ruby, Python benötigst du einen Apache Webserver
  • Für Java benötigst du Apache Tomcat oder Glassfish
  • Du kannst dir mit node.js einfach einen Webserver programmieren. Ein simples Beispiel findest du auf der offiziellen Seite.

Ich wäre sehr dankbar darüber wenn mir jemand erklären könnte wie das geht (...)

Die Grundlagen der Programmierung musst du dir über eigene Recherche aneignen. Der beste Rat an dieser Stelle ist, sich nach passender Literatur umzuschauen und die offiziellen Dokumentationen von Sprachen wie PHP zu nutzen.

Eine kurze Erklärung, wie ein Login funktioniert, könnte diese sein:

Über Eingabefelder eines Formulars gibt der Nutzer seine Daten ein. Sobald der Nutzer diese durch Versenden des Formulars bestätigt, wird ein HTTP Request ausgelöst, der die Daten vom Browser (Client) zum Server übersendet. Der Server nimmt den Request an, verbindet sich mit der Datenbank und veranlasst diese, nach den Eingabedaten zu suchen. Das Ergebnis wird vom Server verarbeitet (z.B. entschieden, ob eine Fehlermeldung zurückgeben oder der Nutzer weitergeleitet werden soll) und als Response an den Client zurückgeschickt. Praktischerweise sollte im Anschluss eine Session gestartet werden, wenn der Login erfolgreich war. So kann der Server bei nachfolgenden Requests verifizieren, ob der Nutzer noch immer angemeldet ist oder nicht.

(...) und am besten eine funktionierendes Loginscript mitliefert.

Das wäre zu viel Aufwand, der noch nicht einmal leistungsgerecht entlohnt werden würde.

Niklas  18.02.2017, 17:57

Arbeitsteilung - du hast die Einleitung verfasst, ich das Skript vorgegeben. ;-)

@Qualistator: jetzt haste jeden Input, den du für den Start in die Programmierung brauchst, daher... Feuer frei!

0
ChBonkowski  19.02.2017, 08:58

Einen kleinen Punkt würde ich noch ergänzen. 

Ein Login sollte eigentlich dann auch über HTTPS, also verschlüsselt genutzt werden. Damit Username/Passwort halt nicht im Klartext über das Internet übertragen werden. Insofern braucht man noch ein Zertifikat und einen Server der damit umgeht. 

2
Niklas  19.02.2017, 13:08
@ChBonkowski

Genau. Guter (und wichtiger) Hinweis.

Alternativ kann lässt sich die eigene Internetseite auch über CloudFlare verschlüsseln. In der kostenlosen Version erhält man allerdings nur eingeschränkte Verschlüsselung (keine End-to-End).

Ist allerdings eine tolle Sache, die den Kostenpunkt Zertifikat übergeht.

0
medmonk  20.02.2017, 00:53
@Niklas

Ist allerdings eine tolle Sache, die den Kostenpunkt Zertifikat übergeht.

SSL-Zertifikate bekommt man auch für lau. Unter anderem von/auf letsencrypt.org. Selber für all meine Websites nutze. Gesponsert wird das Projekt von vielen großen Namen im WWW. Sei es Facebook, Google, Mozilla oder Cisco. 

https://letsencrypt.org/

LG medmonk 

1

Einen Login hast du bereits, wenn du dem Server über ein Formular irgendein Codewort schickst mit dem du dich als berechtigt ausweist. 

Dazu muss du das Codewort auf dem Server speichern, damit der Server darauf abprüfen kann (z.B. mit PHP), ob der Benutzer das richtige Codewort kennt. Und natürlich das HTML Formular, das der Benutzer abschickt.

Du brauchst den php interpreter und nen webserver. Naja streng genommen kannst du statt php auch andere script sprachen nehmen

Ohne zu verstehen was du da eigentlich machst hilft dir auch ein Code für ein Loginscript nicht. Daher kann der einzige Rat eigentlich nur lauten: Lernen, lernen, lernen.