Die häufigsten Fehler von PHP-Anfängern: Von A bis Z
PHP ist eine der beliebtesten Sprachen für die Webentwicklung, aber ihre Flexibilität und niedrige Einstiegshürde spielen Anfängern oft einen bösen Streich. Viele angehende Entwickler machen immer wieder dieselben Fehler, die zu Sicherheitslücken, langsamen Websites oder einfach unlesbarem Code führen. In diesem Artikel analysieren wir die häufigsten Fehler von PHP-Entwicklern – von syntaktischen bis hin zu architektonischen – und zeigen, wie man sie behebt.
1. Sicherheitsfehler: Injections und XSS
SQL-Injections
Der häufigste und gefährlichste Fehler ist das direkte Einfügen von Benutzerdaten in eine SQL-Abfrage. Machen Sie das niemals so:
<?php// ❌ GEFÄHRLICH: Anfällig für SQL-Injections$id = $_GET['id'];$query = "SELECT * FROM users WHERE id = $id";$result = mysqli_query($conn, $query);?>Ein Angreifer kann id=1; DROP TABLE users-- übergeben und die Datenbank zerstören. Verwenden Sie immer Prepared Statements:
<?php// ✅ SICHER: Prepared Statement$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");$stmt->bind_param("i", $_GET['id']);$stmt->execute();$result = $stmt->get_result();?>XSS-Angriffe (Cross-Site Scripting)
Die Ausgabe von Benutzerdaten ohne Escaping ist ein weiterer klassischer Fehler von PHP-Entwicklern:
<?php// ❌ GEFÄHRLICH: XSS-Sicherheitslückeecho "Hallo, " . $_GET['name'];?>Wenn der Benutzer ?name=<script>alert('XSS')</script> übergibt, wird das Skript ausgeführt. Verwenden Sie die Funktion htmlspecialchars():
<?php// ✅ SICHER: HTML-Escapingecho "Hallo, " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');?>2. Probleme mit Datentypen und Vergleichen
Implizite Typumwandlung
PHP ist eine Sprache mit schwacher Typisierung, und Anfänger werden oft von unerwartetem Verhalten überrascht:
<?php// ❌ FEHLER: Implizite Umwandlungvar_dump("123abc" == 123); // true! Der String wird in eine Zahl umgewandeltvar_dump(0 == "string"); // true! Der String wird in 0 umgewandelt?>Verwenden Sie den strikten Vergleich === anstelle von ==:
<?php// ✅ RICHTIG: Strikter Vergleichvar_dump("123abc" === 123); // falsevar_dump(0 === "string"); // false?>Verwechslung von empty() und isset()
Viele angehende PHP-Entwickler verstehen den Unterschied zwischen diesen Funktionen nicht:
<?php$var = 0;// ❌ FEHLER: empty() betrachtet 0 als leeren Wertif (empty($var)) { echo "Variable ist leer"; // Wird diese Nachricht ausgeben!}
// ✅ RICHTIG: isset() prüft nur die Existenzif (isset($var)) { echo "Variable existiert und ist gleich " . $var; // Gibt "0" aus}?>3. Schlechte Praxis bei der Arbeit mit Formularen und Daten
Ignorieren der serverseitigen Validierung
Anfänger verlassen sich oft nur auf die clientseitige Validierung (JavaScript), aber ein Angreifer kann eine Anfrage direkt an den Server senden. Überprüfen Sie Daten immer serverseitig:
<?php// ❌ FEHLER: Keine serverseitige Validierung$email = $_POST['email'];mail($email, "Betreff", "Nachricht"); // Kann eine E-Mail an jede Adresse senden
// ✅ RICHTIG: E-Mail prüfen$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);if ($email === false) { die("Ungültige E-Mail");}mail($email, "Betreff", "Nachricht");?>Falsche Verarbeitung von Datei-Uploads
Ein weiterer typischer Fehler von PHP-Entwicklern ist das Speichern von Dateien ohne Überprüfung der Dateierweiterung und des MIME-Typs:
<?php// ❌ GEFÄHRLICH: Ein PHP-Shell kann hochgeladen werdenmove_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
// ✅ SICHER: Dateierweiterung prüfen$allowed = ['jpg