Forum: NOF - Tutorials (185 anschauliche Tutorials zum Lesen und Nacharbeiten) > PHP und MySQL - Tutorials und Kurzanleitungen

Das Script funktioniert nicht - Fehlersuche wenn Scripts nicht laufen

(1/2) > >>

Hans K.:
Debugging - auf deutsch Fehlerbeseitigung ist wesentlicher Bestandteil bei der Programmierung. Immer wieder schleichen sich Fehler ein, sei es aus Unkenntnis oder Flüchtigkeitsfehler, immer wieder mal muss man sich auf die Suche machen.

Ich möchte an dieser Stelle auf einige grundsätzliche Dinge eingehen, dann sollte die Fehlersuche auch zum Erfolg führen.

Grundsätzliches zu Fehlern
Das Paket beim Provider hat kein PHP
Einschalten der Fehlermeldungen
Fehler in den Abfragen (MySQL)
Fehler im Code
logische Fehler

Hans K.:
Grundsätzlich gibt es vier verschiedene Fehler:

1. Das Paket beim Provider hat kein PHP
2. Fehler in den Abfragen (MySQL)
3. Fehler im Code
4. logische Fehler

Weiterhin gibt es vier Fehlertypen:
1. Fatal Errors
2. Parse Errors
3. Warnings
4. Notices

Ein Fatal Error beendet Euer Script und kann vorkommen, wenn etwas auf dem Server nicht in Ordnung ist oder wenn Ihr eine falsche Pfadangabe für den Befehl  require im Script habt.

Ein Parse Error ist nichts Anderes als eine Syntax- oder Grammatikregel, welche nicht beachtet wurde. Beispielsweise wird gerne das Komma am Ende einer Befehlszeile vergessen, das erzeugt einen Parse Error.

Warnings sind hinweise auf logische Fehler. Das Teilen durch Null, oder das inkludieren einer nicht vorhandenen Datei erzeugt ein Warning. Warning bedeutet aber auch, das Script kann grundsätzlich abgearbeitet werden.

Notices werden ausgegeben, wenn die Programmierung zwar den Syntaxregeln entspricht, aber nicht astrein sind. Zum Beispiel die Verarbeitung einer Variablen, welche zuvor nicht definiert wurde erzeugt eine solche Notices.

Tip:
Idealerweise nutzt Ihr Programme wie PSPad, damit erfolgen farbliche Unterscheidungen (Syntax-Highlighting) beim Code. So werden Fehler durchaus schneller erkannt und müssen nicht erst umständlich gesucht werden.

Hans K.:
Nun kennen wir die wesentlichen Fehlerursachen, doch wie gehen wir diese nun an?

Wir beginnen mit dem 1. Das Paket beim Provider hat kein PHP.
Wer sich bisher noch nicht mit Scripts beschäftigt hat, wird nicht unbedingt wissen ob das Paket des Providers PHP beinhaltet. Das kann aber schnell und einfach überprüft werden:

Erstellt eine neue Datei mit dem Namen test.php (z.B. mit dem PSPad oder mit dem Editor unter Zubehör) und tragt folgenden Code ein:


--- Code: PHP ---<?phpphpinfo ();
Diese Datei übertragt Ihr auf Euren Webspace und anschließend ruft Ihr die Datei auf (z.B. www.DeineDomäne.de/test.php).

Wird nun eine Reihe von Settings angezeigt, dann funktionieren PHP Scripte auf dem Webspace.

Hans K.:
Jetzt wissen wir, dass unser Paket PHP beinhaltet (falls nicht, solltet Ihr das direkt beauftragen und könnt hier später weiterlesen  ;-) ).

Somit können wir uns den Fehlermeldungen zuwenden. Zwar sehen wir keine solchen Meldungen wenn unser Script diese erzeugt, aber wir können sie sichtbar machen. error_reporting nennt sich das Geheimnis der Anzeige von Fehlern.

So wie es Fehlertypen gibt, gibt es auch Error-Level:
E_ERROR
E_PARSE
E_WARNING
E_NOTICE
E_ALL

Es gibt noch weitere Level, aber die genannten sind analog zu den Typen die Wichtigsten.
Die ersten vier geben auch exakt die Meldungen aus, welche ich in den Fehlertypen beschrieben habe. E_ALL beinhaltet die vier erstgenannten Level. Da wir grundsätzlich alle Fehler finden wollen, werden wir auch nur E_ALL einsetzen.

Es gibt zwei Möglichkeiten, wo wir einen Code zur Anzeige der Fehlermeldung eintragen können. Entweder in der php.ini Datei, oder direkt im Code.

Da es am einfachsten ist, beschränke ich mich auf die Eingabe im Code:
Im Script auf der Seite direkt nach dem Start des Scriptes <?php gebt Ihr folgende Zeilen ein:

--- Code: PHP ---error_reporting (E_ALL | E_STRICT);ini_set ('display_errors' , 1);Danach folgt Eurer restlicher Code.

Hans K.:
Nun wenden wir uns 2. Fehler in den Abfragen (MySQL) zu.

Hier ist eine Abfrage zu unserem Motorradbeispiel (dynamische Seitenerstellung):

--- Code: PHP ---<?phpinclude("./html/datenbank.php"); $sql="SELECT ID, Modell, Hubraum, Nennleistung FROM Moped WHERE ID = '1'";$result = mysql_query($sql);$row = mysql_fetch_array($result); ?>Was passiert, wenn wir falsche Spalten angegeben haben, oder eine falsche Tabelle ausgewählt haben?
Wir wissen es nicht.
Mit
--- Code: PHP ---or die (mysql_error())können wir uns eine fehlerhafte Ausgabe anzeigen lassen.

--- Code: PHP ---<?phpinclude("./html/datenbank.php"); $sql="SELECT ID, Modell, Hubraum, Nennleistung FROM Moped WHERE ID = '1'";$result = mysql_query($sql) or die (mysql_error());$row = mysql_fetch_array($result); ?>
Nun werden uns Fehlermeldungen angezeigt, welche wir beseitigen können.

Tip:
Manche Bezeichnungen als Spaltennamen bereiten grundsätzlich Probleme. delete, update, show sind zum Beispiel Befehle für MySQL und wenn diese verwendet werden, müssen in der Abfrage diese in sogenannte backticks gesetzt werden (`), nicht in Anführungszeichen oder Komatas.
Entweder vermeidet man diese Bezeichnungen, oder man gewöhnt sich daran, grundsätzlich in Abfragen alle Spaltenbezeichnungen in backticks zu setzen.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln