Avatar billede sebster Nybegynder
11. april 2004 - 08:45 Der er 9 kommentarer og
1 løsning

Sessions til indkøbskurv

Er der nogen der kan hjælpe mig med sessions i en indkøbskurv. Jeg har siddet i flere timer men kan ikke få løst følgende problemstilling.

Der skal laves et catalog hvor man kan tilføje et bestemt antal af en varer, hvor der derefter bliver lagt det bestemte antal i en indkøbskurv. Hvis den samme vare tilføjes igen skal den lægge antallet sammen. Mit problem er at få et antal hæftet på en sessions og få sessions til at genkende hinanden og lægge antallet sammen.
Avatar billede 7th Praktikant
11. april 2004 - 08:55 #1
Jeg tror lidt kode vil gøre gavn ;o)

Det lyder for mig som om, at du bruger flere sessions. Jeg har før lavet en indkøbskurv styret ved hjælp af blot en session. Det vil jeg også anbefale dig.

Det nemmeste for dig vil være, at lave indkøbskurven ved hjælp af dimentionalle arrays i din session. Således at du har et array, men en masse små arrays indeni for hver vare.

Det lyder måske lidt indviklet, men jeg er ikke så god til at forklare ;o)
Avatar billede dennismp Nybegynder
11. april 2004 - 10:49 #2
Hvis du skal bruge sessions så gør som 7th snakker om.

Lad os antage at at når du tilføjer en tilføj så kaldes
add.php?id=123&quantity=3
Hvor id er vareid, quantity er antal.

Så kan de add.php se nogenlunde sådan her ud:
<?php

$id = $_GET['id'];
$quantity = $_GET['quantity'];

if(! isset($_SESSION['shopcart']) || isset(!$_SESSION['shopcart'][$id]) )
  $_SESSION['shopcart'][$id] = 0;

$_SESSION['shopcart'][$id] += $quantity;

Der skal self laves tjek på om quantity er positivt heltal og om id eksisterer.
Avatar billede mikl-dk Nybegynder
12. april 2004 - 21:55 #3
Det jeg plejer at gøre, er blot at registrere et unikt sessionid som sessionvariabel. Denne variabel bruger jeg så i en MySQL tabel kaldet fx basket. Her tilføjes, slettes og opdateres varer løbende via det unikke sessionid. Det er nemt på på den måde, og samtidig giver den en masse muligheder for statistik.

Fx:
SELECT id FROM basket WHERE session='$sessionid' AND vareid='$vareid'

Hvis antal af records = 0:
INSERT INTO basket (session, vareid, antal) VALUES ('$sessionid', '$vareid', '$quantity')

Hvis antal af records fra tidligere > 0:
UPDATE basket SET antal = antal + '$quantity' WHERE sessionid = '$sessionid' AND vare = '$vareid'

Husk lige godt hvilken løsning, du vælger: lav inputvalidering!
Avatar billede sebster Nybegynder
14. april 2004 - 11:01 #4
jeg har siddet og leget med det som dennismp sagde kunne bruges. Men jeg få ikke rigtig udskrvet noget. Hvad gør jeg galt mine to documenter ser således ud:

----------catalog.php---------------------

<?php
session_start(); 
session_register("shopcart");
   
echo "<a href='add.php?id=1&quantity=3'>produkt 1</a><br>";
echo "<a href='add.php?id=2&quantity=2'>produkt 2</a><br>";

if (isset($_SESSION['shopcart'][$id])) {
  echo "Your cart:";
  foreach (unserialize($_SESSION['shopcart'][$id]) as $p) {
      echo "$p";
  }
  }

?>


-----------------add.php------------------------------------

<?php   
session_start(); 
session_register("shopcart");

$id = $_GET['id'];
$quantity = $_GET['quantity'];

if(!isset($_SESSION['shopcart']) || !isset($_SESSION['shopcart'][$id]) )
  $_SESSION['shopcart'][$id] = 0;

$_SESSION['shopcart'][$id] += $quantity;

header('location:catalog.php');
?>
Avatar billede dennismp Nybegynder
14. april 2004 - 11:19 #5
session_register kan give problemer:

"If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled. "

læs evt selv de forskellige cautions
http://dk2.php.net/session_register
Avatar billede sebster Nybegynder
14. april 2004 - 11:43 #6
Så fik jeg rykket rundt og slettet lidt. Og den udskriver og lægger antallet sammen, men jeg kan ikke få hæftet et navn på de enkelte antal. hvad gør jeg nu galt???

Min documenter ser nu således ud:


--------------------catalog.php--------------
<?php
session_start(); 
   
echo "<a href='add.php?id=2&quantity=3'>produkt 1</a><br>";
echo "<a href='add.php?id=3&quantity=2'>produkt 2</a><br>";


if (isset($_SESSION['shopcart'])) {
  echo "<strong>Your cart:</strong><br>";
  foreach (($_SESSION['shopcart']) as $p) {
      echo "$p<br>";
  }

}


?>

----------------add.php---------------------


<?php   
session_start(); 

$id = $_GET['id'];
$quantity = $_GET['quantity'];

if(!isset($_SESSION['shopcart']) || !isset($_SESSION['shopcart'][$id])) {
  $_SESSION['shopcart'][$id] = 0;
}
$_SESSION['shopcart'][$id] += $quantity;

header('location:catalog.php');
?>
Avatar billede dennismp Nybegynder
14. april 2004 - 12:44 #7
Du vil også have produktnavnet i session?

ellers kan du jo bare bruge id'et og slå det op i databasen. i stil med

visindkøb.php
<?php
session_start();

if( isset($_SESSION['shopcart']) ) {
  $ids = array_keys($_SESSION['shopcart']);

  $sql = "SELECT id, name FROM products WHERE id IN (" . join(',',$ids) . ") ORDER BY name";
  $res = mysql_query($sql);
  while($row = mysql_fetch_row($res)) {
    print stripslashes($row['name']) . ': ' . $_SESSION[$row['id']] . ' stk<br/>';
  }
}
else {
  print "Tom";
}
?>

noget i den dur..
Avatar billede sebster Nybegynder
14. april 2004 - 13:09 #8
Det jeg mente var også hvordan man skrev id'et ud. Men vil gerne skrive det ud inden jeg begynder at vedhæfte noget til en database. Vil gerne have forståelsen.

Når jeg laver min foreach så skiver den kun antal ud og hvis jeg sætter array_key foran skriverd en kun id'et ud.

den ser stadig således ud:

if (isset($_SESSION['shopcart'])) {
  echo "<strong>Your cart:</strong><br>";
  foreach (($_SESSION['shopcart']) as $p)
  {
      echo " $p<br>";
  }

}

Skal jeg sætte noget mere ind i foreach og hvad eller skal det skrives pp den anden måde???
Avatar billede sebster Nybegynder
14. april 2004 - 14:07 #9
jeg fandt selv ud af det!

if (isset($_SESSION['shopcart'])) {
  echo "<strong>Your cart:</strong><br>";
  foreach (($_SESSION['shopcart']) as $p => $id)
  {
      echo " $p $id<br>";
  }

}

Har ikke givet point før så fortæl mig hvordan jeg skal gøre så sender jeg dem til dig dennismp. Og mange tak for hjælpen!!!
Avatar billede dennismp Nybegynder
14. april 2004 - 18:00 #10
Jeg skal ligge et svar før du kan, det er hermed gjort.
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