PHP/MySQL - Fehlersuche - Idiotische Fehler
1. Die Abschnitte
- Überblick
- Fehlertypen
- Error Reporting
- MySQL-Fehler
- Syntaxfehler
- Idiotische Fehler
- Testausgaben
- Falsche Fehler
- Fehler unterdrücken
2. Woran erkennt man Programmierer?
An der flachen Stirn. Warum? Permanentes Kopf-auf-den-Tisch-schlagen! Nicht lachen, manche Fehler sind tatsächlich soooooo dämlich, dass selbst Profis daran verzweifeln können. Ein paar Beispiele gefällig?
3. Der verfluchte Mathematikunterricht
In der Schule haben unsere Mathelehrer versucht, uns einzubimsen, dass ein Vergleich so aussieht. 2x = 6
.
Oder solche Geschichten. Wenn a = b und b = c dann c = a
. Offenbar haben sie mit ihren Bemühungen einen
durchschlagenden Erfolg gehabt, denn ständig passieren bei Vergleichen diese Dinge.
<?php
if ($dings = 'bumms')
?>
Seht ihr den Fehler? Nein? Keine Angst, ich auch nicht, jedenfalls nicht immer. Schuld daran ist der jahrelange verdammte Mathematikunterricht! Oder Programmieren mit Pascal. Kommen wir jetzt zur Fehleranalyse.
Ist es eine Bedingung? Ja!
Wann ist diese Bedingung wahr? Immer!
Hä?
Ja, diese Bedingung ist immer wahr. Warum? Weil das einfache Gleichheitszeichen ein Zuweisungsoperator ist und kein
Vergleichoperator. Umgangssprachlich konnte man es so formulieren. Diese Bedingung ist wahr, wenn ich der Variable
$dings
den Wert bumms
zuweisen kann. Und das geht in PHP immer, da es sich
um eine schwach bzw. dynamisch
getypte Sprache handelt. Also immer daran denken. Für Vergleiche nimmt man mindestens
zwei Gleichheitszeichen (drei für Vergleiche auf Binärebene oder Typengleichheit).
<?php
if ($dings == 'bumms')
?>
Wenn man auf Nummer Sicher gehen will, so kann auch die Reihenfolge der Werte ändern. Sollte man dann nur ein Gleichheitszeichen setzen, wird eine Fehlermeldung ausgegeben. Das nennt man übrigens den Yoda-Style. "Anders herum du musst".
<?php
// Korrekt
if ('bumms' == $dings)
// Parse Error
if ('bumms' = $dings)
?>
Wichtig
Bitte verwechselt das nicht mit korrekten Zuweisungen(!) in Bedingungen oder Schleifen, wie zum Beispiel
<?php
while ($row = mysql_fetch_assoc($result)) {
...
}
if ($open = fopen ('bla.txt','r')) {
...
}
?>
4. Das verfluchte Semikolon
Mir selber ist das noch nie passiert, ich habe aber in meinem Lieblingsforum schon oft gesehen, dass dieser Bock geschossen wurde. Man glaubt es kaum. Diese Semikolons kann man nicht nur zu selten, sondern auch zu oft einsetzen. Und dabei kommt dann so was heraus.
<?php
$dings = 3;
$bumms = 10;
while ($dings < $bumms);
{
echo $dings.'<br>';
$dings ++;
}
?>
Der Browser nudelt und nudelt, PHP auch und irgendwann habt ihr einen von beiden ins Nirvana geschickt. Und warum? Nun
was bewirkt denn das Semikolon am Ende der Zeile mit der while
-Schleife. Ganz einfach, die
Anweisungen innerhalb dieses Blockes werden nicht ausgeführt, da beim while
durch das Semikolon abgebrochen
wird. Und da diese Bedingung bis in alle Ewigkeit wahr ist oder irgendwer mal den Stecker zieht, produziert ihr eine
klassische Endlosschleife.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt