die werte im array werden immer wieder überschrieben.
-
hallo. ich erstelle gerade einen kleinen onlineshop.
auf der startseite kann man auswählen nach was man suchen will zum beispiel hersteller, name, u.s.w dann gibt man das suchwort ein und klickt auf suchen.dann kommt man zu list.php dort werden die daten aus einer csv-datei ausgelesen die mit dem suchwort übereinstimmen. und mann kann dann auf einen artikel klicken hier ein beispiel-link bestellen.php?produktid=277546
wenn man da draufklickt kommt man auf bestellen.php so her ist das problem.
**ich erstelle ein array
artikel[] = _GET['produktid']; nun speichere ich das array in einer session-variable mit serialize wk = serialize(_SESSION['warenkorb'] = wk; ** nun kann der kunde auswählen ob er bestellen will oder noch ein artikel auswählen will wenn er noch mehr bestellen will kommt er wieder auf der startseite wo er suchen muss dann klickt er wieder auf den artikel. und gelangt wieder auf die seite wo ein array erstellt wird(fett geschrieben) wenn er nun auf bestellen geht will ich das array ausgeben. array = unserialize(_SESSION['warenkorb']); print_r(array);
aber es wird immer nur eine nummer ausgegeben weil die anderen überschrieben worden sind. wie kann ich das umgehen?
ohne MySQL und Textdateien.
Vielen Vielen Dank.
-
Due erstelltst immer ein neues Array
$artikel = array();
Du musst das Array $artikel aus der Session auslesen.
if(isset($_SESSION['warenkorb'])) $artikel = $_SESSION['warenkorb'];
Nun kannst
$artikel[] = $_GET['produktid'];
machen und wieder in die Session speichern.
-
... und serialize / unserialize kannst du dir eigentlich beim PHP-Session-Management auch sparen
-
hallo.
danke es hat funktioniert aber dann habe ich was gemacht und es funktioniert nicht mehr.
hier mal der code:<?php session_start(); if(isset($_SESSION['warenkorb'])){ $_SESSION['warenkorb'] = $artikel; } //wenn ich $artikel = $_SESSION['warenkorb']; schreibe kommt ein fehler //andersrum hat es aber auch funktioniert $artikel[] = $_GET['produktid']; $wk = serialize($artikel); $_SESSION['warenkorb'] = $wk; ?>
wo ist hier der fehler?
ich bin am verzweifeln vor ein paar stunden hat es doch noch funktioniert.
vielen vielen dank
-
Du schreibst den Inhalt von _SESSION['warenkorb'])){ $_SESSION['warenkorb'] = $artikel; }
Das ist falsch. Wenn der Warenkorb in der Session gespeichert ist musst diese Speicherung rausholen und in eine Variable schreiben.
Siehe mein Code.
Wenn es eine Fehler gibt poste den. Ich empfehle ein Anfängertutorial.
-
Fatal Error: []operator not supported for strings in insertkorb.php on line 4
<?php session_start(); if(isset($_SESSION['warenkorb'])){ $_SESSION['warenkorb'] = $artikel; } $artikel[] = $_GET['produktid'];//hier $wk = serialize($artikel); $_SESSION['warenkorb'] = $wk; ?>
dieser fehler kommt aber nur wen ich einen 2ten artikel in den warenkorb legen will.
-
<?php session_start(); if(isset($_SESSION['warenkorb'])){ $_SESSION['warenkorb'] = $artikel; } $artikel[] = $_GET['produktid'];//hier $wk = serialize($artikel); $_SESSION['wk'] = $wk;//hier die veränderung ?>
wenn ich es so schreibe kommt zwar der fehler nicht mehr aber es steht dann immer nur ein wert im array.
hat keiner noch ne idee? ich muss morgen früh 9-uhr fertig sein und es ist nur noch dieser eine fehler. ch weis nicht mehr weiter.
vielen vielen dank
-
Speichere doch einfach direkt das Warenkorb-Array in der Session und füge dann über $_SESSION['warenkorb'][] = $_GET['produktid']; die Artikel hinzu
-
@flenders: Das wäre unsauber. Da müsste er auch mit der SESSIONVAR weitermachen. Im Grunde braucht man ja den Inhalt dann irgendwo zum anzeigen.
@mtaesler: Wer nicht umsetzt was man Ihm zeigt dem ist nicht zu helfen.
Gehe ich mal von deiner Denkweise aus:
"Super! Ich habe ein Programm geschrieben das MS vom Markt verdrängt. Der Source läßt sich ohne Fehler kompilieren. Macht ja nichts das er falsch ist und nicht das macht was er eigentlich sollte."In Zkunft schreibe ich auch solche Programme. Hauptsache sie lassen sich ohne Fehler ausführen. Was macht das schon wenn es eigentlich was anderes macht als es sollte.
Das ist mein Code
session_start(); if(isset($_SESSION['warenkorb'])) $artikel = $_SESSION['warenkorb'];
Das ist dein Code
session_start(); if(isset($_SESSION['warenkorb'])){ $_SESSION['warenkorb'] = $artikel; }
Also wo liegt jetzt der UNterschied.
Dein Code macht folgendes:
Du überprüfst ob es $_SESSION['warenkorb'] gibt. Wenn es $_SESSION['warenkorb'] gibt dann legst du eine Variable $artikel an. IN diese STRINGVAR willst du nun einen Wert einfügen. Als Array. Das ist aber kein Array sondern eine STRINGVAR. (FEHLERMELDUNG)
-
Und wofür verwendest du serialize?
-
@Unix-Tom: Warum findest du es unsauber, direkt mit $_SESSION zu arbeiten? Siehst du das bei $_GET & Co. auch so?!
Vorwiegend war meine Aussage aber daraufhin ausgerichtet, dass er sein Array nicht in einen String umzuwandeln braucht (serialize), sondern direkt das Array in der Session hinterlegen kann
-
Auch wenn es etwas Speicher erfordert lege ich immer für alle REQUEST zu beginn VAR an.
Wegen der Übersichtlichkeit habe ich in meinem Seitencode gar keine $SESSION.
Ich habe dafür eine eigene Datei. Dadurch kann ich bestimmte Dinge auf allen Seiten Regeln. z.B. der Ausstieg wenn die Session abgelaufen ist.
-
hallo.
also ich wollte das array ja auch gleich in eine session speichern aber es ging nicht also habe ich mal ein bissl gesucht und da stand halt um array per session zu "senden" braucht man serialize/unserialize.
vielen dank ich werde es nochmal versuchen.