demiurgen Skrevet 16. mars 2011 Del Skrevet 16. mars 2011 Jeg prøver å lage en liten webshop hvor prisene er litt variable. Jeg har laget en databasetabell hvor alle produktene ligger med priser. Men så skal det være rabatt hvis man bestiller flere enn 3 blader samt at portoen blir inkludert. Prisene er slik: 1,2 eller 3 blader koster 65 pr stk. 4 eller flere blader koster 50 pr stk. Portoen er slik: 1 blad - porto 27 kr 2 eller 3 blader - porto 67 kr 4 eller flere blader - porto 0 kr Hvordan får jeg til det? Prisen ligger jo i produkttabellen, og når et blad legges i den midlertidige handlekurv-tabellen har det ikke noe pris med seg, bare en id og antall. Prisen hentes ut ved hjelp av en annen spørring med produktID. Jeg prøvde å lage en tellefunksjon men den satte bare ned prisen på bladene fra og med 4 blader så de første tre Jeg har også med status i produkttabellen for å skille mellom de forskjellige produktene, enkeltblader, abonnement og omslagspermer. For de som måtte gidde å lese alle min kode er dette det jeg har til nå... Portoen virker forsåvidt men det er veldig klønete. <?php session_start(); require_once("inc/connection.php"); require_once("inc/functions.php"); $sessid = $_SESSION['sessid']; $query = "SELECT * FROM me_carttemp WHERE carttemp_sess = '$sessid'"; $results = mysql_query($query) or die (mysql_query()); $rows = mysql_num_rows($results); include("inc/header.php"); include("inc/minicart.php"); include("inc/menu.php"); include("inc/logoads.php"); ?> <div id="content"> <div id="checkout"> <h1>Ordrebekreftelse</h1> <p>Trinn 1 - Vennligst skriv inn din kundeinformasjon<br /><strong>Trinn 2 - Vennligst se over og bekreft bestillingen</strong><br />Trinn 3 - Bestillingen fullføres</p> <h3>Bestilling</h3> <?php echo "<table class=\"cart_tbl\">"; echo "<tr>"; echo "<th> </th>"; echo "<th> </th>"; echo "<th class=\"cqty\">Antall</th>"; echo "<th class=\"cprice\">Pris</th>"; echo "<th class=\"ctot\">Totalt</th>"; echo "</tr>"; 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) { $qty = $qty; } elseif($status == 4) { $qty2 += $carttemp_quan; } else { $qty += $carttemp_quan; } if($status == 3 || $status == 4) { $string = $name; if($status == 3) { $porto2 = 0; } elseif($status == 4) { if($qty2 == 1 || $qty2 == 2){ $porto3 = 100; } else{ $porto3 = 150; } } } else{ $string = $name . "<br />Årgang " . $year . ", blad nr " . $number . "<br />"; if($qty == 1){ $porto1 = 27; } elseif($qty == 2 || $qty == 3){ $porto1 = 67; } else{ $porto1 = 0; } } $extprice = $price * $carttemp_quan; $total = $extprice + $total; echo "<tr>"; echo "<td> </td>"; echo "<td class=\"cdesc\">{$string}</td>"; echo "<td>{$carttemp_quan}</td>"; echo "<td>{$price},-</td>"; echo "<td>{$extprice},-</td>"; echo "</tr>"; } $porto4 = $porto1 + $porto2 + $porto3; echo "<tr>"; echo "<td> </td>"; echo "<td class=\"cdesc\">+ porto</td>"; echo "<td> </td>"; echo "<td>{$porto4},-</td>"; echo "<td> </td>"; echo "</tr>"; $total += $porto4; echo "<tr class=\"cgbg\">"; echo "<td> </td>"; echo "<td class=\"cdesc\">Totalt"; echo "<td> </td>"; echo "<td> </td>"; echo "<td><strong>{$total},-</strong></td>"; echo "</tr>"; echo "</table>"; ?> </div> </div> <?php include("inc/footer.php"); ?> Lenke til kommentar
Gjest Slettet+9871234 Skrevet 16. mars 2011 Del Skrevet 16. mars 2011 (endret) Skulle det ikke være enkelt å sette en variabel p (alternativt variabel vektor (p1,p2,...,pn)). Kall prisen før tillegg x og prisen etter tillegg / fradrag y. Dermed får man følgende formel ved prosentvis tillegg / fradrag: y = x * (1 +/- p/100) ved prosentvis tillegg / fradrag Generell formel: y = x * (1 +/- p1/100)*(1 +/- p2/100)* ... *(1 +/- pn/100) Ved 10 % rabatt settes for eksempel p = 10 i den første formelen over. Eksempel x = 1000. y = 1000 * (1 - p/100) = 1000 * 0.90 = 900. Det skulle ikke være vanskeligere ved absolutt pris tillegg / fradrag. For de som måtte gidde å lese alle min kode er dette det jeg har til nå... Portoen virker forsåvidt men det er veldig klønete. Ikke foreløpig om ovennevnte svar er godt nok. Merk for øvrig at enkle regneopersjoner kan utføres direkte i en MySQL database. Noen foretrekker det siden det er raskere. Det kan imidlertid redusere portabiliteten, spesielt om du buker PostGreSQL hvor man har flere "stored procedures" enn i MySQL. For øvrig er det viktig å gjøre sine websider mest mulig database uavhengig ved at man bruker et sentralt database konfigureringspunkt (ofte bestående av 4+ linjer.). http://php.net/manual/en/book.pdo.php er skreddersydd til dette formålet. Endret 16. mars 2011 av Slettet+9871234 Lenke til kommentar
demiurgen Skrevet 16. mars 2011 Forfatter Del Skrevet 16. mars 2011 Takk for svar. Jeg må nok tygge en stund på den der før jeg forstår den... Har ikke hatt matte siden ungdomskolen - og det begynner å bli en stund siden Takk for tipset om PDO også. Har aldri hørt om det men det virket ganske interessant. Lenke til kommentar
Gjest Slettet+9871234 Skrevet 17. mars 2011 Del Skrevet 17. mars 2011 (endret) Takk for svar. Jeg må nok tygge en stund på den der før jeg forstår den... Har ikke hatt matte siden ungdomskolen - og det begynner å bli en stund siden Da er de på tide med en oppfrisking. Enda et eksempel. La oss si at du får 15 % rabatt på en importert vare som kostet 1000 kroner, deretter legger du til 30 prosent avanse og til slutt 25 prosent moms. Hva koster varen i utsalg i Norge? y=1000(1-15/100)(1+30/100)(1+25/100)= 1000x0.85x1.30x1.25=1381.25 Dette er enkelt. Takk for tipset om PDO også. Har aldri hørt om det men det virket ganske interessant. Du trenger ikke finne opp kruttet på nytt om du bruker PDO. Bruker du i tillegg "object overloading", "prepared statements", navnerom etc som er tilgjengelig i PHP 5.3 og senere, kan du skrive meget kompakt og sikker kode i PHP. Mer informasjon her: http://www.oopschool.com/phpBB3/viewforum.php?f=11&sid=6b89548d5b353ab5403421fcdf938098 Endret 17. mars 2011 av Slettet+9871234 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å