Hauptmenü

Untermenü

PHP/MySQL - Fehlersuche - Idiotische Fehler

1. Die Abschnitte

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