Hallo,

Ik heb een heel simpel bestelscriptje waar je een aantal kaarten kunt bestellen.
Het werkt via een Form, welke de variabelen meestuurd naar een "sendHTMLEmail" pagina.
Op deze pagina moeten de variabelen uitgelezen worden, en een totaalbedrag moet gegenereerd worden, welke vervolgens automatisch in het mailbericht verschijnt.

De variabelen neemt de pagina prima mee, en de variabelen zijn leesbaar in het email bericht.
De rekensom om tot het totaalbedrag te komen werkt echter niet, het totaalbedrag blijft 0.

Dit zijn de variabelen:
aantal, prijs en kosten

Ik lees ze uit met een GET:
$totaal1 = $_GET['aantal'];
$totaal2 = $_GET['prijs'];
$totaal3 = $_GET['kosten'];
$antwoord = ($totaal1 * $totaal2) + $totaal3;


En de Email, pagina:

function sendHTMLEmailAuto($name, $adres, $postcode, $woonplaats, $email, $subject, $prijs, $aantal, $kosten, $antwoord){
	include("web2mail_config.php");
	$recipient = "$name <$email>";
	$rand = md5(time());
	$mime_boundary = "SNNC_". $rand;
	$sub = "$auto_subject aan $name";
	//$text_version = "$name, bedankt voor uw reservering via $your_website.\n\nMet vriendelijke groet\n$yourname\n\n\nOpmerking: Dit is een automatisch gegenereerd bericht, u kunt niet antwoorden op deze mail";
	$html_version = "<html>\n<head>\n<style>\nA:link {text-decoration: none; color: $alink_color;}\nA:visited {text-decoration: none; color: $vlink_color;}\nA:hover {font-style: normal; color: $hlink_color; text-decoration: underline;}\nBODY{font-family: $html_font; font-size: $html_font_size;}TD {font-family: $html_font; color: #000000; font-size: $html_font_size;}\n</style>\n</head>\n<body>\n\n<table border=\"0\" cellpadding=\"6\" cellspacing=\"0\" width=\"100%\">\n<tr>\n<td colspan=\"2\">Geachte $name,<br><br>Dank voor uw bestelling. Wij hebben deze in goede orde ontvangen.<br><br>Uw bestelling:<br><br></td>\n</tr>\n
<tr>\n<td nowrap width=\"1%\">Product</td>\n<td width=\"99%\">$subject</td>\n</tr>\n
<tr>\n<td nowrap width=\"1%\">Aantal</td>\n<td width=\"99%\">$aantal</td>\n</tr>\n
<tr>\n<td nowrap width=\"1%\">Prijs</td>\n<td width=\"99%\">&euro; $prijs</td>\n</tr>\n
<tr>\n<td nowrap width=\"1%\">Verzendkosten</td>\n<td width=\"99%\">&euro; $kosten</td>\n</tr>\n
<tr>\n<td nowrap width=\"1%\">Totaal</td>\n<td width=\"99%\">$antwoord</td>\n</tr>\n
En nog een zooi bla bla bla....

$antwoord moet dus het totaal bedrag geven, maar doet dit niet.

Iemand enig idee hoe ik deze "rekensom" correct op kan zetten?
(was altijd al een druiloor met wiskunde ;-) )

Groeten,
Luit
Geen idee hoe het kan dat de variabelen wel uitgelezen worden...ben wat dat betreft een totale php n00b...

Krijg het nog niet voor elkaar om cijfers achter de komma uit te lezen.
Heb nu het volgende:

$prijs = $_POST['aantal'] * $_POST['prijs'];
$totaal3 = (int)$_POST['kosten'];
$antwoord = $prijs + str_replace(',','.',$totaal3);


$antwoord blijft een geheel getal geven dus 50 in plaats van 50,45

ps Ivo, nee de prijzen etc. word niet door de klant ingevuld.
Enigste wat de klant kan doen is het aantal opgeven.

Enigste wat de klant kan doen is het aantal opgeven.


Als dat het enige is wat de klant kan doen, hoe komt die prijs dan in je $_POST terecht??

Bij welke 3 invoeren (aantal, prijs, kosten) kom je op 50 ipv 50.45 uit?
Prijs is wel een variabele, maar enkel door mijzelf in te voeren.
Bij prijs en kosten kan het gebeuren dat er een getal achter de komma verschijnt.

Voorbeeld:
Ik bestel 2 kaarten a 10,00 Euro per stuk en er komt 2,50 verzendkosten overheen.
Dan komt het totaal op 22,50 Euro

Ik krijg 22 Euro in het overzicht, de ,50 wordt dus niet meegenomen.
>>> Prijs is wel een variabele, maar enkel door mijzelf in te voeren.

Dan mis je hier enige kennis van beveiliging.
Alle POST en GET variabelen zijn aan te passen door gebruiker!
Ik kan gewoon een POST['prijs'] = 0 mee sturen en krijg dus alles gratis.

Vertrouw nooit input uit een POST of GET. Als jij een getal verwacht, controleer dit dan ook, het kan evengoed een kwaadaardig script zijn.
Ja, dat weet ik, maar het wordt alleen maar intern gebruikt.
Het is meer een geinige aanvulling dan dat het echt igezet word voor een (commerciele) website.
Toch zou de cijfers achter de komma een leu,ke toevoeging zijn, maar de berekening neemt het niet mee.
De (int) kan geen cijfers achter de komma bevatten. Haal deze eens weg.
Ook al wordt het intern gebruikt, het is dan nog steeds logischer om gewoon een variabele $prijs te hebben ipv $_POST['prijs'].

Edit: Blijkbaar kan int wel cijfers achter de komma bevatten.
De reden zal zijn dat je komma's gebruikt in plaats van een punt.
Met een komma kun je niet rekenen en is het een string ipv een getal.
Zorg dus dat alle prijzen een punt bevatten, en eventueel voor het weergeven kun je deze met number_format of de str_replace die je nu gebruikt aanpassen.

Zo zou het kunnen, maar niet aan te raden
<?php
$kosten = '2,34';

$prijs = 30 * str_replace(',','.','4,96');
$totaal3 = str_replace(',','.',(int)$kosten);
$antwoord = $prijs + str_replace(',','.',$totaal3);

echo number_format($antwoord, 2, ',', ' ');
?>
Michael - op 15/04/2014 16:08:38

Edit: Blijkbaar kan int wel cijfers achter de komma bevatten.


int = integer = geheel getal. (positief of negatief)

Om een getal uit een POST te halen gebruik ik altijd strval().

$getal = strval(str_replace(',', '.', $_POST['getal']));
echo $getal;
Het werkt bijna... nog 1 dingetje, er komt 1 cijfer achter de komma i.p.v. 2 ;-)
Dus 22.5 i.p.v. 22.50 Is dit nog makkelijk aan te passen?
en number-format gebruik je eigenlijk alleen in combinatie met echo (of als je het getal als string in een mail plakt).

Niet om het als getal te bewaren, want dan valt of de 0 er weer af, of je hebt een probleem omdat je een komma als decimaalteken gebruikt

Reageren