20. februar 2006 - 13:14
Der er
20 kommentarer og 1 løsning
Gemme varer i kurv
Hej :) Sidder og leger med noget meget simpelt shop, men sider lidt fast.. Jeg har alle varerne listet på en lang liste, hvor man kan skrive antal, og så trykke "læg i kurv" ved hver af dem. Hvis jeg lægger f.eks. 5 varer i kurven, alle med forskelligt antal af hver, hvordan gør jeg så sådan, at den gemmer dataerne fra varerne (id, pris, antal) i en form for session variabel, så jeg let kan få adgang til dem igen, når jeg på næste side skal checke hvad der er i kurven? Håber I kan hjælpe :)
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
20. februar 2006 - 13:21
#1
Et bud: Du kunne f.eks. lave et stort multidimensionelt array hvor hele indkøbskurven er gemt i: f.eks.. kurv ( [0] = array ( id, pris, antal ) <-- vare 1 [1] = array ( id, pris, antal ) <-- vare 2 ) Rent praktisk: $kurv = array(); $kurv[] = array($id, $pris, $antal); og så gemme $kurv som en sessionsvariabel ($_SESSION['kurv'] = $kurv); Når du så skal hente varene ud igen kan du f.eks.: foreach($_SESSION['kurv'] as $key => $ar) { echo "id = " . $ar[0]; //osv }
20. februar 2006 - 13:30
#2
Det fungerer (næsten) perfekt :) Jeg har følgende kode: if(isset($_POST['bestil']) && $_POST['bestil'] == "Læg i kurv") { $kurv = array(); $kurv[] = array($_POST['id'],$_POST['pris'],$_POST['antal']); $_SESSION['kurv'] = $kurv; } foreach($_SESSION['kurv'] as $key => $ar) { echo "id = " . $ar[0] . "<br>"; echo "pris = " . $ar[1] . "<br>"; echo "antal = " . $ar[2] . "<br>"; //osv } Den udskriver id, pris og antal præcis som den skal. Men når jeg så lægger en ny vare i kurven, overskriver den så ikke bare den gamle variabel? Eller har jeg glemt noget undervejs? Hvis du forstår?
20. februar 2006 - 13:34
#3
Problemet er: $kurv = array() så laver den en ny kurv hver gang man lægger en vare i :) du kunne f.eks. omskrive den del til: if(isset($_POST['bestil']) && $_POST['bestil'] == "Læg i kurv") { if (!isset($_SESSION['kurv'])) $_SESSION['kurv'] = array(); //Hvis kurven ikke findes i forvejen, så opretter den en $_SESSION['kurv'] = array($_POST['id'],$_POST['pris'],$_POST['antal']); //Smid direkte i sessionsvariablen }
20. februar 2006 - 13:36
#4
hov... $_SESSION['kurv'] skal selvfølgelig være: $_SESSION['kurv'][]
20. februar 2006 - 13:36
#5
I anden sidste linje, DOH.
20. februar 2006 - 13:38
#6
altså: if (!isset($_SESSION['kurv'])) { $_SESSION['kurv'] = array(); } //Hvis kurven ikke findes i forvejen, så opretter den en $_SESSION['kurv'][] = array($_POST['id'],$_POST['pris'],$_POST['antal']); //Smid direkte i sessionsvariablen Eller hvad? :P hehe
20. februar 2006 - 13:39
#7
Yes :)
20. februar 2006 - 13:40
#8
Okay..... Så til noget andet mærkeligt: Warning: Invalid argument supplied for foreach() in C:\Programmer\Apache Group\Apache2\htdocs\bb\bestil.php on line 22 Samme foreach() som før... men nu med dejlig fejl :/ :P
20. februar 2006 - 13:41
#9
Den er vel og mærket: foreach($_SESSION['kurv'] as $key => $ar) { echo "id = " . $ar[0] . "<br>"; echo "pris = " . $ar[1] . "<br>"; echo "antal = " . $ar[2] . "<br>"; //osv } :)
20. februar 2006 - 13:56
#10
Har du husket at smide en sesssion_start() i toppen af dokumentet?
20. februar 2006 - 13:58
#11
ja da :) Ellers ville den heller ikke have givet resultat første gang :)
20. februar 2006 - 14:02
#12
if (!isset($_SESSION['kurv'])) { $_SESSION['kurv'] = array(); } skal vel egentlig også uden for den "if-sætning". Altså lige efter session_start'en
20. februar 2006 - 14:04
#13
Undskyld, men det fattede jeg ikke meget af :P
20. februar 2006 - 14:33
#14
Bare flyt den linje til linjen efter session_start();
20. februar 2006 - 14:37
#15
Ja, så giver den heller ikke den fejl mere. Men hvis jeg stå trykker på varen med id 1, pris 3 og antal 1, så udskriver den: id = 1 pris = antal = id = 3 pris = antal = id = 3 pris = antal = ???? :P hehe
20. februar 2006 - 14:41
#16
Giv mig noget mere kode, jeg er ikke synsk ;)
20. februar 2006 - 14:42
#17
session_start(); if (!isset($_SESSION['kurv'])) { $_SESSION['kurv'] = array(); } //Hvis kurven ikke findes i forvejen, så opretter den en require("connect.php"); if(isset($_POST['reset'])) { $_SESSION['antal_varer'] = ""; $_SESSION['samlet_pris'] = ""; } if(isset($_POST['bestil']) && $_POST['bestil'] == "Læg i kurv") { $_SESSION['antal_varer'] = $_SESSION['antal_varer'] + $_POST['antal']; $_SESSION['samlet_pris'] = ($_POST['pris'] * $_POST['antal']) + $_SESSION['samlet_pris']; $_SESSION['kurv'] = array($_POST['id'],$_POST['pris'],$_POST['antal']); //Smid direkte i sessionsvariablen } foreach($_SESSION['kurv'] as $key => $ar) { echo "id = " . $ar[0] . "<br>"; echo "pris = " . $ar[1] . "<br>"; echo "antal = " . $ar[2] . "<br>"; //osv } echo " <form action=\"\" method=\"post\"> <input type=\"submit\" name=\"reset\" value=\"Nulstil kurven\"> </form>"; $query = mysql_query("SELECT * FROM varer ORDER BY id",$db); while($bestil = mysql_fetch_assoc($query)) { echo " <form action=\"\" method=\"post\"> <input type=\"hidden\" name=\"id\" value=\"".$bestil['id']."\"> <input type=\"hidden\" name=\"pris\" value=\"".$bestil['pris']."\"> <table class=\"\" cellpadding=\"0\" cellspacing=\"0\" width=\"500\" border=\"1\"> <tr> <td width=\"200\">".$bestil['navn']."</td> <td width=\"100\">".$bestil['pris']." kr/stk.</td> <td width=\"100\"><input type=\"tekst\" name=\"antal\" class=\"formText\" size=\"3\"> stk.</td> <td width=\"100\"><input type=\"submit\" name=\"bestil\" value=\"Læg i kurv\" class=\"formButton\"></td> </tr> </table> </form>"; } echo "<br><br>"; echo " <form action=\"\" method=\"post\"> <table class=\"\" cellpadding=\"0\" cellspacing=\"0\" width=\"500\" border=\"1\"> <tr> <td width=\"100\">Antal varer:</td> <td width=\"100\">".$_SESSION['antal_varer']." stk.</td> <td width=\"100\">Samlet pris:</td> <td width=\"100\">".$_SESSION['samlet_pris']." kr.</td> <td width=\"100\"><input type=\"submit\" name=\"bestil\" value=\"Fortsæt bestilling\" class=\"formButton\"></td> </tr> </table> </form>"; ?> Bedre tror jeg ikke at jeg kan gøre det :)
20. februar 2006 - 14:42
#18
/det er hele dokumentet du har der....
20. februar 2006 - 14:48
#19
Jeg kan desværre ikke gennemskue hvor det går galt. Pas.
20. februar 2006 - 18:45
#20
prøv at ændre dette: if(isset($_POST['bestil']) && $_POST['bestil'] == "Læg i kurv") { $_SESSION['antal_varer'] = $_SESSION['antal_varer'] + $_POST['antal']; $_SESSION['samlet_pris'] = ($_POST['pris'] * $_POST['antal']) + $_SESSION['samlet_pris']; $_SESSION['kurv'] = array($_POST['id'],$_POST['pris'],$_POST['antal']); //Smid direkte i sessionsvariablen } til: if(isset($_POST['bestil']) && $_POST['bestil'] == "Læg i kurv") { $_SESSION['antal_varer'] = $_SESSION['antal_varer'] + $_POST['antal']; $_SESSION['samlet_pris'] = ($_POST['pris'] * $_POST['antal']) + $_SESSION['samlet_pris']; $_SESSION['kurv'][] = array($_POST['id'],$_POST['pris'],$_POST['antal']); //Smid direkte i sessionsvariablen }
21. februar 2006 - 15:56
#21
Det fungerer stadig ikke.. Jeg har i løbet af natten udtænkt en anden løsning: En lettere kompliceret voldtægt af min db, hvor der ryger data ind og ud hele tiden :) Men det fungerer, og det er det vigtigste... Tak for hjælpen! Mvh Anders Eiler
Vi tilbyder markedets bedste kurser inden for webudvikling