php sessions arrays behöver hjälp

Permalänk
Medlem

php sessions arrays behöver hjälp

Hejsan har ett problem som jag just nu inte förstår mig på.
Vill skapa en kundkorg behöver dock bara ha en produkt i lager.

Så tänker lagra produkten i en session array. Så varje gång jag klickar på en länk
echo "<a href='includes/cart.php?action=add&id=$productID'>Add</a>";
så ska $productID sparas i array i en session var Till exempel 1,5,6.
Ifall jag klickat på produkt 1,5 och 6.
Men det är bara den produkt som jag klickar på som visas

Förstår inte vad som är problemet med

<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <?php $product_id = $_GET[id]; //Produkt ID $action = $_GET[action]; //Val till exempel add,delete etc. switch($action) { //Vilket val case "add": $cart[] = $product_id; $_SESSION['cart'] = $cart; //spara i sessions break; } ?> <?php if($_SESSION['cart']) { //ifall kundkorg är tom gå ej vidare. //show the cart for ($i = 0; $i < count($cart); $i++) { echo "$cart[$i] . “<br>”"; } } ?>

ifall nån kan hjälpa mig skulle jag bli hur glad som helst.

Mvh

Visa signatur

AMD OPTERON athlon 3800 x2. DFI LANPARTY nforce 4ULTRA D, 2x1 gig twinmos Chassi Themlake 3,3| GC = Powercoler x850 XT Vivo, Logitech G15, Aiwa surround System, NEC DVD Burner, 1 x 1 x 200 gig 1x500 gigmaxtor SATA 1, 1 x180 gig Western Digital 1x320 western

Permalänk
Medlem

Byt ut all kod i din case add till
$_SESSION['cart'][] = $product_id;

Och sen är det $_SESSION['cart'] du ska loopa igenom när du ska visa den.

Permalänk
Medlem

$cart kommer att skrivas över varje gång du lägger till något.
Inte kodat php på ett bra tag, men du måste sätta upp en global array, sen lägger du till ny data till den.
// Se till så detta endast körs en gång, t ex if (!isset($_SESSION['cart']))
$_SESSION['cart'] = array();

Sen för att lägga till:
array_push($_SESSION['cart'], $product_id);

Permalänk
Medlem

Nä nu får ni förklara har detta nu

<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <?php $product_id = $_GET[id]; //the product id from the URL $action = $_GET[action]; //the action from the URL switch($action) { //decide what to do case "add": $_SESSION['cart'][] = $product_id; //add one to the quantity of the product with id $product_id break; } ?> <?php if($_SESSION['cart']) { //if the cart isn't empty //show the cart for ($i = 0; $i < count($cart); $i++) echo $_SESSION['cart']; } ?>

Problemet med detta är att som dazen har påpekat att det kommer bara överskrivas men förstår inte var jag behöver at för återgjärder?
Problemet är detta:

echo $_SESSION['cart']; $_SESSION['cart'][] = $product_id;

??

Visa signatur

AMD OPTERON athlon 3800 x2. DFI LANPARTY nforce 4ULTRA D, 2x1 gig twinmos Chassi Themlake 3,3| GC = Powercoler x850 XT Vivo, Logitech G15, Aiwa surround System, NEC DVD Burner, 1 x 1 x 200 gig 1x500 gigmaxtor SATA 1, 1 x180 gig Western Digital 1x320 western

Permalänk
Medlem

varför skulle det skrivas över igen?

du appendar ju bara på $_SESSION['cart'] genom att använda:
$_SESSION['cart'][]

men för o skriva ut den borde du kanske använda något sånt här?

<?php if($_SESSION['cart']) { //if the cart isn't empty //show the cart foreach($_SESSION['cart'] AS $val) echo $val; } ?>

Permalänk
Medlem

När du ska skriva ut innehållet i $_SESSION['cart'] kan du skriva :
print_r($_SESSION['cart']); Då slipper du din forloop som du inte lyckats med.

Permalänk
Medlem

ok, tack så jätte mycket förstår mig nu på hur det fungerar.

Har ett problem kvar som jag vill lösa. Vill att när jag addat en produkt så ska man inte kunna adda den igen.

<?php session_start();?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <?php $product_id = $_GET[id]; //the product id from the URL $action = $_GET[action]; //the action from the URL switch($action) { //decide what to do case "add": if (array_key_exists($product_id,$_SESSION['cart'])){ echo "This item has allready been added"; } else{ $_SESSION['cart'][] = $product_id; //add one to the quantity of the product with id $product_id break; } }

funkar ibland och ibland inte så det är något som är knas? Är det någon som kan se vad som är fel?

Visa signatur

AMD OPTERON athlon 3800 x2. DFI LANPARTY nforce 4ULTRA D, 2x1 gig twinmos Chassi Themlake 3,3| GC = Powercoler x850 XT Vivo, Logitech G15, Aiwa surround System, NEC DVD Burner, 1 x 1 x 200 gig 1x500 gigmaxtor SATA 1, 1 x180 gig Western Digital 1x320 western

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Borny
ok, tack så jätte mycket förstår mig nu på hur det fungerar.

Har ett problem kvar som jag vill lösa. Vill att när jag addat en produkt så ska man inte kunna adda den igen.

<?php session_start();?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <?php $product_id = $_GET[id]; //the product id from the URL $action = $_GET[action]; //the action from the URL switch($action) { //decide what to do case "add": if (array_key_exists($product_id,$_SESSION['cart'])){ echo "This item has allready been added"; } else{ $_SESSION['cart'][] = $product_id; //add one to the quantity of the product with id $product_id break; } }

funkar ibland och ibland inte så det är något som är knas? Är det någon som kan se vad som är fel?

Det är inte säkert att det finns en nyckel som har samma värde som $product_id. Om du har tur finns nyckeln, men då är det inte säkert att värdet stämmer med det du vill ta bort.
Du bör iterera igenom hela listan och kontrollera om $product_id finns istället:

$product_exists = false; foreach($_SESSION['cart'] as $product) { if($product == $product_id) { $product_exists = true; break; } } if(!$product_exists) { // Lägg till i kundvagnen... }

OBS: Koden är inte testad så den kan innehålla fel.

Permalänk
Medlem

Går det inte att köra

isset($_SESSION['cart'][$product_id])

istället för att loopa igenom?

edit: då måste man lägga till den med

$_SESSION['cart'][$product_id] = ...

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Teknocide
Går det inte att köra

isset($_SESSION['cart'][$product_id])

istället för att loopa igenom?

edit: då måste man lägga till den med

$_SESSION['cart'][$product_id] = ...

Vill bara säga tack till alla för all hjälp. Det fungerar perfekt nu.

Mvh,

Visa signatur

AMD OPTERON athlon 3800 x2. DFI LANPARTY nforce 4ULTRA D, 2x1 gig twinmos Chassi Themlake 3,3| GC = Powercoler x850 XT Vivo, Logitech G15, Aiwa surround System, NEC DVD Burner, 1 x 1 x 200 gig 1x500 gigmaxtor SATA 1, 1 x180 gig Western Digital 1x320 western