💾 PHP & Datenbank
Sichere Verbindung zwischen PHP und MariaDB
🎯 1. Voraussetzungen
Bevor du beginnst, stelle sicher, dass:
- Du die PHP-Grundlagen beherrschst
- XAMPP läuft (Apache + MySQL gestartet)
- Du in phpMyAdmin eine Datenbank
mini_apimit Tabellenachrichtenangelegt hast
📁 2. Ordnerstruktur – wichtig bei gemeinsamer PC-Nutzung!
Speichere deine Dateien in deinem persönlichen Ordner:
C:\xampp\htdocs\schueler-max\
Rufe sie im Browser auf mit:
http://localhost/schueler-max/
🔌 3. Datenbankverbindung herstellen (PDO)
Erstelle eine Datei db.php:
<?php
// db.php – Sichere Verbindung
$host = 'localhost';
$dbname = 'mini_api';
$username = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Verbindung fehlgeschlagen: " . $e->getMessage());
}
?>
💡 Merke:
-
-
utf8mb4 für Umlaute und Emojis-
PDO ist sicherer als alte Methoden
💾 4. Daten sicher speichern (Prepared Statements)
Erstelle speichern.php:
<?php
require_once 'db.php';
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
exit('Nur POST erlaubt');
}
$name = trim($_POST['name'] ?? '');
$text = trim($_POST['text'] ?? '');
if (strlen($name) < 2 || strlen($text) < 5) {
http_response_code(400);
exit('Name (mind. 2 Zeichen), Text (mind. 5 Zeichen)');
}
try {
$stmt = $pdo->prepare("INSERT INTO nachrichten (name, text) VALUES (?, ?)");
$stmt->execute([$name, $text]);
echo "✅ Nachricht gespeichert!";
} catch (PDOException $e) {
http_response_code(500);
error_log("Fehler: " . $e->getMessage());
echo "❌ Speichern fehlgeschlagen.";
}
?>
👁️ 5. Daten abrufen und anzeigen
Erstelle anzeigen.php:
<?php
require_once 'db.php';
$stmt = $pdo->query("SELECT * FROM nachrichten ORDER BY id DESC");
$nachrichten = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Nachrichten</title>
</head>
<body>
<h1>Alle Nachrichten</h1>
<?php foreach ($nachrichten as $n): ?>
<div style="border:1px solid #ccc; padding:10px; margin:10px 0;">
<strong><?= htmlspecialchars($n['name'], ENT_QUOTES, 'UTF-8') ?>:</strong>
<p><?= htmlspecialchars($n['text'], ENT_QUOTES, 'UTF-8') ?></p>
</div>
<?php endforeach; ?>
</body>
</html>
⚠️ Niemals vergessen: Immer
htmlspecialchars() verwenden!
🌐 6. Testen
1. Öffne anzeigen.php
2. Erstelle ein HTML-Formular, das an speichern.php sendet
3. Prüfe: Werden Umlaute korrekt gespeichert?
🔒 7. Sicherheitscheckliste
- ✅ Prepared Statements verwenden
- ✅ Eingaben prüfen (
trim(), Länge) - ✅ Ausgaben entschärfen (
htmlspecialchars()) - ✅ UTF-8 überall (Datenbank, Verbindung, HTML)