Avatar billede morpheus Nybegynder
07. november 2007 - 02:18 Der er 10 kommentarer

Min kurv laver lidt problemer - eller ogsp er det mig?

Hej... Det kan nok være fordi det er lidt sent, men jeg har prøvet flere forskellige modeller.

Når jeg tilføjer en vare til min kurv skal den finde ud af om varen allerede er der, hvis den er der skal der lægges 1 til antal.
Hvis varen ikke er der skal den naturligvis oprettes.

Jeg har følgende kode:
$resKurv = mysql_query("SELECT id,produktID,antal FROM kurv WHERE sid = '".session_id()."' AND dato = NOW()");
        if (mysql_num_rows($resKurv)) {
            while ($rowKurv = mysql_fetch_assoc($resKurv)) {
                if ($ItemNo == $rowKurv['produktID']) {
                    $nytAntal = (int)$rowKurv['antal']+$Quantity;
                    mysql_query("UPDATE kurv SET antal = ".$nytAntal." WHERE id = ".$rowKurv['id']);
                }
                if ($ItemNo != $rowKurv['produktID']) {
                    mysql_query("INSERT INTO kurv (sid,produktID,antal,dato) VALUES('".$SessionID."','".$ItemNo."','".$Quantity."',NOW())");
                }
            }
        } else {
            mysql_query("INSERT INTO kurv (sid,produktID,antal,dato) VALUES('".$SessionID."','".$ItemNo."','".$Quantity."',NOW())");
        }
Avatar billede morpheus Nybegynder
07. november 2007 - 02:23 #1
Det der sker er, når jeg har klikket 2 gange på en (a) vare bliver de find oprettet med varenummer og antal.
Tilføjer jeg derefter en anden vare (b) vare bliver denne også oprettet.
Går jeg herefter tilbage og klikker en gang til på vare a, opdateres feltet antal og varen bliver herefter oprettet igen med antal=1
Nu har jeg så 4 stk vare a, hvor jeg burde have 3...

Giver det mening?
- Ikke for mig! :)
Avatar billede nielle Nybegynder
07. november 2007 - 06:54 #2
Det afhænger lidt af hvad der er i din $Quantity variabel?

Er det sådan at der, hvis der allerede er 2 A-produkter i kurven, står 2 i denne?

For så skal:

$nytAntal = (int)$rowKurv['antal'] + $Quantity;

da vist bare ændres til:

$nytAntal = $Quantity;

Noget helt andet: Hvorfor kører din kurv i databasen? Den slags plejer en session at være mere velegnet til.
Avatar billede morpheus Nybegynder
07. november 2007 - 07:37 #3
Hele min basket.php ser mere eller mindre sådan her ud:

<?php
$Action = $_GET['Action'];
$ItemNo = $_GET['ItemNo'];
$Quantity = $_GET['Quantity'];
$SessionID = $_GET['SessionID'];
$validActionsArr = array("Add","Delete","DeleteAll");

if(in_array($Action,$validActionsArr)) {
    if ($Action == "Add") {
        $resKurv = mysql_query("SELECT id,produktID,antal FROM kurv WHERE sid = '".session_id()."' AND dato = NOW()");
        if (mysql_num_rows($resKurv)) {
            while ($rowKurv = mysql_fetch_assoc($resKurv)) {
                if ($ItemNo == $rowKurv['produktID']) {
                    $nytAntal = (int)$rowKurv['antal']+$Quantity;
                    mysql_query("UPDATE kurv SET antal = ".$nytAntal." WHERE id = ".$rowKurv['id']);
                }
                if ($ItemNo != $rowKurv['produktID']) {
                    mysql_query("INSERT INTO kurv (sid,produktID,antal,dato) VALUES('".$SessionID."','".$ItemNo."','".$Quantity."',NOW())");
                }
            }
        } else {
            mysql_query("INSERT INTO kurv (sid,produktID,antal,dato) VALUES('".$SessionID."','".$ItemNo."','".$Quantity."',NOW())");
        }
    }
}

Altså er $Quantity en $_GET variabel...
Avatar billede morpheus Nybegynder
07. november 2007 - 07:40 #4
Min kurv kører ikke i sessions, fordi kunder skal have mulighed for at gemme deres kurv, det finder jeg lidt nemmere at gøre i DB - derfor har jeg valgt at gemme det hele der.
Avatar billede nielle Nybegynder
07. november 2007 - 08:05 #5
Hvilken værdi er der så i $_GET['Quantity']
Avatar billede nielle Nybegynder
07. november 2007 - 08:34 #6
Du skriver at kurven ikke kører i session, men alligevel briger du session ID'et til at identifisere den med?
Avatar billede morpheus Nybegynder
07. november 2007 - 08:48 #7
$Quantity indeholder antallet af den enkelte vare kunden ønsker at tilføje til kurven.

I vareoversigten har jeg udfor hver vare et tekstfelt hvori man kan skrive antal, hvis der ønskes mere end 1.

Jeg er nød til at benytte mig af sessions med kurven, for at kunne identificere anonyme brugere (brugere der ikke er logget ind)
Avatar billede nielle Nybegynder
07. november 2007 - 09:28 #8
Måske sådan?

<?php
$Action = $_GET['Action'];
$ItemNo = $_GET['ItemNo'];
$Quantity = $_GET['Quantity'];
$SessionID = $_GET['SessionID'];
$validActionsArr = array("Add","Delete","DeleteAll");

if (in_array($Action,$validActionsArr)) {
    if ($Action == "Add") {
        $resKurv = mysql_query("SELECT id, produktID, antal FROM kurv WHERE sid = '" . session_id() . "' AND dato = NOW()");
        if (mysql_num_rows($resKurv)) {
            while ($rowKurv = mysql_fetch_assoc($resKurv)) {
                if ($ItemNo == $rowKurv['produktID']) {
                    mysql_query("UPDATE kurv SET antal = antal + $Quantity WHERE id = " . $rowKurv['id']);
                }
                // if ($ItemNo != $rowKurv['produktID']) {
                //    mysql_query("INSERT INTO kurv (sid, produktID, antal, dato) VALUES('$SessionID', '$ItemNo', '$Quantity', NOW())");
                // }
            }
        } else {
            mysql_query("INSERT INTO kurv (sid, produktID, antal, dato) VALUES('$SessionID', '$ItemNo', '$Quantity', NOW())");
        }
    }
}
Avatar billede dkfire Nybegynder
07. november 2007 - 10:04 #9
Problemet ligger i:
if ($ItemNo == $rowKurv['produktID']) {
                    $nytAntal = (int)$rowKurv['antal']+$Quantity;
                    mysql_query("UPDATE kurv SET antal = ".$nytAntal." WHERE id = ".$rowKurv['id']);
                }
                if ($ItemNo != $rowKurv['produktID']) {
                    mysql_query("INSERT INTO kurv (sid,produktID,antal,dato) VALUES('".$SessionID."','".$ItemNo."','".$Quantity."',NOW())");
                }

Hvilket gør at hvis du har flere produkter, så vil et nyt produkt blive oprettet det antal gange som der er andre typer af produkter end det selv.

Prøv i stedet, tjek om den og kun den varer findes i kurven og opdater den, eller indsæt den som ny:

<?php
$Action = $_GET['Action'];
$ItemNo = $_GET['ItemNo'];
$Quantity = $_GET['Quantity'];
$SessionID = $_GET['SessionID'];
$validActionsArr = array("Add","Delete","DeleteAll");

if(in_array($Action,$validActionsArr)) {
    if ($Action == "Add") {
        $resKurv = mysql_query("SELECT id,produktID,antal FROM kurv WHERE sid = '".session_id()."' AND dato = NOW() AND produktID = $ItemNo");
        if (mysql_num_rows($resKurv)) {
          $rowKurv = mysql_fetch_assoc($resKurv);
          $nytAntal = (int)$rowKurv['antal']+$Quantity;
          mysql_query("UPDATE kurv SET antal = ".$nytAntal." WHERE id = ".$rowKurv['id']);
        } else {
            mysql_query("INSERT INTO kurv (sid,produktID,antal,dato) VALUES('".$SessionID."','".$ItemNo."','".$Quantity."',NOW())");
        }
    }
}
Avatar billede dkfire Nybegynder
14. november 2007 - 19:15 #10
Er du kommet videre ??
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