Avatar billede Jonas Nybegynder
09. oktober 2008 - 21:45 Der er 15 kommentarer og
1 løsning

Min varekurv++ tæller dobbelt

Hej.

Har et problem med en indkøbskurv som tæller dobbelt kan ikke helt gennemskue hvad jeg skal kigge efter ?

smider varene ind vha
$_SESSION['cart'][$product_id]++;

og skriver antal ud med følgende.

foreach ($_SESSION['cart'] as $product_id => $quantity)

Nogen som kan gennemskue hvad der kan være galt ?
Avatar billede jakobdo Ekspert
09. oktober 2008 - 22:18 #1
Du har et ; for meget i linje 120.
Fjern det og det virker igen. :o)
Avatar billede Jonas Nybegynder
09. oktober 2008 - 22:25 #2
????

Hvilken linie ??
Avatar billede olebole Juniormester
09. oktober 2008 - 22:28 #3
<ole>

Præcis ... "hvilken linje?"  ;o)

Hvordan skal man kunne gennemskue noget i en kode, man ikke kan se? Hvis vi skal gætte på, hvad der kan være galt, er vi nødt til at se koden - ellers kan det blive en _meget_ lang quiz  =)

/mvh
</bole>
Avatar billede jakobdo Ekspert
10. oktober 2008 - 06:28 #4
Som Ole siger, det var ment som en joke, da vi intet kan se af de linjer du har vist herover.
Hvis koden som bruges når der laves et link ala:

buy.php?product=ID
Og så noget mere af koden fra indkøbskurven.

Måske et link til din side ?
Avatar billede Jonas Nybegynder
10. oktober 2008 - 10:22 #5
okay. Det hele er bygget op i klasser og funktioner.

min kurv funktion ser sådan ud.

    function kurv()
    {
        $product_id = $_GET[id]; //the product id from the URL
        $action = $_GET[action]; //the action from the URL

    if($product_id ){
    switch($action) {     

                case "add":
                    $_SESSION['cart'][$product_id]++ -1;
                    header("location: index.php?side=varekurv");
                    break;

                case "empty":
                    unset($_SESSION['cart']);
                    header("location: index.php?side=varekurv");
                    break;

                case "remove":
                    $_SESSION['cart'][$product_id]--;
                    if ($_SESSION['cart'][$product_id] == 0)
                        unset($_SESSION['cart'][$product_id]);
                    header("location: index.php?side=varekurv");
                    break;


            }
        }
    }

Linket som jeg som jeg bruger til at ligge ting ind i kurven.

<a href="index.php?side=kurv&action=add&id=' . $row[vareid] . '">

selve funktionen smider jeg ud sådan her.
function gen_contents()
    {
        $id = $_GET["side"];
        switch($id)
        {
    case kurv :
            include_once ("include/kurv.php");
            $kurv = new kurv();
            $text .= $kurv->kurv();
            return $text;
            break;
}

Jeg har fundet ud af at det må være i den sidste switch case den er galt, for hvis jeg kalder funktionen direkte med $product_id kommer fejlen ikke.
Avatar billede olebole Juniormester
10. oktober 2008 - 10:50 #6
Hvad betyder denne linje - og hvorfor ser den sådan ud?
    $_SESSION['cart'][$product_id]++ -1;
Avatar billede olebole Juniormester
10. oktober 2008 - 10:53 #7
Derudover ser det ikke umiddelbart ud, somom der er fejl, der kan være skyld i dobbelt optælling i den kode, du viser her  =)
Avatar billede jakobdo Ekspert
10. oktober 2008 - 11:03 #8
Efter som du kalder med add, så bør der jo kun blive tilføjet en.
Prøv at lav noget debug...
Inden du går ind i din funktion, print så:

print_r($_SESSION['cart']);
og efter kaldet af add osv...
Avatar billede Jonas Nybegynder
10. oktober 2008 - 11:41 #9
olebole se bort fra -1 ville lige teste noget, nåede ikke at slette det.

jeg har nu prøvet med print_r($_SESSION['cart']); og det viser at det er så snart at der trykkes på linket det bliver tilføjet 2 stk vare
Array ( [29] => 1 ) Array ( [29] => 2 )

Det er i øvrigt eksemplet herfra jeg har brugt http://whoyouknow.co.uk/php/shop/ prøver jeg det af uden at smide det i klasser og funktioner funker det.

har også prøvet at sniffe lidt på hvad der bliver sendt frem og tilbage og der er hellere ikke noget mistænktsomt.

Så min konklusion er lidt at det er den her sidste case switch som gør et eller andet.
Avatar billede jakobdo Ekspert
10. oktober 2008 - 12:05 #10
Men din sidste case, tilføjer jo ikke en vare.
Avatar billede olebole Juniormester
11. oktober 2008 - 01:06 #11
Jo, den tilføjer faktisk en vare, hvis $_GET["id"] er sat og $_GET["action"] indeholder 'add' og $_GET["side"] indeholder 'kurv' i det øjeblik, gen_contents bliver kaldt. Men det er ikke til at sige, når man ikke kan se, hvad der sker, hvornår og hvorfor  =)
Avatar billede Jonas Nybegynder
13. oktober 2008 - 17:04 #12
Ved godt at jeg er lidt sparsom med kode. men har fundet ud af lidt mærkeligt.

hvis jeg skriver min switch case sådan her.

    if($product_id && $action){
    switch($action) {    //decide what to do   

                case "add":
                    $_SESSION['cart'][$product_id]++;
                    header("location: index.php?side=varekurv");                   
                    break;

Hvor jeg sender brugeren videre til varekurven med det samme virker tingene, men hvis jeg fjerner den den tæller den dobbelt.
Avatar billede olebole Juniormester
13. oktober 2008 - 18:34 #13
Er du _helt_ sikker på, den tæller dobbelt, hvis du skriver:

    if($product_id && $action){
    switch($action) {    //decide what to do   

                case "add":
                    // $_SESSION['cart'][$product_id]++;
                    header("location: index.php?side=varekurv");                   
                    break;
Avatar billede olebole Juniormester
13. oktober 2008 - 18:39 #14
Ahhh, nu forstår jeg! Jamen, har du overhovedet læst, hvad jeg skriver i (11/10-2008 01:06:13)?

"Jo, den tilføjer faktisk en vare, hvis $_GET["id"] er sat og $_GET["action"] indeholder 'add' og $_GET["side"] indeholder 'kurv' i det øjeblik, gen_contents bliver kaldt."

- og så er der jo ikke noget at sige til, at det ikke sker, når du ingenting foretager dig - men blot sender brugeren videre.

Da du kun kan overtales til at levere drypvise informationer, hopper jeg ud her. Det fører vist ingen vegne
Avatar billede Jonas Nybegynder
07. oktober 2009 - 06:42 #15
Fik det aldrig løst - Startede forfra, og fik det til at fungere.
Avatar billede Jonas Nybegynder
07. oktober 2009 - 06:42 #16
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