PHP/MySQL - Praxistutorial 2 - Notices
1. Die Abschnitte
- Überblick
- Notices
- Notices abfangen
- Daten überprüfen Teil 1
- Daten überprüfen Teil 2
- Daten absichern Teil 1
- Daten absichern Teil 2
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