Gå til innhold

[Løst] hjelp med handlekurv


Anbefalte innlegg

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 av demiurgen
Lenke til kommentar
Videoannonse
Annonse

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 av laserlars
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...