Deutschsprachiges NOF - Forum

Support und Tutorials rund um das Thema NetObjects Fusion

collapse

* Wichtige Mitglieder-Information

Aufgrund der anstehenden gesetzlichen Änderungen in Sachen Datenschutz habe ich am 03.05.2018 eine umfassende Bereinigung unserer Datenbanken vorgenommen.

Bei dieser Bereinigung habe ich alle personenbezogenen und privaten Daten unserer Mitglieder aus den Mitglieder- , Beitrags- und Nachrichtendatenbanken gelöscht.

Konkret von der Löschung betroffen waren hierbei im Wesentlichen folgende Daten:

persönliche Avatare
E-Mail-Adressen
Angaben zum Wohnort
Angaben zum Geschlecht
Angaben zu Alter und Geburtstag
IP-Adressen
Websites und Websitetitel
Signaturen
Angaben zu diversen Messengern
Passwörter
Sicherheitsfragen und -antworten
Angaben zur verwendeten Programmversion
Angaben zum verwendeten Betriebssystem
sämtlicher persönlicher Schriftverkehr in Form privater Nachrichten

Beste Grüße nettesekel

* Friendship

DER Katzenblog – mit tollen Tipps und Ideen für deine Katze(n) <3

Die letzten Beiträge

Autor Thema: Das Script funktioniert nicht - Fehlersuche wenn Scripts nicht laufen  (Gelesen 3283 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