Avatar billede Hans1 Praktikant
30. november 2010 - 08:08 Der er 9 kommentarer og
1 løsning

Hjælp til PHP Session

Er der nogen som kan hjælpe mig med denne kode.
Problemet er at når jeg tilføjer 5 i antal linket så tilføjer den kun 1. Men når jeg så har tilføjet en så kan jeg godt tilføje flere ved antal.

domæne.dk?basket=add&id=1&antal=5

<?
session_start();
$cart = $_SESSION['cart'];
$basket = $_GET['basket'];
$amount = $_GET['antal'];

switch ($basket) {
case 'add':
       
if ($cart) {

for($i=1;$i<=$amount;$i++){
$cart .= ','.$_GET['id'];
       
}
} else {

for($i=1;$i<=$amount;$i++){
$cart = $_GET['id'];

} }
break;
}

$_SESSION['cart'] = $cart;
echo $cart;
?>
Avatar billede alphabits Nybegynder
30. november 2010 - 09:02 #1
Tror jeg ville ændre lidt på logikken, så din kode bliver noget i stil med:

<?php

session_start();
$cart = $_SESSION['cart'];
$basket = $_GET['basket'];
$amount = (int)$_GET['antal'];
$id = (int)$_GET['id'];

switch ($basket) {
case 'add':
    if (!$cart) {
        $cart = '';
    }
   
    for($i = 1; $i <= $amount; $i++) {
        $cart .= ','.$id;
    }
   
    $cart = trim($cart, ",");

    break;
}

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

?>
Avatar billede repox Seniormester
30. november 2010 - 10:04 #2
Jeg har enormt mange negative kommentarer til koden, men jeg vil lade mit spørgsmål tale for sig selv: hvordan vil du fjerne noget fra indkøbskurven, hvis du senere i forløbet ændrer mening?

Normalt vil man bruge et array til at administrere en indkøbskurv. Noget ala:
<?
    session_start();
    $action = $_GET["basket"];
    $vare_id = $_GET["id"];
    $vare_antal = $_GET["antal"];
   
    if( !isset($_SESSION["cart"][$vare_id]) )
        $_SESSION["cart"][$vare_id] = 0;
       
    if( $action == "add" )
        $_SESSION["cart"][$vare_id] += $vare_antal;
    else
        $_SESSION["cart"][$vare_id] -= $vare_antal;
   
    var_dump($_SESSION["cart"]);
   
?>


Det giver dig et array med varens id samt hvor mange af af netop den vare du vil have.

Det er mere fleksibel og endda pænere kode.
Avatar billede Hans1 Praktikant
30. november 2010 - 10:22 #3
Det virker jo perfekt nu.
Kan du ikke lige forklare hvad du har gjort.
Avatar billede repox Seniormester
30. november 2010 - 18:39 #4
Hvem af os mener du?
Avatar billede Hans1 Praktikant
30. november 2010 - 19:07 #5
alphabits... Skrev min besked før din så så ikke lige din før jeg havde skrevet..
Avatar billede repox Seniormester
30. november 2010 - 19:13 #6
Du skrev din besked før min? Hvordan kan min besked være et kvarter ældre end din, så? Ak, ja - livets små mysterier...
Avatar billede alphabits Nybegynder
01. december 2010 - 02:10 #7
Problemet i din oprindelige kode var at du skrev

$cart = $_GET['id'];

i den løkker der blev kørt når $_SESSION['cart'] ikke fandtes i forvejen. Dvs. at løkken køre x antal gange, men i hvert gennemløb sætter den $cart til $_GET['id'], hvilket i dit system svarer til at lægge 1 produkt i kurven. Jeg gætter på at du havde lidt problemer med at når $cart var en tom streng kunne du ikke bare skrive

$cart .= ",".$_GET['id'];

i løkken, fordi du så ville få et komma i starten af $cart. Min løsning er sådan set bare at være ligeglad, i første omgang, med at der kommer et komma i starten og først når løkken er kørt fjerner jeg kommaet med

$cart = trim($cart, ",");

Ikke super elegant, men det virker :)

Når det så er sagt, må jeg give repox ret i at der findes bedre måder at gemme en indkøbskurv i ens session. Så hvis du er frisk på en udfordring, kan du se på koden i hans svar, og se om det giver mening.
Avatar billede Hans1 Praktikant
09. juni 2011 - 12:48 #8
Smid venligst et svar.
Avatar billede alphabits Nybegynder
09. juni 2011 - 13:09 #9
Svar :)
Avatar billede alphabits Nybegynder
09. juni 2011 - 13:09 #10
Host.. Svar :)
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