demiurgen Skrevet 8. august 2011 Skrevet 8. august 2011 (endret) Jeg har fulgt en oppskrift på en php handlekurv jeg fant i en gammel bok fra 2004. Alt funker ganske greit men det er et lite problem som jeg ikke klarer å løse på en enkel måte. Handlekurven har en felt hvor man kan oppdatere antallet på en vare. bruker man det feltet går alt greit men noen velger å gå tilbake i webshop-n og trykke kjøp på varene om igjen og dermed kommer det opp to rader med samme produkt i handlekurven. Hvordan kan jeg få den til å oppdatere antallet istedenfor å sette inn en ny rad med lik vare. Databasetabellen for handlekurven er slik: carttemp_hidden, carttemp_sess, carttemp_prodnum, carttemp_quan carttemp_hidden er bare en kunstig id, carttemp_sess er session id'n, carttemp_prodnum er id'n til selve varen og carttemp_quan er antallet av den varen. Videre er det en php switch som avgjør hvilken mysql_query som skal kjøres. $sess = session_id(); $action = $_REQUEST['action']; switch ($action) { case "add": $query = "INSERT INTO me_carttemp (carttemp_sess, carttemp_quan, carttemp_prodnum) VALUES ('$sess','$qty','$id')"; break; case "change": $query = "UPDATE me_carttemp SET carttemp_quan = '$modified_quan' WHERE carttemp_hidden = '$modified_hidden'"; break; case "delete": $query = "DELETE FROM me_carttemp WHERE carttemp_hidden = '$modified_hidden'"; break; case "empty": $query = "DELETE FROM me_carttemp WHERE carttemp_sess = '$sess'"; break; } $results = mysql_query($query) or die(mysql_error()); Legger også ved koden til den inkluderte cart.php filen, selvom jeg ikke regner med noen gidder å lese alt dette... <?php if (!session_id()) { session_start(); } $sessid = session_id(); $query = "SELECT * FROM me_carttemp WHERE carttemp_sess = '$sessid'"; $results = mysql_query($query) or die (mysql_query()); $rows = mysql_num_rows($results); ?> <h1>Varer i handlevognen</h1> <table class="cart_tbl"> <tr> <th> </th> <th> </th> <th class="cqty">Antall</th> <th class="cprice">Pris</th> <th class="ctot">Totalt</th> <th class="cdel">Fjern</th> </tr> <?php $total = 0; $qty = 0; while ($row = mysql_fetch_array($results)) { extract($row); $prod = "SELECT * FROM me_products WHERE id='$carttemp_prodnum'"; $prod2 = mysql_query($prod); $prod3 = mysql_fetch_array($prod2); extract($prod3); if($status == 3 || $status == 4) { $path = "abonnementnr0"; $string = $name; } else{ $path = $year . "nr" . $number; $string = $name . "<br />Årgang " . $year . ", blad nr " . $number; } ?> <tr> <td><a href="order_details.php?id=<?php echo $id; ?>"><img src="img/<?php echo "{$path}" ?>.jpg" width="40px" /></a></td> <td class="cdesc"><a href="order_details.php?id=<?php echo $id; ?>"><?php echo "{$string}"; ?></a></td> <td> <form method="post" action="modcart.php?action=change"> <input type="hidden" name="modified_hidden" value="<?php echo $carttemp_hidden; ?>"> <input class="mod_qty_fld" type="text" name="modified_quan" value="<?php echo $carttemp_quan; ?>"> <input type="image" src="gfx/refresh.gif" alt="Submit" /> </form> </td> <?php $extprice = $price * $carttemp_quan; $total = $extprice + $total; ?> <td><?php echo $price; ?></td> <td><?php echo $extprice; ?></td> <td> <form method="post" action="modcart.php?action=delete"> <input type="hidden" name="modified_hidden" value="<?php echo $carttemp_hidden; ?>"> <input type="image" src="gfx/trash.png" alt="Slett" /> </form> </td> </tr> <?php } ?> <tr class="cgbg"> <td> </td> <td> </td> <td> </td> <td class="csum"><strong>Totalt:</strong></td> <td class="csum"><strong><?php echo $total; ?></strong></td> <td> </td> </tr> </table> <a class="shop_more_btn float_left" href="order.php">Handle mer</a> <a class="checkout_btn float_right" href="checkout1.php">Til kassen</a> Endret 8. august 2011 av demiurgen
laserlars Skrevet 9. august 2011 Skrevet 9. august 2011 (endret) Hver gang du trykker ADD så legges varen man har valgt som en linje i databasen din, med quantity (carttemp_quan) = 1. Trykker du ADD på nytt så legges det til en identisk linje i databasen, så du har nå 2 like linjer - med quantity 1 på hver. Med change/modify så kan du redigere hver linje i databasen, altså sette feltet carttemp_quan til f.eks '2'. Da har man bestilt 2 like varer, og har 1 linje i databasen. Ser du hvor problemet ligger nå ? For å forhindre dette må det gjøres en sjekk om samme produktet ligger i handlekurven fra før, og deretter kjøre en UPDATE av carttemp_quan = <nåværende value + 1>. Endret 9. august 2011 av laserlars
demiurgen Skrevet 9. august 2011 Forfatter Skrevet 9. august 2011 Tror jaggu jeg fikk det til ja. takk for hjelpen. case "add": $q = "SELECT * FROM me_carttemp WHERE carttemp_sess = '$sess' AND carttemp_prodnum = '$id'"; $r = mysql_query($q) or die (mysql_query()); $ro = mysql_num_rows($r); if (!empty($ro)) { $query = "UPDATE me_carttemp SET carttemp_quan = (carttemp_quan + 1) WHERE carttemp_prodnum = '$id'"; } else { $query = "INSERT INTO me_carttemp (carttemp_sess, carttemp_quan, carttemp_prodnum) VALUES ('$sess','$qty','$id')"; }
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå