Deutschsprachiges NOF - Forum

Support und Tutorials rund um das Thema NetObjects Fusion

collapse

* Alles hat ein Ende...

Eine Weisheit der Dakota-Indianer sagt:
"Wenn Du entdeckst, dass Du ein totes Pferd reitest, steig ab!"

Vor fast fünf Jahren habe ich die NOF-Community gegründet und nachdem just zu diesem Zeitpunkt das „alte NOF-Forum“ quasi über Nacht vom Betreiber geschlossen wurde, war mein Forum für viele Nutzer von NetObjects Fusion eine willkommene Alternative.

Inzwischen sind weit über 5000 NetObjects-Nutzer in der NOF-Community registriert und täglich kommen weitere hinzu. An interessierten Mitgliedern fehlt es also nicht. Was aber fehlt, sind Mitglieder, die Lust haben, anderen Nutzern bei der Lösung ihrer vielfältigen Probleme in der Anwendung von NetObjects Fusion zu helfen. Vielleicht, weil viele von ihnen - ebenso wie ich - das Interesse an NOF verloren haben und zwischenzeitlich mit anderen Programmen arbeiten.

Aktuell ist es so, dass der Support wie die Kosten für den Betrieb der NOF-Community fast ausschließlich von mir übernommen werden. Dies, und die Tatsache, dass ich die Arbeit mit NetObjects Fusion nicht mehr für zeitgemäß halte, veranlasst mich, den aktiven Forenbetrieb zu beenden. Die Beiträge, Tipps und Anleitungen aus den letzten Jahren stehen ab heute nur noch als Nachschlagewerk zur Verfügung.

Ich bedanke mich an dieser Stelle ganz herzlich bei allen, die mich und die NOF-Community in den vergangenen Jahren unterstützt haben.

Beste Grüße nettesekel

Die letzten Beiträge

Autor Thema: Das Script funktioniert nicht - Fehlersuche wenn Scripts nicht laufen  (Gelesen 3002 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Hans K.

  • Gast
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
« Letzte Änderung: 04. April 2013, 02:37:55 von Hans K. »

Hans K.

  • Gast
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.
« Letzte Änderung: 04. April 2013, 01:31:30 von Hans K. »

Hans K.

  • Gast
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
  1. <?php

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.

  • Gast
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
  1. error_reporting (E_ALL | E_STRICT);
  2. ini_set ('display_errors' , 1);
Danach folgt Eurer restlicher Code.

Hans K.

  • Gast
Nun wenden wir uns 2. Fehler in den Abfragen (MySQL) zu.

Hier ist eine Abfrage zu unserem Motorradbeispiel (dynamische Seitenerstellung):
Code: PHP
  1. <?php
  2. include("./html/datenbank.php");
  3.  
  4. $sql="SELECT ID, Modell, Hubraum, Nennleistung FROM Moped WHERE ID = '1'";
  5. $result = mysql_query($sql);
  6. $row = mysql_fetch_array($result);
  7.  
  8. ?>
Was passiert, wenn wir falsche Spalten angegeben haben, oder eine falsche Tabelle ausgewählt haben?
Wir wissen es nicht.
Mit
Code: PHP
können wir uns eine fehlerhafte Ausgabe anzeigen lassen.
Code: PHP
  1. <?php
  2. include("./html/datenbank.php");
  3.  
  4. $sql="SELECT ID, Modell, Hubraum, Nennleistung FROM Moped WHERE ID = '1'";
  5. $result = mysql_query($sql) or die (mysql_error());
  6. $row = mysql_fetch_array($result);
  7.  
  8. ?>

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.

Hans K.

  • Gast
Kommen wir nun zu dem 3. Fehler im Code.

Der wohl häufigste Fehler ist eine nicht korrekte Klammernsetzung. Dabei spielt es keine Rolle, ob geschweifte oder runde Klammern falsch gesetzt sind, diese erzeugen immer einen Parse Error.

Wie kann das  vermieden werden? Zählen, zählen und nochmals zählen. Zählt die Klammern durch, es müssen immer genausoviele geschlossen werden, wie geöffnet sind.
Um das übersichtlicher zu gestalten, sollte man mit Einrückungen arbeiten. Dabei springt man immer um einen Tabulator weiter, wenn man eine geöffnete geschweifte Klammer gesetzt hat (und natürlich immer einen Tabulator weniger, wenn die Klammer geschlossen wird).


Falsch gesetzte Anführungszeichen, bzw. Hochkommas, sowie Semikolons erzeugen ebenfalls Parse Error. Zum Beispiel folgender Code:
Code: PHP
  1. <?
  2. echo 'Hello';
  3. echo 'World'

Parse error: syntax error, unexpected T_ECHO, expecting ',' or ';' in DeineDomäne.de\Seitenname.php on line 3
bedeutet, in der Zeile 3 fehlt hinter dem Echo Befehl ein Semikolon.

Währenddessen
Code: PHP
  1. <?
  2. echo 'Hello
  3. echo 'World';

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in DeineDomäne.de\Seitenname.php on line 3
zwar auf einen ähnlichen Fehler hindeutet, aber ein Hochkomma beim ersten Echo der Fehler ist.

Hier muss man absolut logisch denken, dann versteht man auch warum das so ist. Der Interpreter liest den Code so:
Code: PHP
  1. <?
  2. echo 'Hello echo '
  3. World';
Somit fehlt von der Logik her ein Semikolon in Zeile 2 hinter dem Hochkomma (wobei das echo ja in Zeile 3 steht und deshalb Zeile 3 als fehlerhafte Zeile ausgewiesen wird).

Hans K.

  • Gast
Der letzte Punkt kann durchaus der schwierigste sein: 4. logische Fehler

Kernaussage ist : Das Script läuft, aber das Ergebnis ist nicht das erwartete.

Um den logischen Ablauf zu überprüfen, sollten eingesetzte Variablen sichtbar gemacht werden.

Sieht das Script zum Beispiel so aus:
Code: PHP
  1. <?php
  2. $zahl1 = 10;
  3. $zahl2 = 5;
  4.  
  5. $addition = $zahl1 + $zahl2;
  6. $subtraktion = $zahl1 - $zahl2;
  7. $multiplikation = $zahl1 * $zahl2;
  8. $division = $zahl1 / $zahl2;
  9. ?>

Dann kann zur Überprüfung einfach ein echo mit den Variablen angehangen werden:
Code: PHP
  1. <?php
  2. $zahl1 = 10;
  3. $zahl2 = 5;
  4.  
  5. $addition = $zahl1 + $zahl2;
  6. $subtraktion = $zahl1 - $zahl2;
  7. $multiplikation = $zahl1 * $zahl2;
  8. $division = $zahl1 / $zahl2;
  9.  
  10. echo $addition;
  11. echo $subtraktion;
  12. echo $multiplikation;
  13. echo $division;
  14. ?>

Wenn nun auf dem Bildschirm 155502 zu sehen ist, dann ist der Code bis hierhin funktionell.
Auch wenn das jetzt ein sehr schlichtes Beispiel ist, bei komplexeren Scripts funktioniert es genau so. Wenn Variablen verarbeitet werden, an geeigeneten Stellen eine Ausgabe mit echo erzeugen, um die Variable zu überprüfen.

Hans K.

  • Gast
Wenn das Script nun fehlerfrei läuft, kann der vorhin eingefügte Code wieder entfernt werden:
Code: PHP
  1. error_reporting (E_ALL | E_STRICT);
  2. ini_set ('display_errors' , 1);

Deutschsprachiges NOF - Forum

Support und Tutorials rund um das Thema NetObjects Fusion

 


Wenn dir dieser Artikel gefallen hat, dann empfehle ihn doch weiter... ;)