Einleitung
PHP bleibt trotz der vielen Alternativen eine der beliebtesten Sprachen für die Webentwicklung. Anfänger machen jedoch oft typische Fehler, die zu Sicherheitslücken, Leistungseinbußen oder einfach zu nicht funktionierendem Code führen können. In diesem Artikel besprechen wir die Top-5-Fehler von PHP-Anfängern, zeigen Beispiele für falschen Code und geben Empfehlungen zur Behebung. Das Material ist sowohl für diejenigen nützlich, die gerade erst mit PHP beginnen, als auch für diejenigen, die ihr Wissen auffrischen möchten.
1. Ignorieren der Sicherheit: SQL-Injection und XSS
Der häufigste und gefährlichste Fehler ist die unzureichende Filterung von Benutzereingaben. Viele Anfänger übernehmen Daten direkt aus $_GET oder $_POST und setzen sie ungefiltert in SQL-Abfragen ein oder geben sie auf der Seite aus.
Falscher Code (SQL-Injection)
<?php$username = $_POST['username'];$password = $_POST['password'];
// Angreifbare Abfrage$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";$result = mysqli_query($conn, $sql);?>Wenn ein Angreifer im Feld username den Wert ' OR '1'='1 eingibt, gibt die Abfrage alle Benutzer zurück, und die Anmeldung erfolgt ohne Passwort.
Richtiger Code (Verwendung von Prepared Statements)
<?php$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");$stmt->bind_param("ss", $username, $password);$stmt->execute();$result = $stmt->get_result();?>Gleiches gilt für die Ausgabe von Daten in HTML. Verwenden Sie immer htmlspecialchars() zum Escapen von Sonderzeichen:
<?phpecho htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');?>2. Vernachlässigung der strengen Typisierung
PHP ist eine dynamisch typisierte Sprache, und Anfänger verlassen sich oft auf die automatische Typumwandlung. Dies kann zu unerwarteten Ergebnissen führen, insbesondere bei Vergleichen.
Beispiel für nicht offensichtliches Verhalten
<?php$value = "100 apples";if ($value == 100) { echo "Gleich 100"; // Gibt "Gleich 100" aus!}?>Der String "100 apples" wird implizit in die Zahl 100 umgewandelt, daher ist die Bedingung wahr. Verwenden Sie strikte Vergleiche (===) und strenge Typisierung in modernen Projekten:
Empfehlungen
- Deklarieren Sie
declare(strict_types=1);am Anfang jeder Datei. - Verwenden Sie strikte Vergleiche
===und!==anstelle von==und!=. - Geben Sie die Typen von Argumenten und Rückgabewerten von Funktionen explizit an.
<?phpdeclare(strict_types=1);
function calculateTotal(float $price, int $quantity): float { return $price * $quantity;}?>3. Speicherlecks und ineffiziente Ressourcenverwaltung
Anfänger vergessen oft, Dateien, Datenbankverbindungen zu schließen oder Speicher nach der Arbeit mit großen Datenmengen freizugeben. In PHP arbeitet der Garbage Collector automatisch, aber das bedeutet nicht, dass man die Ressourcenverwaltung ignorieren kann.
Typischer Fehler: Nicht geschlossene Verbindung
<?php$conn = new mysqli($host, $user, $pass, $db);// ... viel Code ...// Vergessen, $conn->close(); aufzurufen?>Richtiger Ansatz: Verwendung von try-finally oder Resource Manager
<?php$conn = new mysqli($host, $user, $pass, $db);try { // Arbeit mit der DB} finally { $conn->close();}?>Verwenden Sie für Dateiarbeiten fopen()/fclose() im Paar und für große Arrays unset() nach der Verwendung. In modernen PHP-Versionen können Sie Generatoren (yield) verwenden, um große Datenmengen zu verarbeiten, ohne alles in den Speicher zu laden.