HTML-Formulare ermöglichen es Benutzerinnen und Benutzern, Daten direkt über eine Website einzugeben, die anschließend in einer Datenbank gespeichert werden können. Sie bilden damit die Schnittstelle zwischen der Website und der Datenbank, sodass Eingaben wie Namen, E-Mail-Adressen oder Kommentare systematisch erfasst und verwaltet werden. In dieser Anleitung zeigen wir, wie Sie mit PHP Informationen aus einem HTML-Formular in einer MySQL/MariaDB-Datenbank speichern.

Managed Database Services
Datenbanken – Auf´s Wesentliche konzentrieren
  • IONOS Cloud-Partner: Die Experten für Ihren Datenbank-Betrieb
  • Flexibel: Maßgeschneiderte Datenbank-Lösungen ganz auf Ihre Bedürfnisse
  • Rechenzentren in Deutschland: Ihre Daten sind sicher

Anforderungen

Um Daten aus einem HTML-Formular zuverlässig in einer MySQL- oder MariaDB-Datenbank zu speichern, benötigen Sie eine Umgebung, die folgende Voraussetzungen erfüllt:

  • Webserver mit PHP-Unterstützung: Ein Apache- oder NGINX-Webserver mit installiertem und aktiviertem PHP, damit serverseitige Skripte die Formularinformationen verarbeiten können
  • Grundkenntnisse in PHP und SQL: Grundlegendes PHP- und SQL-Know-how, um die Verbindung zwischen Formular und Datenbank herzustellen und die Daten korrekt einzufügen
  • Zugriff auf die Webserver-Konfiguration: Zugriffsmöglichkeit auf den Webserver, damit Sie PHP-Skripte ausführen, Datenbanktabellen anlegen und ggf. Berechtigungen konfigurieren können
Hinweis

Apache, MySQL/MariaDB und PHP sind Teil einer Standardinstallation und laufen dort. Wenn Ihr Server mit einer Minimalinstallation erstellt wurde, müssen Sie Apache, MySQL/MariaDB und PHP installieren und konfigurieren, bevor Sie fortfahren können.

Informationen aus einem HTML-Formular in MySQL/MariaDB einfügen – so geht’s

Für dieses Tutorial erstellen wir eine fiktive Website für ein Restaurant. Ziel ist es, den Kundinnen und Kunden die Möglichkeit zu geben, Bewertungen direkt über die Website abzugeben. Dabei zeigen wir Ihnen, wie HTML-Formulare mit einem PHP-Skript verarbeitet und die eingegebenen Daten in einer MySQL- oder MariaDB-Datenbank gespeichert werden.

Schritt 1: Datenbank erstellen

In einem ersten Schritt erstellen wir eine Datenbank, damit Sie alle Informationen aus dem HTML-Formular in der Datenbank ablegen können. Melden Sie sich hierfür zunächst am MySQL/MariaDB-Client der Befehlszeile an:

mysql -u root -p
bash

Erstellen Sie nun eine Datenbank für die Reviews, indem Sie den SQL-Befehl CREATE DATABASE nutzen:

CREATE DATABASE reviews;
bash

Wechseln Sie anschließend zu dieser Datenbank:

USE reviews;
bash

Für unser Beispiel werden wir zur Vereinfachung nur eine Tabelle erstellen. Diese Tabelle wird die folgenden drei Felder haben:

  • Ein ID-Feld: Dieses Feld wird auf AUTO_INCREMENT gesetzt. Dieser Parameter sorgt dafür, dass ein Feld bei jedem neuen Datensatz automatisch um eins erhöht wird, sodass jeder Eintrag einen eindeutigen Wert erhält.
  • Name der Review-Person: Hierbei wird ein Textfeld mit einer Länge von bis zu 100 Zeichen genutzt.
  • Eine Sternenbewertung: Eine numerische Bewertung von 1 bis 5, Datentyp TINYINT.
  • Überprüfen Sie die Details: Ein Textfeld speichert Details oder Kommentare zu den Bewertungen und ist mit VARCHAR(4000) so dimensioniert, dass etwa 500 Wörter Platz finden.

Erstellen Sie nun die Tabelle mit CREATE TABLE:

CREATE TABLE user_review (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
reviewer_name VARCHAR(100),
star_rating TINYINT,
details VARCHAR(4000)
);
bash
Compute Engine
Die ideale IaaS für Ihre Workloads
  • Kostengünstige vCPUs und leistungsstarke dedizierte Cores
  • Höchste Flexibilität ohne Mindestvertragslaufzeit
  • Inklusive 24/7 Experten-Support

Schritt 2: User anlegen

Aus Sicherheitsgründen ist es empfehlenswert, für jede Datenbank einen eindeutigen User anzulegen, insbesondere wenn von einer Website aus auf diese Datenbank zugegriffen wird.

Der folgende MariaDB-Befehl erstellt einen User namens review_site mit dem Passwort JxSLRkdutW und gewährt ihm Zugriff auf die Datenbank mit den Reviews:

GRANT ALL ON reviews.* TO review_site@localhost IDENTIFIED BY 'JxSLRkdutW';
bash

Wenn Sie MySQL nutzen, wird der Befehl GRANT ... IDENTIFIED BY ... in den aktuellen Versionen nicht mehr empfohlen. Stattdessen sollte man zuerst den User mit CREATE USER anlegen und dann GRANT verwenden:

CREATE USER 'review_site'@'localhost' IDENTIFIED BY 'JxSLRkdutW';
GRANT ALL PRIVILEGES ON reviews.* TO 'review_site'@'localhost';
FLUSH PRIVILEGES;
bash

Schritt 3: HTML-Formular für die Website erstellen

In einem nächsten Schritt legen wir das Bewertungsformular für die Kundenbewertungen an. Erstellen Sie hierzu eine Datei namens reviews.html in Ihrem Webspace und öffnen Sie sie zur Bearbeitung. Um beispielsweise die Datei in /var/www/html mit dem Texteditor nano zu erstellen, lautet der Befehl:

sudo nano /var/www/html/reviews.html
bash

Fügen Sie nun folgenden Inhalt in diese Datei ein:

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Restaurantbewertung</title>
</head>
<body>
<p>Wie hat es Ihnen bei uns gefallen?</p>
<form action="addreview.php" method="POST">
Ihr Name: <input type="text" name="reviewer_name"><br><br>
Wie viele Sterne würden Sie uns geben?
<select name="star_rating">
<option value="1">1 Stern</option>
<option value="2">2 Sterne</option>
<option value="3">3 Sterne</option>
<option value="4">4 Sterne</option>
<option value="5">5 Sterne</option>
</select><br><br>
Ihre Bewertung: <br>
<textarea name="details" rows="10" cols="30"></textarea><br><br>
<input type="submit" value="Submit" name="submit">
</form>
</body>
</html>
html

Nachfolgend ein paar Dinge, die man über dieses grundlegende HTML-Formular beachten sollte:

  • Dieses Formular verwendet die POST-Methode, um Daten an das PHP-Skript addreview.php zu übergeben.
  • Der Name für jedes Eingabefeld wird im nächsten Schritt als PHP-Variablenname verwendet. In der Regel ist es sinnvoll, für diese Werte den Feldnamen der Datenbanktabelle zu verwenden.
  • Vertrauen Sie niemals Benutzereingaben. In diesem Beispiel benötigen wir für die Sternenbewertung eine Zahl von 1 bis 5. Wenn wir die Benutzerinnen und Benutzer bitten würden, ihre Sternenbewertung manuell einzugeben, könnten diese möglicherweise eine ungültige Eingabe tätigen. Daher ist es am besten, die User zu bitten, vorgegebene Werte aus einem Dropdown-Menü auszuwählen.

Schritt 4: PHP-Skript anlegen

Im letzten Schritt erstellen wir das PHP-Skript, das die Daten aus dem HTML-Formular in die Datenbank einfügt. Hierzu stellen wir eine Verbindung zu MySQL oder MariaDB her, fangen Benutzereingaben aus dem Formular ab und speichern diese in der zuvor erstellten Tabelle. Erstellen Sie zunächst eine Datei addreview.php in Ihrem Webspace und öffnen Sie sie zur Bearbeitung. Hier wird der PHP-Code platziert. Um die Datei in /var/www/html mithilfe von nano anzulegen, lautet der Befehl:

sudo nano /var/www/html/addreview.php
bash

Jedes PHP-Skript muss mit dem öffnenden PHP-Tag beginnen:

<?php
php

Fügen Sie anschließend einen MySQL/MariaDB-Verbindungsblock mit dem Serverstandort (localhost), dem Datenbanknamen sowie dem Datenbankbenutzernamen und dem Passwort hinzu.

$hostname = "localhost";
$username = "review_site";
$password = "JxSLRkdutW";
$db = "reviews";
php

Der folgende Codeabschnitt ermöglicht es, mithilfe der Funktion mysqli_connect eine Verbindung zur Datenbank herzustellen. Zudem gibt das Skript einen Fehler aus, wenn diese Verbindung fehlschlägt:

$dbconnect = mysqli_connect($hostname, $username, $password, $db);
if (mysqli_connect_errno()) {
die("Database connection failed: " . mysqli_connect_error());
}
php

Im nächsten Schritt holen wir die vom User über das HTML-Formular eingegebenen Daten ab und speichern sie in PHP-Variablen, sodass wir sie anschließend zur Verarbeitung und zum Einfügen in die Datenbank verwenden können:

if (isset($_POST['submit'])) {
$reviewer_name = $_POST['reviewer_name'];
$star_rating = $_POST['star_rating'];
$details = $_POST['details'];
php

Anschließend müssen die vom User eingegebenen Daten in die Datenbank geschrieben werden. Dazu erstellen wir eine SQL INSERT-Abfrage, die die Werte aus den PHP-Variablen nimmt und sie in die entsprechenden Felder der Tabelle user_review einfügt. Um SQL-Injections zu vermeiden, nutzen wir an dieser Stelle Prepared Statements:

$stmt = $dbconnect->prepare("INSERT INTO user_review (reviewer_name, star_rating, details) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $reviewer_name, $star_rating, $details);
$stmt->execute();
php

Fügen Sie eine PHP If-Else-Anweisung hinzu, die eine Fehlermeldung ausgibt, wenn der Prozess fehlschlägt. Ist der Prozess erfolgreich, danken Sie dem User für seine Bewertung:

if ($stmt->execute()) {
echo "Danke für Ihre Bewertung.";
} else {
die("Ein Fehler ist aufgetreten.");
}
$stmt->close();
}
php

Zuletzt schließen Sie die öffnende if-Anweisung und fügen einen schließenden PHP-Tag hinzu:

}
?>
php
Hinweis

Wenn Sie die Fehlermeldung „Datenbankverbindung fehlgeschlagen: Zugriff für Benutzer’review_site’@‘localhost’ verweigert (mit Passwort: JA)“ erhalten, können Sie die Anmeldeinformationen testen, indem Sie sich von der Kommandozeile aus mit dem Befehl bei MySQL/MariaDB anmelden:

Schritt 5: Skript testen

Um das Skript zu testen, besuchen Sie reviews.html in einem Browser und senden dann eine beispielhafte Bewertung ab. Melden Sie sich anschließend mit dem MySQL/MariaDB-Client auf der Kommandozeile in der Review-Datenbank an:

mysql -u root -p reviews
bash

Verwenden Sie SELECT * FROM user_review, um den gesamten Inhalt der Tabelle anzuzeigen:

MariaDB [reviews]> SELECT * FROM user_review;
+----+---------------+-------------+---------------------------------------------------------+
| id | reviewer_name | star_rating | details                                                 |
+----+---------------+-------------+---------------------------------------------------------+
|  1 | Ben           |           5 | Leckere Calzone!                                        |
|  2 | Leslie        |           1 | Calzone ist nicht gut.                                  |
+----+---------------+-------------+---------------------------------------------------------+
2 rows in set (0.00 sec)
bash

Das vollständige PHP-Skript lautet:

<?php
// Datenbankverbindungsdaten
$hostname = "localhost";
$username = "review_site";
$password = "JxSLRkdutW";
$db       = "reviews";
// Verbindung zur Datenbank herstellen
$dbconnect = new mysqli($hostname, $username, $password, $db);
// Verbindung prüfen
if ($dbconnect->connect_error) {
    die("Datenbankverbindung fehlgeschlagen: " . $dbconnect->connect_error);
}
// Nur ausführen, wenn das Formular gesendet wurde
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit'])) {
    // Eingaben validieren (Minimalprüfung)
    $reviewer_name = trim($_POST['reviewer_name'] ?? '');
    $star_rating   = intval($_POST['star_rating'] ?? 0);
    $details       = trim($_POST['details'] ?? '');
    // Einfache Validierung
    if ($reviewer_name === '' || $star_rating < 1 || $star_rating > 5 || $details === '') {
        die("Bitte füllen Sie alle Felder korrekt aus.");
    }
    // Prepared Statement erstellen
    $stmt = $dbconnect->prepare("INSERT INTO user_review (reviewer_name, star_rating, details) VALUES (?, ?, ?)");
    
    if ($stmt === false) {
        die("Datenbankfehler: " . $dbconnect->error);
    }
    $stmt->bind_param("sis", $reviewer_name, $star_rating, $details);
    // Statement ausführen
    if ($stmt->execute()) {
        echo "Danke für Ihre Bewertung.";
    } else {
        die("Ein Fehler ist aufgetreten: " . $stmt->error);
    }
    $stmt->close();
}
// Verbindung schließen
$dbconnect->close();
?>
php
War dieser Artikel hilfreich?
Zum Hauptmenü