In PHP MySQL nutzen

In diesem PHP Tutorial lernen wir, wie wir in PHP MySQL nutzen. Vom Verbinden mit der MySQL Datenbank bis zum einfachen Login-System.Tags: | | | | |
Noch nicht sicher genug im Webdesign? Lass dir in unseren Programmier-Kursen in Kirchdorf oder unserer Wichtel-Webdesign-Agentur in Pettenbach weiterhelfen!

Worum geht´s?

In diesem PHP Tutorial lernen wir, wie wir uns mit Hilfe von PHP zu einer MySQL-Datenbank verbinden und auf sie zugreifen. Wenn wir in PHP MySQL nutzen, können wir Daten in eine Datenbank einfügen, sie verändern oder löschen, und sie nach unseren Wünschen auslesen.

Da MySQL gewissermaßen eine eigene Art von „Programmiersprache“ darstellt, wird diese hier an dieser Stelle nicht ins tiefste Detail behandelt. Dazu wird es irgendwann eigene Tutorials geben.

Damit die PHP-Skripte in diesem Tutorial funktionieren, brauchst du einen Webserver, der MySQL auch unterstützt. Du kannst dazu z.B. XAMPP auf deinem Laptop installieren.

1. Eine Verbindung zur MySQL Datenbank herstellen

Egal, was du mit deinen Daten später machen willst: Als erstes musst du mit Hilfe von PHP eine Verbindung zur MySQL Datenbank herstellen.

Wenn du also in PHP MySQL nutzen willst, brauchst du immer etwas in dieser Art:

// Verbindung zur Datenbak herstellen
$link = mysqli_connect("localhost", "root", "", "login");

Hier die 4 Werte, die du in die Funktion mysqli_connect einfügen musst:

  • Server: Der MySQL Server, zu dem sich PHP verbinden soll (wenn du XAMPP verwendest üblicherweise „localhost“)
  • Datenbank-Benutzer: bei XAMPP normalerweise „root“
  • Datenbank-Passwort: bei XAMPP normalerweise „“ (leerer String)
  • Datenbank: Ein MySQL Server kann mehrere Datenbanken auf einmal beinhalten. Hier muss ausgewählt werden, um welche Datenbank es geht. Diese musst du zuerst anlegen (z.B. in phpMyAdmin, bei XAMPP musst du dafür in der Zeile wo MySQL steht auf den Admin-Button klicken, und dann in der Liste der Datenbanken links auf das +-Symbol)

Diese Variable $link enthält nun die Verbindungs-Informationen der Datenbank, zu der du dich verbunden hast. Diese brauchst du jedes Mal, wenn du eine MySQL-Operation wie einfügen oder abändern von Daten ausführen willst.

2. Wie du in PHP MySQL Befehle ausführst

Sobald du eine Verbindung zur MySQL Datenbank hergestellt hast, kannst du die Daten in der Datenbank abfragen und verändern.

Vorher brauchen wir aber erst noch eine Datenbank-Tabelle. Wir nehmen hier einmal an, dass wir ein – sehr einfaches – Login-System zusammenbauen wollen.

2.1 Eine Tabelle in MySQL anlegen mit CREATE TABLE

Für unser Login-System brauchen wir eine einfache Tabelle, in der gespeichert wird:

  • ID: aufsteigende, eindeutige Zahl
  • Email: Email-Adresse des Users
  • Passwort: Passwort des Users

Die entsprechende Tabelle könnte so aussehen:

// Tabelle erstellen (FALLS noch nicht existent)
$sql = "CREATE TABLE IF NOT EXISTS mylogin (
        id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
        email VARCHAR(70) NOT NULL UNIQUE,
        pw VARCHAR(70) NOT NULL
        )";
$result = mysqli_query($link, $sql);

Für uns relevant sind dabei 2 Aspekte:

  • Ein String namens $sql, der den entsprechenden MySQL-Befehl beinhaltet
  • Die Funktion mysqli_query($link, $sql), die basierend auf dem Verbindungs-Link von oben und unserem MySQL-Befehl aus der Variable $sql versucht, die Tabelle zu erstellen

Wenn wir nichts falsch gemacht haben, sollte beim Ausführen des PHP Skriptes eine neue Tabelle namens „mylogin“ in der Datenbank erstellt worden sein.

Aufgrund des „IF NOT EXISTS“ in unserem MySQL-Befehl kann dieser Teil auch im PHP-Skript belassen werden, falls es öfter als 1x ausgeführt wird. Die Tabelle wird nur dann neu erstellt, wenn sie noch nicht existiert.

Weil ein jeder Zugriff auf die Datenbank das Skript verlangsamt, macht es jedoch langfristig Sinn, die Erstellung der Tabelle nur 1x ausführen zu lassen – aber das ist uns jetzt für den Start mal egal.

Nun, da wir unsere schöne Tabelle erstellt haben, wollen wir sie auch befüllen!

2.2 Eine MySQL Tabelle via PHP mit Daten befüllen mit INSERT INTO

Das Grundprinzip beim Daten befüllen ist was den PHP Code betrifft recht ähnlich zur Bestellung einer Tabelle in MySQL – nur der MySQL-Befehl dazu ist ein anderer:

$email = "niklas@relativemeister.com";
$pw = "123";
$sql = "INSERT INTO mylogin (email, pw) VALUES ('".$email."', '".$pw."');";
mysqli_query($link, $sql);

Die Variablen $email und $pw kannst du natürlich dann z.B. auch von der $_POST oder der $_GET Variable auslesen. So kannst du z.B. die Daten, die ein Benutzer in ein Formular eingegeben hat, in unsere MySQL Datenbank einfügen – z.B. von einem Registrierungs-Formular.

Achtung: Immer wenn du von einem Benutzer eingegebene Daten in eine Datenbank schreibst, musst du sehr genau aufpassen, ob diese Daten a) korrekt und b) nicht bösartig sind.

Außerdem solltest du Passwörter nie unverschlüsselt in einer Datenbank speichern. Sollte jemand Zugriff auf die Datenbank bekommen, hat dieser Jemand sonst Zugriff auf unzählige Email+Passwort-Pärchen. Da viele Menschen auf mehreren Webseiten das gleiche Passwort verwenden, ist das ein ziemliches Problem.

Aber wir gehen jetzt zu Testzwecken mal davon aus, dass unsere Daten gut passen, und keine bösartigen Nutzer existieren.

Was, wenn unsere bestehenden Daten in unserer MySQL Datenbank verändert werden sollen?

2.3 Eine MySQL Tabelle mittels PHP abändern mit UPDATE

Wollen wir eine MySQL Tabelle mit Hilfe von PHP abändern, ändert sich wieder nur der Part in der $sql-Variable:

$sql = "UPDATE login SET email = 'niklas@bunterrichten.com' WHERE email = 'niklas@relativemeister.com'";
$result = mysqli_query($link, $sql);

Falls du dich fragst, was eigentlich dann in $result drinsteht:

  • Die Anzahl an veränderten Zeilen oder
  • false, falls das Update fehlgeschlagen ist

2.4 Zeilen aus einer MySQL Tabelle löschen mit DELETE

Das Löschen von Zeilen funktioniert sehr ähnlich wie das Update:

$sql = "DELETE FROM login WHERE email = 'niklas@bunterrichten.com'";
$result = mysqli_query($link, $sql);

Auch das Ergebnis in $result funktioniert gleich: entweder die Anzahl gelöschter Zeilen oder false.

2.5 Daten mit PHP aus einer MySQL Tabelle auslesen mit SELECT

Das Grundprinzip ist anfangs wieder gleich wie vorher:

$email = $_POST['myLogin'];
$pw = $_POST['pw'];
$sql = "SELECT * FROM login WHERE email = '".$email."' AND pw = '".$pw."'";
$result = mysqli_query($link, $sql);

Der obige Code würde z.B. versuchen eine oder mehrere Zeilen in der MySQL Tabelle zu finden, bei denen email/pw dem entspricht, was im Formular eingegeben wurde.

2.5.1 Herausfinden, ob eine oder mehrere solcher Zeilen existieren

Wollen wir nur herausfinden, ob es einen solchen Eintrag überhaupt gibt (relevant z.B. bei einem Login-System), könnte das so funktionieren:

if (mysqli_num_rows($result) > 0) {
    // mach irgendwas, was passieren sollen, wenn es den Login gibt!
}

Was aber, wenn wir die Daten der Datenbank-Tabelle als Array haben wollen?

2.5.2 Die gefundenen Zeilen als 2D-Array ausgeben

Der folgende Code generiert aus den gefundenen Zeilen ein durchnummeriertes 2D-Array:

$erg = mysqli_fetch_all($result, MYSQLI_NUM);

Was aber, wenn wir die Spalten-Bezeichnungen auch haben wollen?

Dann schreiben wir statt MYSQLI_NUM eben MYSQLI_ASSOC:

$erg = mysqli_fetch_all($result, MYSQLI_ASSOC);

3. In PHP MysQL einsetzen für ein komplettes, simples Login-Skript

Im Folgenden findest du ein komplettes, funktionierendes Login-Skript in PHP, auf dem du auf Wunsch aufbauen kannst.

Es ist nicht sonderlich sicher (keine Verschlüsselung, keinen Schutz gegen SQL-Injection usw., aber dafür vergleichsweise einfach aufgebaut.

Wenn man auf eine Unterseiten gehen will aber nicht eingeloggt ist (z.B. index.php), wird man zum Login weitergeleitet, wo man sich registrieren oder einloggen kann. Sobald man das gemacht hat, kommt man auf index.php, und kann auch später nochmal wiederkommen und ist immer noch eingeloggt – also ein klassisches Member-only-System, das du gerne auch noch erweitern kannst.

Das Ganze besteht aus 3 Dateien:

  • index.php
  • login.php
  • loginFunctions.php

3.1 index.php

<?php

// damit die stopHereIfNotLoggedIn-Werkzeugfunktion klappt
require_once("loginFunctions.php");

// �berpr�fe, ob in der URL logout vorkommt! -> wenn ja, dann abmelden
checkIfLogout();

// Damit der Name des Users angezeigt werden kann
if (! isset($_SESSION))
    session_start();

stopHereIfNotLoggedIn("login.php");

// Mache hier was auch immer eingeloggte Benutzer sehen d�rfen!

echo "Du bist der Beste, denn du bist eingeloggt!<br>";
echo "Und zwar als: ".$_SESSION['user'];
echo "<a href='index.php?logout=1'>Ausloggen</a>";


?>

3.2 login.php

<?php

// hol dir alle wichtigen Werkzeug-Funktionen hinzu!
require_once("loginFunctions.php");

// Verbindung zur Datenbak herstellen
$link = mysqli_connect("localhost", "root", "", "logintest");

// Erstelle Login-Tabelle, falls sie noch nicht existiert
tabelleErstellen($link);

// �berpr�fe, ob wir die Daten noch eingeben m�ssen oder sie schon eingegeben wurden (dann sind sie in $_POST)
if (isset($_POST['email']) && isset($_POST['pw'])) {
    // wenn Formular-Daten eingegeben und schon hierher gesendet wurden
    $email = $_POST['email'];
    $pw = $_POST['pw'];
    
    if (isset($_POST['isRegistration'])) {
        // ist eine Registrierung -> in Datenbank speichern!
        zeileDazu($link, $email, $pw);
    }
    else {
        // ist ein Anmelde-Versuch -> Email/PW checken
        schauObLoginPasst($link, $email, $pw);
    }
}

// �berpr�fe ob Fehlermeldung angezeigt werden soll
if (isset($_GET['passtnicht'])) {
    // Es ist ein ?passtnicht=1 am Ende der URL hinzugef�gt worden -> zeige Fehler an
    echo "Es gab einen Fehler mit deinen Eingaben!";
}

echo "<h2>Registrieren</h2>";
echo "<form id='registrieren' method='post'>
        <input type='text' name='email'>
        <input type='password' name='pw'>
        <input type='hidden' name='isRegistration'>
        <input type='submit'>
      </form>";

echo "<h2>Login</h2>";
echo "<form id='login' method='post'>
        <input type='text' name='email'>
        <input type='password' name='pw'>
        <input type='submit'>
      </form>";



?>

3.3 loginFunctions.php

<?php 

function stopHereIfNotLoggedIn($umleitungWohin) {
    // Session starten -> damit Login �ber mehrere Unterseiten hinweg funktioniert
    if (! isset($_SESSION))
        session_start();
    
    if (! isset($_SESSION['user'])) {
        // Weiterleiten zum Login/zum Registrieren
        header("Location: ".$umleitungWohin);
    }
    else {
        // Tu nichts, alles gut und eingeloggt
    }
}

function tabelleErstellen($link) {
    
    // Tabelle erstellen (FALLS noch nicht existent)
    $sql = "CREATE TABLE IF NOT EXISTS mylogin (
            id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
            email VARCHAR(70) NOT NULL UNIQUE,
            pw VARCHAR(70) NOT NULL
            )";
    $result = mysqli_query($link, $sql);
}

function zeileDazu($link, $email, $pw) {
    $sql = "INSERT INTO mylogin (email, pw) VALUES ('".$email."', '".$pw."');";
    mysqli_query($link, $sql);
    
    // setze die Session, damit der Login �ber mehrere Unterseiten bleibt
    if (! isset($_SESSION))
        session_start();
    $_SESSION['user'] = $email;
    // leite weiter zur index.php
    header("Location: index.php");
    
    // leite gleich weiter zu index.php
}

function schauObLoginPasst($link, $email, $pw) {
    $sql = "SELECT * FROM mylogin WHERE email = '".$email."' AND pw = '".$pw."'";
    $result = mysqli_query($link, $sql);
    
    if (mysqli_num_rows($result) > 0) {
        // es gibt Eintr�ge in der Datenbank mit dieser Kombi -> Einloggen erfolgreich!
        
        // setze die Session, damit der Login �ber mehrere Unterseiten bleibt
        if (! isset($_SESSION))
            session_start();
        $_SESSION['user'] = $email;
        // leite weiter zur index.php
        header("Location: index.php?ja=1");
    }
    else {
        // Es gibt keinen solchen Eintrag -> leite zur�ck zum Formular zum Nochmal eingeben
        header("Location: login.php?passtnicht=1");
    }
}

function checkIflogout() {
    if (! isset($_SESSION))
        session_start();
    if (isset($_GET['logout'])) {
        if (isset($_SESSION))
            session_destroy();
        header("Location: index.php");
    }
        
}

?>

3.4 Weitere Member-only-Unterseiten hinzufügen

Willst du z.B. weitere Unterseiten haben, die du nur für bestimmte User freischalten willst, brauchst du nur am Anfang folgenden Code einfügen (oder eine entsprechende PHP-Funktion schreiben, die dir das erledigt):

// damit die stopHereIfNotLoggedIn-Werkzeugfunktion klappt
require_once("loginFunctions.php");

// �berpr�fe, ob in der URL logout vorkommt! -> wenn ja, dann abmelden
checkIfLogout();

// Damit der Name des Users angezeigt werden kann
if (! isset($_SESSION))
    session_start();

stopHereIfNotLoggedIn("login.php");

Natürlich kann man in PHP MySQL noch viel ausgefeilter nutzen als dieses einfache Beispiel.

Aber vielleicht hilft es dir, ein wenig in die Materie reinzukommen 🙂

Diskussion zum Tutorial

Du bist aus Oberösterreich? Dann nütze doch auch unsere flexiblen Programmier-Kurse in Kirchdorf - oder gib deine Website gerne in die guten Hände unserer erfahrenen Wichtel-Webdesign-Agentur.