Ich habe Tests gefahren, so mit 100 Seiten aufreufen etc. und bin zu dem Schluß gekommen, das die Datenbank schneller ist als die Session-Variable,
Nein, das ist unmöglich. Erstens führst Du in dem problematischen Skript überhaupt keine Änderung an $UserID durch und zweitens stehen alle externen Variablen mit Beginn des Skriptablaufs zur Verfügung.
Dein Skript scheint funktionsmäßig korrekt zu sein, es müßte sich also um ein Cache-Problem handeln. Versuche nochmal, die <meta>-Angaben wie beschrieben per header() auszugeben.
Davon unabhängig würde ich Dir wirklich ans Herz legen, den Warenkorb in die Session zu legen - Du ersparst Dir damit bestimmt die Hälfte vom Code, weil die ganzen voluminösen mysql-Geschichten wegfallen.
____________________________________________________
Also ich habe mir die Dinge die Du schreibst reichlich durch den Kopf gehen lassen. (Ich bin kein Profi, mehr Autodidakt, komme aber zurecht...)
Auf die Idee, alles in die Session zu packen bin ich noch nicht gekommen. Da die Zeit drängt, werde ich es nach Fertigstellung des Projektes ausprobieren. Mir ist wichtig, dass ich auch mal in der DB nachschauen kann, was ab geht im Warenkorb der Leute. Mir ist klar, dass ich auch die Cookies befragen (editieren) könnte, aber, wie gesagt, erst wenn alles anderen läuft. Logischeweise ist das was im Ram liegt, schneller als jede DB-Abfrage, duDu hast also völlig Recht.
Das Hauptproblem habe ich heute übrigend lösen können: Ich habe auf meinem Testsystem den OMNIhttpd - Webserver laufen. Austausch gegen Apache, und alle Probleme sind weg!!! Es lag also am Webserver!
______________________________________________________________
Der "elseif ($Steuerung = 'update')"-Block beispielsweise kann mit allen Eventualitäten auf folgende kurze Zeilen zusammenschrumpfen:
if (isset($_SESSION["artikel"][$MaterialID]))
if ($Art=="plus")
$_SESSION["artikel"][$MaterialID]++;
else
$_SESSION["artikel"][$MaterialID]--;
else
$_SESSION["artikel"][$MaterialID]=1;Weiterhin solltest Du unbedingt:
_____________________________________________________________
Guter Ansatz, danke.
_____________________________________________________________
- register_globals ausschalten und die superglobals $_GET und $_SESSION verwenden, so wie Du es bereits mit $_POST machst. Mit register_globals versaust Du Dir den gesamten Namensraum und öffnest unter Umständen auch noch Sicherheitslöcher, weil man dem Skript gerade bei den URL-Parametern ohne Aufwand x-beliebige Variablen unterjubeln kann. Das ist auch der Grund, warum register_globals jetzt standardmäßig ausgeschaltet ist und diese superglobals eingeführt wurden.
___________________________________________________________
Die Session starte ich im Script beim Login, hier werden nurnoch die benötigten Variablen gelöscht.
___________________________________________________________
Die Session startest Du besser mit session_start(). Damit entfällt die Registrierung jeder einzelnen Variable, weil Du einfach auf $_SESSION zugreifen kannst - jegliche Änderung darin wird beim Skriptende automatisch gespeichert.
Du solltest Daten, die nicht mit 110%-iger Sicherheit aus Zahlen bestehen, immer mit htmlentities() ausgeben. In Deinem Fall betrifft das insbesondere Hersteller- und Artikelname, aber durchaus auch andere Variablen.
Du solltest Dich eventuell mit mysql_escape_string() vertraut machen.
________________________________________________________
Kannte beide Befehle noch nicht, werde sie mir reinziehen...
________________________________________________________
- Deine URLs sind falsch. Das Zeichen & darf in HTML niemals alleine stehen, auch nicht in href-Attributen oder ähnlichem. Willst Du ein Und haben, benutze &. Oder konfiguriere Dein PHP so, daß es auch das Semikolon als Trennzeichen akzeptiert. Siehe auch http://validator.w3.org.
_________________________________________________________
Hab ich geändert. Danke.
_________________________________________________________
Gruß,
soenk.e
_________________________________________________________
Letzte Frage: Ich streite mich immer ein bischen mit den wenigen, mir so bekannten (PHP-)Kumpels: Macht man am Ende der Seite die Verbindung zur Dantenbank aus Performance-Gründen lieber zu oder nicht, wenn ich die selbe DB auf der nächsten Seite wieder brauche? (Mysql_close($link))
Solong Danke erstmal.