demiurgen Skrevet 8. august 2011 Del 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 Lenke til kommentar
laserlars Skrevet 9. august 2011 Del 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 Lenke til kommentar
demiurgen Skrevet 9. august 2011 Forfatter Del 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')"; } Lenke til kommentar
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å