Erster Eintrag in eine MySQL-Datenbank mit PHP 1 2 3 4

Hier folgt eine Anleitung wie man ein Nachrichten-System mit einer MySQL (die populärste "Open-Source" Datenbank der Welt) - (oder einer MariaDB)-Datenbank über PHP realisieren kann. Komplett mit Formularen zum eintragen, anzeigen und bearbeiten der Daten.

Eine Datenbank ist ein System zur elektronischen Datenverwaltung. Die wesentliche Aufgabe einer Datenbank ist es, große Datenmengen effizient und dauerhaft zu speichern. Eine Datenverwaltung besteht meist nicht nur aus Tabellen, sondern auch aus anderen Objekten wie Abfragen, Formularen etc. Der Umgang damit wird im laufe dieser Seiten anhand einfacher Beispiele vermittelt.

Datenbank-Tabellen enthalten Informationen über Personen oder Sachen der gleichen Art. Diese Informationen sind in mehreren Zeilen (Datensätzen) aufgeteilt. Jede Zeile enthält Informationen, die direkt im Zusammenhang mit einer Person oder Sache stehen. Ob Sie nun eine Datenbank-Tabelle über Filme, Rezepte, Personen, Ersatzteile, ein Forum oder Gästebuch etc. erstellen möchten ist relativ egal, die Grundlagen zur Datenverwaltung werden dafür immer benötigt.

[Bildschirmfoto]
 Diese Datenbank-Tabelle soll im laufe der Anleitung erstellt werden.
Diese Datenbank-Tabelle soll im laufe der Anleitung erstellt werden.

Der Datenaustausch zwischen dem MySQL-Server geschieht in PHP über HTML-Schnittstellen, das heißt über Formulare, über die neue Daten eingegeben oder vorhandene Daten abgefragt oder bearbeitet werden.
Um Daten an den MySQL-Server zu senden / zu empfangen werden in dieser Anleitung die „PHP Data Objects” oder kurz PDO verwendet. PDO stellt eine Abstraktionsebene für den Datenbankzugriff dar und ermöglicht einen einheitlichen Zugang von PHP auf unterschiedliche SQL-basierte Datenbanken.

➤ Grundvoraussetzung ist, dass mindestens: PHP 7.2 und MySQL (oder MariaDB) auf dem (Linux) Webserver oder lokalem System (Lokaler Webserver) installiert sind. Außerdem brauchen Sie Kenntnisse in PHP um die vorgestellten Scripte den eigenen Wünschen anpassen zu können.

Hier wurde versucht die Anleitung, den PHP-Code und die Anweisungen möglichst einfach zu schreiben. Es werden nicht alle gezeigten Funktionen bis ins Detail erklärt, manchmal bleiben Fragen auch offen . Für unbekannte Funktionen oder Anweisungen kann Ihnen eine „bekannte” Suchmaschine Auskunft geben oder schauen Sie beim deutschen PHP-Manual bzw. beim MySQL-Referenz-Handbuch nach.
Wenn Sie dabei auch etwas lernen möchten und nicht nur kopieren wollen , dann beachten Sie die Kommentare im Quelltext der Scripte. Mit der Bezeichnung: "Tabelle" ist keine HTML-Tabelle sondern eine Datenbank-Tabelle gemeint.

Inhalt:

  1. Die Verbindung zur Datenbank herstellen
  2. Der Aufbau einer Datenbank-Tabelle
  3. Die Datenbank-Tabelle anlegen
  1. Die Daten einfügen, auslesen und bearbeiten
  2. MySQL-Fehlermeldungen anzeigen
  3. Die Daten über ein Formular sicher eintragen
  1. Die Daten über ein Formular bearbeiten
  2. Die Daten sortiert und begrenzt ausgeben
  3. Hinweise zu den MySQL-Anweisungen
  1. Die Daten schnell durchsuchen
  2. Die Ausführung auf dem Webserver
  3. Was fehlt hier noch?

1. Die Verbindung zur Datenbank herstellen

Um auf eine Datenbank zugreifen zu können, müssen Sie zuerst eine Verbindung zum Datenbank-Server herstellen und eine bereits vorhandene Datenbank auswählen. Die vier Zugangsdaten zur Datenbank bekommen Sie von Ihrem Webspace-Provider.
Bei den Zugangsdaten handelt es sich um die Host-Adresse dort ist die Datenbank gehostet, den Datenbanknamen, den Benutzernamen und das Passwort dieses können Sie meist selbst festlegen.

Da man in den meisten Fällen in mehreren Skripten auf diese Informationen zugreifen muss, empfiehlt sich, die Zugangsdaten inklusive Verbindung in einer zentralen Datei abzulegen und diese dann bei Bedarf, zum Beispiel mit der PHP-Anweisung: include "verbinden.php";  einzubinden. Das hat auch den Vorteil, das bei Änderungen an den Zugangsdaten diese nur an einer Stelle vorgenommen werden müssen.

Quelltext:  verbinden.php AusblendenKopierenLinkZeilen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
// PHP Fehlermeldungen anzeigen
error_reporting(E_ALL);
ini_set('display_errors'true);

// Zugangsdaten zur Datenbank
$DB_HOST "localhost"// Host-Adresse
$DB_NAME "test"// Datenbankname
$DB_BENUTZER "root"// Benutzername
$DB_PASSWOR""// Passwort

/* Zeichenkodierung UTF-8 (utf8mb4) bei der Verbindung setzen,
 Infos: https://werner-zenk.de/html/schriftzeichen_richtig_darstellen.php
 Und eine PDOException bei einem Fehler auslösen. */
$OPTION = [
  
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
  
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];

try {
  
// Verbindung zur Datenbank aufbauen
  
$db = new PDO(
    
"mysql:host=" $DB_HOST ";dbname=" $DB_NAME,
    
$DB_BENUTZER,
    
$DB_PASSWORT,
    
$OPTION
  
);
} catch (
PDOException $e) {
  
// Bei einer fehlerhaften Verbindung eine Nachricht ausgeben
  
exit("Verbindung fehlgeschlagen! " $e->getMessage());
}

Zum Aufbau einer Verbindung zur MySQL-Datenbank benötigt man die Funktion new PDO(...) 22, dort hinein gehören dann die Zugangsdaten, um diese einfacher eingeben zu können, wurden diese in PHP-Variablen ($DB_HOST, $DB_NAME, $DB_BENUTZER und $DB_PASSWORT) ausgelagert (Zeile 7 bis 10).

Mit dem try {} catch ()-Block (Zeile 20 und 28) wird ein möglicher Fehler beim öffnen der Datenbank abgefangen und gemeldet. Zum Beispiel wenn die Verbindung nicht hergestellt werden konnte, weil ein Wert falsch eingetragen wurde oder die Datenbank schlicht nicht existiert.

Wurde die Verbindung erfolgreich hergestellt, bekommen Sie mit new PDO() eine neue Instanz des "PHP Data Objects", das Sie über $db ansprechen. Diese Instanz (eine PHP-Variable) benötigen wir in den weiteren Scripten um die Verbindung herzustellen.

Mit der Variable $OPTION (Array) 15 werden die Attribute für das Datenbankhandle gesetzt:
Zeichenkodierung ("UTF-8 / utf8mb4") der Verbindung setzen.
• Außerdem sollen etwaige MySQL-Fehlermeldungen mit PDO::ERRMODE_EXCEPTION angezeigt werden (ab PHP 8.0 ist das der Standardwert).

Mit einem Lokaler Webserver verbinden
Um auf einem lokalen Webserver eine Verbindung herzustellen, reichen die hier angegebenen Zugangsdaten bereits aus. Mehr Infos unter » XAMPP - Lokalen Webserver einrichten und verwenden

Die Zugangsdaten verschieben
Speichern Sie Passwörter, Zugangsdaten zur Datenbank außerhalb des Root-Verzeichnisses, da sind diese sicher aufgehoben. Das Root-Verzeichnis, ist das Verzeichnis in dem die "index.php", "index.htm" -Dateien liegen. Die Zugangsdaten sollten dann oberhalb dieses Verzeichnisses sein.

2. Der Aufbau einer Datenbank-Tabelle

Bevor wir eine Datenbank-Tabelle anlegen, zeige ich hier den grundlegenden Aufbau einer Tabelle an einem Grafik-Beispiel.

Die Tabelle, in denen die Daten gespeichert sind, werden durch Spalten und Zeilen dargestellt. Eine komplette Zeile einer Datenbank-Tabelle wird als Datensatz betrachtet. Die Anzahl der Spalten ist hier verantwortlich für die Länge des Datensatzes. Ein Datenfeld ist eine bestimmte Spalte aus einem Datensatz.

Abbildung: Aufbau einer Datenbank-Tabelle


Anhand der Abbildung kann man erkennen, wie auf ein einzelnes Datenfeld zugegriffen wird.

Ein Datensatz und eine Spalte sind durch ihre Einmaligkeit gekennzeichnet. Diese einmalige Kennzeichnung erleichtert den Zugriff auf das jeweilige Datenfeld.

Eine DB-Tabelle hat in der Regel zwischen 1 und 20 Spalten, kann aber auch weit mehr haben. Die Anzahl an Datensätzen ist im Grunde auch nicht beschränkt, eine Tabelle mit 1 Million Datensätzen ist daher eher Standard als Ausnahme.

⚑ Der Entwurf einer Tabelle

⚑ Die Bezeichnung der Spalten

Überlegen Sie welche Spalten und wie viele in der Tabelle vorhanden sein sollen, jede Spalte bekommt dabei einen Namen, eine einmalige und sinnvolle Bezeichnung. Die einzelnen Spalten müssen eindeutige Namen haben (keine Abkürzungen, durchnummerierte oder kryptische Namen verwenden).

An erster Stelle in unserer „Nachrichten”-Tabelle stehen natürlich der Titel (die Überschrift) der Nachricht, der Autor der die Nachricht verfasst hat und die Nachricht selbst. Um die Nachrichten später leichter auffindbar und sortierbar zu machen benötigen wir noch eine Kategorie.

Damit die eingetragene Nachricht nicht sofort ausgegeben wird, sondern erst bei einem OK vom „Chef” nach der Sichtkontrolle , fügen wir die Spalte Anzeige hinzu. Außerdem soll noch festgehalten werden wann die Nachricht geschrieben wurde, sodass auch das Datum gespeichert werden muss.

Im Hinblick auf die Verwaltung der Daten (anzeigen, bearbeiten etc.) muss auf jeden Fall noch eine Spalte mit einer ID (Identifikationsnummer) hinzugefügt werden, um die Einträge später noch eindeutig identifizieren zu können.

In der Regel sollten die Bezeichnungen der Spalten klein geschrieben werden, Umlaute und Sonderzeichen sind nicht erlaubt, daraus ergeben sich folgende Bezeichnungen: id, titel, autor, nachricht, kategorie, anzeige und datum.

⚑ Die Verwendung von Feldtypen

Mit Hilfe von Feldtypen (Datentypen) kann man Daten einheitlich in den Spalten der Tabelle ablegen. Bei DB-Tabellen spielen diese Feldtypen eine wichtige Rolle, so können Sie in einer Spalte für Integer-Zahlen keinen Text speichern, für jede Spalte in einer Tabelle können Sie einen anderen Feldtyp angeben.

Wichtige Feldtypen sind:

Bei (x) die benötigte Länge angeben.
Weitere Feldtypen finden Sie unter: MySQL-Feldtypen und deren Wirkungsgrad.
FeldtypBeschreibung
Z
a
h
l
e
n
INT, INT(x) Integer (ganzzahlige Zahlen) mit einem Wert zwischen -2,1 bis 2,1 Mio.
TINYINT(x) Ein sehr kleiner Integer (-128 und 127) mit variabler Länge.
FLOAT, FLOAT(x) Fließkommazahl - Werte bis: 1.175494351E-38,0.
T
e
x
t
VARCHAR(x) Zeichenkette mit variabler Länge von bis zu: 255 Zeichen.
TEXT , TEXT(x) Zeichenkette von bis zu: 65 535 Zeichen.
LONGBLOB(x) Zeichenkette - von bis zu: 4.294.967.295 Zeichen (z. B.: für Bilder).
Z
e
i
t
DATE Datum (Format: YYYY-MM-DD).
TIME Uhrzeit (Format: HH:MM:SS).
DATETIME Datum und Uhrzeit (Format: YYYY-MM-DD HH:MM:SS).

➤ Um die Tabelle möglichst platzsparend anzulegen, muss man sich im klaren sein, welchen Wertebereich (Zeichenlänge) die zu speichernden Daten haben werden. Um beispielsweise den „Titel” zu speichern, reicht es vollkommen aus, die Spalte: titel als VARCHAR(80) zu deklarieren. Sie sollten in allen Fällen den geeignetsten Feldtyp auswählen und dessen Länge angeben.


In unserer „Nachrichten”-Tabelle verwenden wir folgende Spalten und Feldtypen:

3. Die Datenbank-Tabelle anlegen

Damit Sie eine Datenbank-Tabelle anlegen können, benötigen Sie MySQL-Anweisungen. Diese werden von PHP an MySQL zum Beispiel mit: $db->exec("Anweisungen") übermittelt. Die Anweisungen haben eine bestimmte Syntax (Schreibweise) die genau befolgt werden muss, aber keine Angst das ist nicht besonders schwer denn wir gehen hier Schritt für Schritt die einzelnen Anweisungen durch.

MySQL-Anweisungen sind, genau wie PHP-Anweisungen auch, im Klartext programmiert. Das heißt, wer ein wenig englisch versteht, kann meist schon aus der Anweisung selbst ihre Bedeutung ablesen. Anders als in PHP sind MySQL-Anweisungen nicht als Funktionen konzipiert, sondern werden einfach wie ein Satz aneinander gereiht. MySQL-Anweisungen sind recht einfach zu lernen, zumindest die Grundzüge.

Hier also das Script mit der die Datenbank-Tabelle `nachrichten` angelegt wird. Zuerst binden wir mit der include()-Funktion unsere Verbindung zur Datenbank ein. Mit der Variable: $db rufen wir die PDO-Instanz zur Datenbank auf und mit exec("CREATE TABLE …") werden die Anweisungen übermittelt die für das Anlegen der Tabelle benötigt werden. Das ganze ist in einem try {} catch ()-Block gefasst den wir weiter oben bereits kennen gelernt haben.

Quelltext:  anlegen.php AusblendenKopierenLinkZeilen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// Verbindung zur Datenbank aufbauen.
include "verbinden.php";

try {
 
// Anlegen der Datenbank-Tabelle.
 
$db->exec("CREATE TABLE IF NOT EXISTS `nachrichten` (
            `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
            `titel` VARCHAR(80) NOT NULL,
            `autor` VARCHAR(30) NOT NULL DEFAULT 'Werner',
            `nachricht` TEXT NOT NULL,
            `kategorie` VARCHAR(25) NOT NULL,
            `anzeige` TINYINT(1) NOT NULL,
            `datum` DATE NOT NULL
           ) ENGINE = MYISAM DEFAULT CHARSET=utf8");

 echo 
'<p>&#9655; Die Datenbank-Tabelle wurde angelegt.<br>
 <a href="eintragen.php">Erste Nachricht eintragen</a></p>';
}
catch (
PDOException $e) {
 
// Bei einem Fehler eine Nachricht ausgeben.
 
exit('<p>&#9655; Fehler beim anlegen der Datenbank-Tabelle!</p>.
  
$e->getMessage());
}
?>

Die MySQL-Anweisungen kurz erklärt

Mit CREATE TABLE wird eine neue Tabelle mit dem Namen `nachrichten` angelegt.
Dieser Name wird auch in weiteren MySQL-Anweisungen benötigt um Zugriff auf die Tabelle zu erhalten.

IF NOT EXISTS  Die Tabelle wird nur angelegt, wenn eine Tabelle mit gleichem Namen nicht bereits vorhanden ist (das ist eine optionale Angabe).

AUTO_INCREMENT  Für jede Tabelle kann genau eine Integer-Spalte mit diesem Zusatz versehen werden. Wird in diese Tabelle ein neuer Datensatz eingefügt, so erhält er automatisch in diesem Feld (id) die nächste noch freie Nummer.

PRIMARY KEY  Damit wird der Spalte id der Primärschlüssel zugewiesen (ein einmaliger Schlüssel, der jeden Datensatz einer Tabelle eindeutig identifiziert).

NOT NULL  Verhindert, dass eine Spalte einen Nullwert erhält, sondern einen leeren String (Zeichenkette).

DEFAULT 'Werner'  fügt einen Vorgabewert (hier 'Werner') in die Spalte ein (Optionale Angabe). Vorgabewerte sind notwendig, wenn bei einem INSERT nicht alle Spalten gefüllt werden.

ENGINE = MYISAM  ENGINE (engl. für Maschine) MYISAM (engl. Abkürzung von: My Indexed Sequential Access Method) ist der Standard-Tabellentyp.

MYISAM  eignet für kleine Datenbanken oder Anwendungen wo viel und oft Daten geändert werden. Hier ist MYISAM deutlich performanter, weil INSERT und UPDATE schneller sind. Und natürlich wenn man Texte durchsuchen möchte (Volltextsuche).

An dieser Stelle möchte ich noch erwähnen das es noch andere Tabellentypen gibt wie zum Beispiel: InnoDB. Eine SELECT-Anfrage wird dort schneller ausgeführt dafür sind INSERT und UPDATE langsamer.

DEFAULT CHARSET  Hier wird der Zeichensatz (utf8) der Tabelle gesetzt.

⚑ Das Anlegen der Datenbank-Tabelle starten

Jetzt wird es spannend, aber nur ein wenig Die Datei: anlegen.php braucht nur ein Mal ausgeführt werden, Datei über dem Browser aufrufen um die DB-Tabelle anzulegen.

Wurde die Tabelle erfolgreich angelegt, erscheint die Meldung:
Die Datenbank-Tabelle wurde angelegt.

Sollte ein Fehler aufgetreten sein, erscheint hingegen die Meldung:
Fehler beim anlegen der Datenbank-Tabelle. und eine MySQL-Fehlermeldung wird ausgegeben. Mögliche Ursachen sind zum Beispiel eine fehlerhafte Verbindung zur Datenbank oder Fehler in den MySQL-Anweisungen.

Die Tabelle sieht nun wie folgt aus, da diese gerade erst angelegt wurde existieren entsprechend auch noch keine Daten darin.

id titel autor nachricht kategorie anzeige datum