Formulare sind ein essentieller Bestandteil moderner Webanwendungen und bilden die Grundlage für die Interaktion zwischen Nutzern und dem Backend. In PHP gibt es verschiedene Methoden, um Formulardaten zu verarbeiten, zu validieren und sicher zu speichern.
Ein HTML-Formular wird in der Regel mit der
<form>-Tag-Syntax erstellt und enthält verschiedene
Eingabefelder. PHP kann die übermittelten Daten über die superglobalen
Arrays $_GET, $_POST und
$_REQUEST verarbeiten.
<!-- Einfaches Kontaktformular (contact.html) -->
<form action="process.php" method="post">
<div>
<label for="name">Name:</label>
<input type="text" id="name" name="name" required>
</div>
<div>
<label for="email">E-Mail:</label>
<input type="email" id="email" name="email" required>
</div>
<div>
<label for="message">Nachricht:</label>
<textarea id="message" name="message" required></textarea>
</div>
<button type="submit">Absenden</button>
</form>Im PHP-Skript process.php können wir auf die
übermittelten Daten zugreifen:
<?php
// Verarbeitung des Kontaktformulars (process.php)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
$message = $_POST['message'] ?? '';
// Weitere Verarbeitung...
echo "Formular wurde abgesendet von: $name ($email)";
}Die beiden häufigsten Methoden für die Datenübermittlung sind GET und POST:
<?php
// GET-Methode
if (isset($_GET['search'])) {
$searchTerm = $_GET['search'];
echo "Sie haben nach '$searchTerm' gesucht.";
}
// POST-Methode
if (isset($_POST['password'])) {
$password = $_POST['password'];
// Niemals Passwörter im Klartext ausgeben!
echo "Passwort wurde übermittelt.";
}Die Validierung von Eingabedaten ist ein kritischer Sicherheitsaspekt. Niemals sollten ungeprüfte Benutzerdaten verarbeitet werden.
<?php
// Einfache Validierung von Formulardaten
$errors = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Name validieren
$name = trim($_POST['name'] ?? '');
if (empty($name)) {
$errors[] = "Name ist erforderlich.";
} elseif (strlen($name) > 100) {
$errors[] = "Name darf maximal 100 Zeichen lang sein.";
}
// E-Mail validieren
$email = trim($_POST['email'] ?? '');
if (empty($email)) {
$errors[] = "E-Mail ist erforderlich.";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "E-Mail-Format ist ungültig.";
}
// Wenn keine Fehler aufgetreten sind, weiterverarbeiten
if (empty($errors)) {
// Erfolgreiche Verarbeitung
echo "Formular erfolgreich validiert!";
} else {
// Fehler anzeigen
echo "<ul>";
foreach ($errors as $error) {
echo "<li>$error</li>";
}
echo "</ul>";
}
}Neben der Validierung ist auch die Bereinigung (Sanitization) von Eingabedaten wichtig, um beispielsweise XSS-Angriffe zu verhindern:
<?php
// Bereinigung von Eingabedaten
$name = htmlspecialchars(trim($_POST['name'] ?? ''), ENT_QUOTES, 'UTF-8');
$email = filter_var(trim($_POST['email'] ?? ''), FILTER_SANITIZE_EMAIL);
$message = htmlspecialchars(trim($_POST['message'] ?? ''), ENT_QUOTES, 'UTF-8');Eine gute Nutzererfahrung beinhaltet das Beibehalten von bereits eingegebenen Daten, wenn das Formular aufgrund von Validierungsfehlern erneut angezeigt wird:
<?php
// Formular mit persistenten Daten
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
$message = $_POST['message'] ?? '';
?>
<form method="post">
<div>
<label for="name">Name:</label>
<input type="text" id="name" name="name" value="<?php echo htmlspecialchars($name); ?>" required>
</div>
<div>
<label for="email">E-Mail:</label>
<input type="email" id="email" name="email" value="<?php echo htmlspecialchars($email); ?>" required>
</div>
<div>
<label for="message">Nachricht:</label>
<textarea id="message" name="message" required><?php echo htmlspecialchars($message); ?></textarea>
</div>
<button type="submit">Absenden</button>
</form>PHP unterstützt auch das Hochladen von Dateien über Formulare. Hierzu
wird das enctype-Attribut auf
multipart/form-data gesetzt:
<form action="upload.php" method="post" enctype="multipart/form-data">
<div>
<label for="profileImage">Profilbild:</label>
<input type="file" id="profileImage" name="profileImage">
</div>
<button type="submit">Hochladen</button>
</form>Die Verarbeitung des Uploads in PHP:
<?php
// Datei-Upload-Verarbeitung (upload.php)
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['profileImage'])) {
$file = $_FILES['profileImage'];
// Prüfen auf Fehler
if ($file['error'] === UPLOAD_ERR_OK) {
// Validieren des Dateityps
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (in_array($file['type'], $allowedTypes)) {
// Zielverzeichnis
$uploadDir = 'uploads/';
// Eindeutigen Dateinamen generieren
$filename = uniqid() . '_' . basename($file['name']);
$destination = $uploadDir . $filename;
// Datei verschieben
if (move_uploaded_file($file['tmp_name'], $destination)) {
echo "Datei wurde erfolgreich hochgeladen: $destination";
} else {
echo "Fehler beim Verschieben der Datei.";
}
} else {
echo "Ungültiger Dateityp. Erlaubt sind nur JPG, PNG und GIF.";
}
} else {
echo "Fehler beim Upload: " . $file['error'];
}
}Cross-Site Request Forgery (CSRF) ist eine häufige Angriffsmethode. Ein einfacher Schutz besteht in der Verwendung von Token:
<?php
// CSRF-Token-Generierung
session_start();
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
$csrfToken = $_SESSION['csrf_token'];
?>
<form method="post">
<input type="hidden" name="csrf_token" value="<?php echo $csrfToken; ?>">
<!-- Weitere Formularfelder -->
<button type="submit">Absenden</button>
</form>
<?php
// CSRF-Token-Validierung bei Formularübermittlung
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('CSRF-Token-Validierung fehlgeschlagen.');
}
// Formularverarbeitung fortsetzen...
}In modernen PHP-Frameworks wie Laravel oder Symfony wird die Formularverarbeitung durch spezielle Komponenten vereinfacht. Diese bieten erweiterte Funktionen für Validierung, CSRF-Schutz und Dateiuploads. Details dazu werden im Kapitel zu PHP-Frameworks behandelt.
Die sichere Verarbeitung von Formulardaten in PHP umfasst mehrere Schritte:
Diese Grundlagen bilden die Basis für die Entwicklung von sicheren und benutzerfreundlichen Webanwendungen in PHP. In den folgenden Abschnitten werden wir uns mit der Verarbeitung und Speicherung dieser Daten in Dateien und Datenbanken beschäftigen.