Gå til innhold

Hjelp til utregning med PHP


Anbefalte innlegg

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
Videoannonse
Annonse
Gjest Slettet+9871234

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 av Slettet+9871234
Lenke til kommentar

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

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 av Slettet+9871234
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...