dedlfix: Unterschiedliches Verhalten bei IE 7 und FF 3

Beitrag lesen

echo $begrüßung;

Im Firefox 3 treten diese Fehler auf:

  • Artikel werden immer doppelt hinzugefügt
  • Klick auf den grünen Button erhöht um 2 statt um 1

Installier dir im FF die livehttpheaders-Extension und beobachte, welche Requests abgesetzt werden.

Was hast du bisher zur Fehlersuche unternommen? Hast du dir beispielsweise anzeigen lassen, wie die SQL-Statements letztlich aussehen, die du dir zusammenbaust? Sind alle Variableninhalte so wie vorgesehen?

//Session starten
session_start();

Kommentare sind gut, wenn sie erklären, was mit dem Code bezweckt wird. Dieser hier ist wenig hilfreich, denn das Starten der Session erkennt man am Aufruf der gleichnamigen Funktion. Kommentiere lieber das was man nicht sieht.

$kat = $_GET['kat']; //Kategorienummer der Übersicht
session_register("kat");

session_register() zu verwenden ist schon seit Jahren nicht mehr nötig. Nimm das Array $_SESSION und schreib da deine Werte rein oder lies sie da aus. Dafür brauchst du keine Extra-Variable, denn du kannst direkt $_SESSION['beispiel'] dort verwenden wo du bisher die registrierte Variablen verwendet hast.

Was hat es für einen Hintergrund, dass du den Warenkorb in der Datenbank ablegst statt die Werte in der Session zu notieren bis die Bestellung perfekt gemacht werden kann? Dir bleiben Session-Tabellen-Leichen in der Datenbank zurück, wenn der Kunde die Bestellung nicht abschließt. Ist dir das bewusst?

echo "<p><b>Fehler, keine Datenbankverbindung!</b></p>";

"Und nun?" frage ich mich als Kunde. "Kann ich anderweitig meinen Bestellwunsch äußern oder soll ich gleich zur Konkurrenz gehen?"

echo "<p>".mysql_error($db)."</p>";

Die genaue Ursache geht den Kunden gar nichts an. Und wenn du nicht möchtest, dass jemand mit der Information Schaden anrichtet, gib sie ihm nicht. Besser ist es, Fehler zu loggen und dieses Log regelmäßig zu beobachten. (Im Fehlerfall eine Email an den Admin senden ist natürlich auch möglich.)

echo "<p align=center>Datensatz $artNr Bestand erschöpft!</p>";
          echo "<p align=center>Datensatz $artNr aktualisiert!</p>";
         echo "<p>".mysql_error($db)."</p>";
         echo "<p>Datensatz konnte nicht aktualisiert werden!</p>";
          echo "<p align=center>Datensatz $artNr eingefügt.</p>";
          echo "<p>".mysql_error($db)."</p>";
          echo "<p>Datensatz konnte nicht eingefügt werden!</p>";

usw. Sind das Informationen, die ein Kunde haben möchte? Schau nicht nur als Programmierer auf dein Werk sondern auch mal aus der Sicht der Anwender.

Ansonsten ist es schon gut, dass du dir über möglicherweise auftretende Fehler Gedanken gemacht hast. Viele Anfänger schreiben nur Schön-Wetter-Skripte.

number_format($sumPrice,2,',','.')."</td></tr>";

Ein paar Leerzeichen mehr erhöhen die Übersicht.

number_format($sumPrice, 2, ',', '.')

Dadurch werden die Parameter auch optisch voneinander abgegrenzt und erhöhen zumindest meine Geschwindigkeit beim Lesen des Codes.

Mir ist klar, dass wohl noch weitere Fehler oder Stilungenauigkeiten im Code sein werden. Für Hinweise dafür bin ich auch immer dankbar. Wichtig ist für mich aber in erster Linie, dieses beschriebene Verhalten zu verstehen!

Ich hab mehr zu diesen Fehlern etwas schreiben können. Das eigentliche Problem erschließt sich mir auch nicht direkt, aber mit Hilfe der oben genannten Werkzeuge hoffe ich, dass du etwas mehr zum Fehler findest. Wenn nicht, sehen wir weiter.

Du hast vermutlich üblicherweise dein Script klein angefangen und nun ist es gewachsen und wird langsam unübersichtlich, nicht zuletzt durch die Vermischung von verarbeitenden und ausgebenden Codeteilen. Wenn du Zeit für einen neuen Versuch hast, versuch dich mal mit dem EVA-Prinzip zu beschäftigen und die Daten verarbeitenden Teile von denen der Ausgabe zu trennen. Sammle zunächst alles was für die Ausgabe benötigt wird zusammen und erzeuge erst dann die Ausgabe. Auch das Thema kontextgerechte Behandlung von Werte solltest du nicht unberücksichtigt lassen.

echo "$verabschiedung $name";