Gast alexC++ Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 Hallo, ich übergebe 3 Parameter mittels Get (artnr, besch und preis). Diese 3 parameter speichere ich in einem array. dieses array wird dann anschließend einem session-array angehängt. ich gebe das arrray mittels var_dump() aus und der knecht hat mir 2 mal das gleiche array in mein session-array gespeichert. guckst du hier-> session_start(); //Prüfen, ob alle Parameter übermittelt wurden. if(isset($_GET['artnr']) && isset($_GET['besch']) && isset($_GET['preis'])) { //Speichern in Session-Array $warenkorp = array($_GET['artnr'], $_GET['besch'], $_GET['preis']); if(!isset($_SESSION['warenkorp'])) { $_SESSION['warenkorp'] = array(); } $menge = array_push($_SESSION['warenkorp'], $warenkorp); echo $menge; var_dump($_SESSION['warenkorp']); echo "<p> Ihre Session-ID: " . session_id(); } else { exit; }[/PHP] das hier -> if(!isset($_SESSION['warenkorp'])) funktioniert so auch nicht, wie es laut debugger den anschein hat. wie kann man fragen, ob eine session-variable schon existiert? Gruß Alex Zitieren
flashpixx Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 Habe zwar jetzt länger nicht mehr mit PHP und Sessions gearbeitet, aber wenn ich das noch richtig im Kopf habe, musst Du die Session bevor der Header gesendet wird verarbeiten. Der Ausschnitt ist irgendwie etwas undurchsichtig von der Logik. Ich denke Du möchtest doch wenn kein Warenkorb vorhanden ist (bzw keine Übergabeparameter), einen leeren Korb erzeugen und wenn Daten übergeben wurden, den bestehenden ergänzen: $warenkorb = array() if isÜbergabe && isSessionSet then lade Warenkorb aus Session ergänze Daten an Warenkorb fi schreibe Warenkorb in Session Phil Zitieren
Gast alexC++ Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 (bearbeitet) so ähnlich ja! 1. ich überprüfe, ob die parameter alle vorhanden sind, wenn ja werden diese in ein array gespeichert 2. danach prüfe ich, ob das session-objekt vorhanden ist, wenn nicht soll eins angelegt werden. 3. anschließend speichere ich das "normale" array in das session-array wie überprüfe ich, ob der warenkorp (session[warenkorp] schon existiert? Bearbeitet 16. Juni 2009 von alexC++ Zitieren
T3D Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 if(!isset($_SESSION['warenkorp'])) { $_SESSION['warenkorp'] = array(); } mach besser if(count($_SESSION['warenkorp']) == 0) { $_SESSION['warenkorp'] = array(); } [/PHP] im uebrigen muss man variablen in PhP nicht initialisieren hast du mal versucht [PHP] var_dump($_SESSION['warenkorp']); $menge = array_push($_SESSION['warenkorp'], $warenkorp); var_dump($_SESSION['warenkorp']); ist dein warenkorb vorher eventuell vorher schon vorhanden? Zitieren
flashpixx Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 (bearbeitet) wie überprüfe ich, ob der warenkorp (session[warenkorp] schon existiert? Ohne es getestet zu haben: //Session aktuell holen bzw neu initialisieren session_start(); //generell leeren Warenkorb bereitstellen $warenkob = array(); //falls der Warenkorb in der Session existiert _und_ auch ein Array ist, da //wir mit Arrayfunktionen darauf arbeiten möchten prüfen ob der richtige //Typ vorliegt if ( isset($_SESSION("warenkorb")) && (is_array($_SESSION("warenkorb")) ) //Warenkorb aus der Session holen $warenkorb = $_SESSION("warenkorb"); //wenn Parameter vorhanden und nicht leer ist if ( isset($_GET["param"]) && ($_GET["param"] != null) ) //an das Warenkorbarray anhängen array_push($warenkorb, $_GET["param"]); //Warenkorb zurück in die Session schreiben, damit ist auch sichergestellt, //dass falls keine Datenübergeben wurden bzw. fehlerhafte Daten in der //Session standen, beim nächsten Aufruf wieder ein definiertes Array //vorhanden ist. Entweder leer bei Initialisierung / fehlerhaften Daten oder //gefülltes Array mit bestehendem Warenkorb $_SESSION["warenkorb"] = $warenkorb; header()....echo..... [/PHP] evtl dann noch @ bei session_start() ergänzen, falls Du Fehlermeldungen nicht angezeigt haben willst, solltest Du aber durch die php.ini entsprechend Steuern, da sie für's Developing sehr hilfreich sind, nur nicht für den Produktiveinsatz Phil Bearbeitet 16. Juni 2009 von flashpixx Zitieren
T3D Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 noch eine gedankliche stütze, du solltest dir den aufbau der Session in der art dort noch einmal ueberlegen... denn was passiert wenn ich den gleichen artikel noch einmal in den warenkorb packe? oder einen bestimmten entfernen moechte, oder die menge veringern moechte ich wuerd dir raten das ganze ehr so aufzubauen $session["warenkorb"][$artnr]["menge"] $session["warenkorb"][$artnr]["preis"] $session["warenkorb"][$artnr]usw das macht es in der spaeteren verarbeitung bedeutend leichter Ted Zitieren
flashpixx Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 ich wuerd dir raten das ganze ehr so aufzubauen $session["warenkorb"][$artnr]["menge"] $session["warenkorb"][$artnr]["preis"] $session["warenkorb"][$artnr]usw Da würde ich widersprechen, denn warum soll ich hier mit mehreren assoziativen Arrays arbeiten, es führt schneller zu Fehlern, falls es mal vergessen wird. Ich würde zu einer entsprechenden Klasse greifen, damit steht in der Session nur ein Objekt, jeder Artikel ist ebenfalls Objekt und da Objekte serialisierbar sind, besteht auch kein Problem diese in einer Session abzulegen. Phil Zitieren
Gast alexC++ Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 ted ist dein warenkorb vorher eventuell vorher schon vorhanden? ja, es sieht so aus! wenn ich debugge und bei der ersten seite den button "zum warenkorp" klicke, dann öffnet er mir die seite und ich sehe das var_dump() schon, obwohl ich ab anfang der seite debugge. Zitieren
T3D Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 Da würde ich widersprechen, denn warum soll ich hier mit mehreren assoziativen Arrays arbeiten, es führt schneller zu Fehlern, falls es mal vergessen wird. Ich würde zu einer entsprechenden Klasse greifen, damit steht in der Session nur ein Objekt, jeder Artikel ist ebenfalls Objekt und da Objekte serialisierbar sind, besteht auch kein Problem diese in einer Session abzulegen. Phil natuerlich, geb ich dir vollkommen recht, aber seine session ist momentan aehnlich aufgebaut und ich wollte davon nicht soweit abweichen $session["warenkorb"][0]["menge"] $session["warenkorb"][0]["preis"] $session["warenkorb"][1]["menge"] $session["warenkorb"][1]["preis"] $session["warenkorb"][2]usw so muesste seine Session bei mehreren artikeln im moment aussehn Zitieren
T3D Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 ja, es sieht so aus! wenn ich debugge und bei der ersten seite den button "zum warenkorp" klicke, dann öffnet er mir die seite und ich sehe das var_dump() schon, obwohl ich ab anfang der seite debugge. ich nehme an das er die seite 2 x aufruft. includierst du die irgendwo? edit: sry 4 doppelpost Zitieren
Gast alexC++ Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 var_dump() beim ersten aufruf. wenn ich dann ein anderes fahrzeug in den warenkorp lege, seht der Audi 2 mal drin array 0 => array 0 => string '2' (length=1) 1 => string 'Audi A6 quattro Baujahr 2008, 235 PS' (length=36) 2 => string '35000.00' (length=8) 3 => int 1 [/PHP] nach 2tem aufruf steht 2 mal der a6 drin und 1mal der a8. wenn ich nochmal die seite aufrufe stehen beide 2 mal drin [PHP] array 0 => array 0 => string '2' (length=1) 1 => string 'Audi A6 quattro Baujahr 2008, 235 PS' (length=36) 2 => string '35000.00' (length=8) 3 => int 1 1 => array 0 => string '2' (length=1) 1 => string 'Audi A6 quattro Baujahr 2008, 235 PS' (length=36) 2 => string '35000.00' (length=8) 3 => int 1 2 => array 0 => string '3' (length=1) 1 => string 'Audi A8 Baujahr 2008, 355 PS' (length=28) 2 => string '67000.00' (length=8) 3 => int 1 Zitieren
Gast alexC++ Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 nein ich includiere nirgends Zitieren
flashpixx Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 Da wir nur Ausschnitte vom Code sehen, können wir nicht wirklich viel helfen. Wenn Du mehr Hilfe benötigst, schaue Dir auch das Log Deines Servers an, wie oft die Datei aufgerufen wird bzw welche Dateien ggf noch zusätzlich aufgerufen werden. Ggf kannst Du diese Daten auch posten Ich ziehe ein required_once einem include immer vor. @T3D: Bezüglich des OOP Designs, es hat schon durchaus Sinn so etwas hier anzubringen, denn diese "Array-Elemente-Schubserei" ist nie hilfreich, eine anständige Kapselung bzw das dazu passende Design, vermeidet entsprechende Fehler Phil Zitieren
Gast alexC++ Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 (bearbeitet) ziehe ich auch vor! nur habe ich beides nicht verwendet wenn ich das ganze per klasse -> objekte löse würde die seite trotzdem 2 mal aufgerufen und ein und das selbe objekt würden 2 mal in der session gespeichert. das ist also nicht das problem (oop) ich kann euch auch die 2 seiten zu schicken, dann könnt ihr mal schauen. wenn ihr zeit habt. ist alles ohne template mit html und php gemixt (bin auf einer schulung und da wird das leider so gemacht) Bearbeitet 16. Juni 2009 von alexC++ Zitieren
flashpixx Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 ziehe ich auch vor! nur habe ich beides nicht verwendet Es muss ja nicht am Include liegen als Bsp: Deine Seite wird aufgerufen, die Session verarbeitet und danach wird ein Header mit einer Locationangabe gesenden, der als Ziel die gleiche Seite hat (So was wie ein Refresh). Dann kann Deine Seite 2 Mal aufgerufen werden. Wenn dann nicht sauber das Verarbeitungshandling ist, passiert genau das. Das würdest Du aber in den Logs des Server sehen, deswegen mein Tipp, schau da erst mal rein ziehe ich auch vor! ich kann euch auch die 2 seiten zu schicken, dann könnt ihr mal schauen. wenn ihr zeit habt. ist alles ohne template mit html und php gemixt (bin auf einer schulung und da wird das leider so gemacht) Poste die Daten als Anhang ins Forum Phil Zitieren
Gast alexC++ Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 hier mein access.log 127.0.0.1 - - [16/Jun/2009:14:16:04 +0200] "GET /Abschlussprojekt/index.php HTTP/1.1" 200 5584 127.0.0.1 - - [16/Jun/2009:14:16:06 +0200] "GET /Abschlussprojekt/warenkorp.php?artnr=1&besch=Audi%20TT,%20Baujahr%202008,%20255%20PS&preis=29000.00 HTTP/1.1" 200 6510 127.0.0.1 - - [16/Jun/2009:14:16:06 +0200] "GET /Abschlussprojekt/warenkorp.php?artnr=1&besch=Audi%20TT,%20Baujahr%202008,%20255%20PS&preis=29000.00 HTTP/1.1" 200 7044 wird also 2 mal aufgerufen. wie geht das mit dem hochladen? wollte ein 7-zip datei und 2 php-dateien hochladen, dann sagt er mir ungültige datei. Zitieren
Gast alexC++ Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 ok habe mein problem gefunden. es lag beim auruf der seite hatte ein link und in dem link -> <input type='image' src...> wusste nicht, dass ding auch weiterleitet. danke für die hilfe Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.