# HTML-Formular in MySQL-Datenbank speichern – So funktioniert’s!

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.

## 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](https://www.ionos.at/digitalguide/server/konfiguration/nginx-grundlagen-installation-und-einrichtung/)-Webserver mit installiertem und aktiviertem [PHP](https://www.ionos.at/digitalguide/websites/web-entwicklung/was-ist-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](https://www.ionos.at/digitalguide/websites/webseiten-erstellen/restaurant-website-erstellen/). 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](https://www.ionos.at/digitalguide/websites/web-entwicklung/html-forms/) 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:

```bash
mysql -u root -p
```

Erstellen Sie nun eine [Datenbank](https://www.ionos.at/digitalguide/hosting/hosting-technik/datenbanken/) für die Reviews, indem Sie den [SQL-Befehl](https://www.ionos.at/digitalguide/server/konfiguration/sql-befehle/) [CREATE DATABASE](https://www.ionos.at/digitalguide/server/konfiguration/sql-create-database/) nutzen:

```bash
CREATE DATABASE reviews;
```

Wechseln Sie anschließend zu dieser Datenbank:

```bash
USE reviews;
```

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](https://www.ionos.at/digitalguide/hosting/hosting-technik/mariadb-create-table/):

```bash
CREATE TABLE user_review (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
reviewer_name VARCHAR(100),
star_rating TINYINT,
details VARCHAR(4000)
);
```

### 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](https://www.ionos.at/digitalguide/server/knowhow/was-ist-mariadb/)-Befehl erstellt einen User namens `review_site` mit dem Passwort `JxSLRkdutW` und gewährt ihm Zugriff auf die Datenbank mit den Reviews:

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

Wenn Sie [MySQL](https://www.ionos.at/digitalguide/server/knowhow/was-ist-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:

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

### 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:

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

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

```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>
<div class="hash d-none" hidden>hash_0a0c02d51f041cf86f4f29a73f1b1194c669b149</div><script data-shy-copy-guard>(function(){var C=[0x00AD,0x200B,0x200C,0x200D,0x2060,0xFEFF];var s=function(t){for(var i=0;i<C.length;i++){t=t.split(String.fromCharCode(C[i])).join("");}return t;};document.addEventListener("copy",function(e){var sel=document.getSelection();if(!sel||sel.isCollapsed||!e.clipboardData){return;}e.clipboardData.setData("text/plain",s(sel.toString()));try{var d=document.createElement("div");d.appendChild(sel.getRangeAt(0).cloneContents());e.clipboardData.setData("text/html",s(d.innerHTML));}catch(x){}e.preventDefault();});})();</script></body>
</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:

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

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.

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

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:

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

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:

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

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](https://www.ionos.at/digitalguide/server/sicherheit/sql-injection-grundlagen-und-schutzmassnahmen/) zu vermeiden, nutzen wir an dieser Stelle [Prepared Statements](https://www.ionos.at/digitalguide/websites/web-entwicklung/prepared-statements-in-phpmysql/):

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

Fügen Sie eine [PHP If-Else-Anweisung](https://www.ionos.at/digitalguide/websites/web-entwicklung/php-if-else/) hinzu, die eine Fehlermeldung ausgibt, wenn der Prozess fehlschlägt. Ist der Prozess erfolgreich, danken Sie dem User für seine Bewertung:

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

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:

```bash
mysql -u root -p reviews
```

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

```bash
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)
```

Das vollständige PHP-Skript lautet:

```php
<?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();
?>
```


This is a markdown version of: [https://www.ionos.at/digitalguide/websites/web-entwicklung/mit-php-informationen-aus-einem-html-formular-in-eine-mysql-mariadb-datenbank-einfuegen/](https://www.ionos.at/digitalguide/websites/web-entwicklung/mit-php-informationen-aus-einem-html-formular-in-eine-mysql-mariadb-datenbank-einfuegen/) for AI/LLM consumption.