Bahnhofstraße 22, 52134 Herzogenrath Montag - Freitag: 8:00 - 16:30 kontakt@milnersoftware.de 0176 66798849

Aktuelles · PHP · · 3 Min. Lesezeit

PHP „Warning: Undefined array key“: Ursache und saubere Lösung

Seit PHP 8 heißt die Meldung „Undefined array key“ und ist eine Warnung statt eines Hinweises. Woher die fehlenden Schlüssel kommen und wie Sie sie sauber behandeln.

Bildschirm mit Programmcode in einem Editor

Kurz gesagt: „Warning: Undefined array key“ bedeutet, dass der Code auf einen Eintrag in einem Array zugreift, den es nicht gibt, zum Beispiel $_GET['seite'], wenn die Adresse keinen Parameter seite enthält. Bis PHP 7.4 hieß das „Notice: Undefined index“ und fiel kaum auf. Seit PHP 8.0 ist es eine Warnung. Die Lösung: vor dem Zugriff prüfen, ob der Schlüssel existiert, meist mit ?? oder isset().

So sieht die Meldung aus:

Warning: Undefined array key "seite" in /var/www/html/index.php on line 12

Bei numerischen Schlüsseln steht dort zum Beispiel Undefined array key 3. Die verwandte Meldung „Undefined variable“ meint dasselbe für Variablen, die nie gesetzt wurden.

Warum die Meldung nach dem PHP-Update auftaucht

Der Code war schon vorher nicht ganz sauber. Unter PHP 7 hat PHP bei einem fehlenden Schlüssel nur einen Hinweis (Notice) erzeugt, den viele Server gar nicht protokolliert haben. PHP 8.0 hat die Meldung zur Warnung hochgestuft. Seitdem steht sie in den Protokollen, und bei Servern, die Fehler anzeigen, mitten auf der Seite. Weiterhin gilt: Der Ausdruck ergibt null, die Seite läuft weiter. Fehler entstehen erst danach, wenn mit diesem null weitergerechnet wird.

Typische Quellen

  • URL-Parameter und Formulare: $_GET, $_POST, $_REQUEST. Der Besucher hat das Feld nicht ausgefüllt oder die Adresse ohne Parameter aufgerufen.
  • Checkboxen: Eine nicht angehakte Checkbox wird vom Browser gar nicht gesendet.
  • Datenbankzeilen: Eine Abfrage hat keine Zeile gefunden, der Code liest trotzdem $zeile['name'].
  • Externe Daten: Antworten von Schnittstellen (APIs), bei denen ein Feld fehlt.
  • Schleifen: Zugriff auf $liste[$i + 1] beim letzten Element.

So beheben Sie es

Standardwert mit ??

$seite = $_GET['seite'] ?? 'start';
$newsletter = isset($_POST['newsletter']); // Checkbox: true oder false

Prüfen, ob es den Eintrag gibt

$zeile = $stmt->fetch();
if ($zeile === false) {
    // keine Daten gefunden – sauber behandeln
}

isset() oder array_key_exists()?

isset($a['x']) ist falsch, wenn der Schlüssel fehlt oder der Wert null ist. array_key_exists('x', $a) prüft nur, ob der Schlüssel existiert, auch wenn der Wert null ist. Für Formulare und URL-Parameter reicht fast immer ?? oder isset().

Was Sie vermeiden sollten

  • Warnungen abschalten statt die Stellen zu reparieren. In der Folge entstehen oft echte Fehler, etwa wenn mit null gerechnet oder null an eine Funktion übergeben wird. Siehe „Passing null to parameter … is deprecated“.
  • Fehler auf der Live-Seite anzeigen. Im Produktivbetrieb gehört display_errors auf Off, Meldungen nur ins Protokoll. Sonst sehen Besucher Pfade Ihres Servers.
  • @ vor jeden Zugriff setzen. Das versteckt auch die Fälle, in denen etwas wirklich fehlt.

Professionelle Hilfe

Nach einem Sprung von PHP 7 auf PHP 8 stecken solche Meldungen oft zu Hunderten im Protokoll, und dazwischen verstecken sich die echten Fehler. Ich räume das systematisch auf und mache die Anwendung fit für die nächsten PHP-Versionen. Mehr unter PHP-Fehler beheben und PHP-Umstellung beim Hoster.

Geschrieben von Przemysław Milner

Weitere Beiträge