Avatar billede anderseiler Nybegynder
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 :)
Avatar billede gizmo-gizmo Nybegynder
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
}
Avatar billede anderseiler Nybegynder
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?
Avatar billede gizmo-gizmo Nybegynder
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
}
Avatar billede gizmo-gizmo Nybegynder
20. februar 2006 - 13:36 #4
hov... $_SESSION['kurv'] skal selvfølgelig være: $_SESSION['kurv'][]
Avatar billede gizmo-gizmo Nybegynder
20. februar 2006 - 13:36 #5
I anden sidste linje, DOH.
Avatar billede anderseiler Nybegynder
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
Avatar billede gizmo-gizmo Nybegynder
20. februar 2006 - 13:39 #7
Yes :)
Avatar billede anderseiler Nybegynder
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
Avatar billede anderseiler Nybegynder
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
}


:)
Avatar billede gizmo-gizmo Nybegynder
20. februar 2006 - 13:56 #10
Har du husket at smide en sesssion_start()  i toppen af dokumentet?
Avatar billede anderseiler Nybegynder
20. februar 2006 - 13:58 #11
ja da :) Ellers ville den heller ikke have givet resultat første gang :)
Avatar billede gizmo-gizmo Nybegynder
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
Avatar billede anderseiler Nybegynder
20. februar 2006 - 14:04 #13
Undskyld, men det fattede jeg ikke meget af :P
Avatar billede gizmo-gizmo Nybegynder
20. februar 2006 - 14:33 #14
Bare flyt den linje til linjen efter session_start();
Avatar billede anderseiler Nybegynder
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
Avatar billede gizmo-gizmo Nybegynder
20. februar 2006 - 14:41 #16
Giv mig noget mere kode, jeg er ikke synsk ;)
Avatar billede anderseiler Nybegynder
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 :)
Avatar billede anderseiler Nybegynder
20. februar 2006 - 14:42 #18
/det er hele dokumentet du har der....
Avatar billede gizmo-gizmo Nybegynder
20. februar 2006 - 14:48 #19
Jeg kan desværre ikke gennemskue hvor det går galt.  Pas.
Avatar billede wetdog Nybegynder
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
}
Avatar billede anderseiler Nybegynder
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester