Hauptmenü

Untermenü

PHP/MySQL - Praxistutorial 2 - Notices

1. Die Abschnitte

2. Erläuterung

So, wenn ihr jetzt den Basiscode im Browser aufruft, so erscheint folgende Meldung: Notice: Undefined index: tabelle in euer_pfad\index.php on line 21. Wieso? Ganz einfach, weil in der inc/db.inc.php das Error Reporting hochgeschraubt wurde und nun auch die schon erwähnten Notices ausgeworfen werden.

3. Die Ursache

Wie ich schon hier sagte, sind Notices keine Fehler, sondern nur Hinweise auf schlampigen Code. In diesem Fall prüfen wir eine Variable, die nicht sauber deklariert ist. Oder genauer gesagt, wir versuchen auf ein Element des Arrays $_GET zuzugreifen, das möglicherweise nicht existiert.

Noch ein Beispiel

Klickt jetzt mal in der linken Navigation auf einen beliebigen Punkt. Dann kommen zwei Hinweise à la Notice: Undefined index: id in euer_pfad\index.php on line 60 und Notice: Undefined variable: ausgabe in euer_pfad\inc\functions.inc.php on line 12. Der Grund für das erste Notice ist derselbe wie beim $_GET['tabelle']. Der zweite Hinweis kommt, weil wir in unserem ersten Tutorial einfach eine Zeichenkettenverknüpfung über eine Variable vorgenommen haben, die nicht sauber deklariert worden ist.

4. Erste Lösungsmöglichkeiten

$_GET['tabelle']

Hier gibt es zwei Varianten. Zunächst besteht die Möglichkeit, erst das globale Array GET zu überprüfen und dann den Index tabelle.


if ($_GET)
{
  if ($_GET['tabelle'])
  {
    ...
  }
}

Es gibt aber eine noch einfachere Lösung und die lautet empty. Damit kann man überprüfen ob ein Wert für eine Variable existiert oder nicht.


if (!empty($_GET['tabelle']))

$_GET['id']

Auch das ist Pillepups. Zunächst trifft man mittels Trinitäts- oder Ternäroperator eine einfache Fallunterscheidung. Wo, das überlasse ich euch.


(!empty($_GET['id'])) ? $id $_GET['id'] : $id '';

Dann ändert ihr den Funktionsaufruf in der index.php so.


$code .= showList ($list$id);

Erläuterung

Ich hoffe, ihr wisst, dass der Trinitätsoperator nur eine verkürzte Schreibweise von if ... else ist. Darum ist die Bedingung auch ganz einfach zu erklären. Wenn das Element id des globalen Arrays $_GET nicht leer ist, so übernimmt die Variable $id dessen Wert. Ansonsten bekommt sie einen Leerstring übergeben. Mit Letzterem verhindern wir ein weiteres Notice, da die Variable auf jeden Fall existiert. Probiert es mal mit einem simplen if (!empty($_GET['id'])) $id = $_GET['id']; anstelle obiger Bedingung aus.

$ausgabe

Wie ich schon sagte, haben wir einfach die Variable $ausgabe über den Verknüpfungsoperator aufgebaut. Das ist aber nicht sauber und darum bekommen wir den entsprechenden Hinweis. Auch das kann man leicht umgehen, indem man die entsprechende Variable vor der Schleife deklariert und ihr einen "leeren" Wert zuweist.


function showList ($list$id)
{ 
  $ausgabe '';
  for ($i 0$i count ($list); $i++)
  {
    ...
  }
}

5. Ein erstes Fazit

Ich hoffe, ihr habt das grundsätzliche Problem bei den Notices verstanden. Allerdings war das hier nur Hödelpups im Gegensatz zu dem, was nun kommt. Denn da muss man auf etliche weitere Dinge achten.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt