Versio

Controle bedrag

Overzicht Reageren

Sander

sander

04/05/2009 16:36:00
Quote Anchor link
Ik loop tegen het volgende probleem aan, gezien de kennis hier aanwezig hoop ik dat jullie mij kunnen helpen.

Een ingevuld formulier bevat ondermeer de waarde van een bedrag. De ingevulde waarde wil ik controleren, voordat er verdere actie wordt ondernomen. Het bedrag moet aan een aantal eisen voldoen:
- Het bedrag mag niet kleiner zijn dan 1 euro;
- Het bedrag mag niet groter zijn dan 10.000 euro;
- Er mogen zowel hele euro's als centen ingevuld worden. Maar natuurlijk niet meer dan twee getallen achter de komma.

Het bedrag moet uiteindelijk resulteren in een bedrag in centen. Dus:
- Wanneer er geen centen zijn ingevuld, moet het bedrag vermenigvuldigd worden met honderd.
- Wanneer er centen ingevuld zijn, moet het bedrag ook vermenigvuldigd worden met honderd.

Uiteindelijk wil ik als resultaat het bedrag in centen (vb: 995) en het bedrag in euro's, met de centen erbij (vb: 9,95).

Wie kan mij helpen?
 
PHP hulp

PHP hulp

24/05/2012 06:56:29
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Karl Karl

Karl Karl

04/05/2009 16:39:00
Quote Anchor link
Hoe goed ben je?
Je kunt misschien beter die centen in een apart veld zetten, makkelijker met controleren.
Heb je al naar language.operators.comparison gekeken?
 
Wout van der Burg

Wout van der Burg

04/05/2009 16:44:00
Quote Anchor link
waarden met een onkeyup/onkeydown/onclick actie controleren met JavaScript is denk ik het handigst.
 
Dennis de Vries

Dennis de Vries

04/05/2009 16:45:00
Quote Anchor link
Ik zou het ook met 2 velden doen. 1 voor de hele euro's en 1 voor de centen.
 
Sander

sander

04/05/2009 16:53:00
Quote Anchor link
Bedankt voor jullie reacties!

Ik kan redelijk overweg met PHP, iets als language.operators.comparison is mij dan ook bekend. Hiermee kun je niet controleren of een ingevuld bedrag decimalen bevat?

Dat is eigenlijk de eerste stap die ik wil maken: bevat het bedrag decimalen? Vervolgens kan ik verder controleren. Juist deze stap is waar ik vast loop.

Werken met javascript onkeyup/onkeydown/onclick actie lijkt me niet interessant. De bedragen kunnen nogal variƫren (tussen 1 en 10.000 euro). De bezoeker blijft dan klikken, of ik moet de werking ervan verkeerd begrijpen?
 
Karl Karl

Karl Karl

04/05/2009 17:20:00
Quote Anchor link
sander schreef op 04.05.2009 16:53:
Ik kan redelijk overweg met PHP, iets als language.operators.comparison is mij dan ook bekend. Hiermee kun je niet controleren of een ingevuld bedrag decimalen bevat?

Yeah, right. Als je effe had geklikt had je gezien dat het wat anders is...

sander schreef op 04.05.2009 16:53:
Dat is eigenlijk de eerste stap die ik wil maken: bevat het bedrag decimalen? Vervolgens kan ik verder controleren. Juist deze stap is waar ik vast loop.

Waarom wil je niet gewoon twee velden? Want nu heb je het probleem van, wat vind jij en wat vind de gebruiker dat een scheidteken is. Hoe maak je duidelijk aan de gebruiker dat je ook centen in mag voeren, gaat de gebruiker dan niet denken van dat getal moet ik in z'n geheel in centen invoeren?

sander schreef op 04.05.2009 16:53:
Werken met javascript onkeyup/onkeydown/onclick actie lijkt me niet interessant. De bedragen kunnen nogal variƫren (tussen 1 en 10.000 euro). De bezoeker blijft dan klikken, of ik moet de werking ervan verkeerd begrijpen?

Ja, je hebt de werking verkeerd gesnapt. Verder vind ik persoonlijk javascript oplossingen ook niet alles, omdat je dus de controle aan de client-side doet, dus kan de client die zo omzeilen.
 
Sander

sander

04/05/2009 19:14:00
Quote Anchor link
Natuurlijk is het makkelijkste om twee velden te programmeren. Maar ik denk liever vanuit het oogpunt van de bezoeker. Die wil een bedrag invullen, zonder fratsen. Bezoeker A gaat voor 1,50. Bezoeker B gaat voor 20. Bezoeker C gaat voor 12.50. Dat moet in mijn optiek allemaal kunnen. In de verwerking van het formulier, ga je vervolgens standardiseren: deze verschillende bedragen omzetten naar een getal, wat het bedrag in centen voorstelt.

Dat gaat niet met language.operators.comparison. Misschien moet Karl de uitleg ervan nog maar eens lezen: "Comparison operators, as their name implies, allow you to compare two values." Ik heb geen twee waarden, dus er valt niks te vergelijken?

De andere oplossingen (twee velden en werken met javascript) zijn in mijn ogen niet gebruiksvriendelijk genoeg. Je maakt tenslotte een website voor de bezoeker? Dan moet het zo gebruiksvriendelijk mogelijk zijn!

Concreet is mijn vraag dan ook: hoe controleer je of een waarde decimalen bevat?
 
Karl Karl

Karl Karl

04/05/2009 19:19:00
Quote Anchor link
sander schreef op 04.05.2009 19:14:
Dat gaat niet met language.operators.comparison. Misschien moet Karl de uitleg ervan nog maar eens lezen: "Comparison operators, as their name implies, allow you to compare two values." Ik heb geen twee waarden, dus er valt niks te vergelijken?

sander schreef op 04.05.2009 16:36:
- Het bedrag mag niet kleiner zijn dan 1 euro;
- Het bedrag mag niet groter zijn dan 10.000 euro;

De rest, tja, dan moet je denk ik maar gebruik maken van string functie's als strpos enzo.
 
Sander

sander

05/05/2009 09:40:00
Quote Anchor link
Met behulp van een reactie op een ander forum heb ik het volgende in elkaar gebrouwen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if(!is_numeric($_POST['Bedrag']))
{
  // foutmelding
}
else
{
  $Bedrag = $_POST['Bedrag'];
  // Bedrag zonder punten en komma's
  $Bedrag_zonder_puntkomma = str_replace(array(',','.','-'),'',$Bedrag);
  // Is het bedrag veranderd?
  if($Bedrag_zonder_puntkomma == $Bedrag)
  {
    // Het bedrag is niet gewijzigd, er zaten geen punten en komma's in. Dus een bedrag in hele euro's.
    $Bedrag_in_centen = $Bedrag * 100;
  }
  else
  {
    // Het bedrag is wel gewijzigd, er zaten punten en komma's in. Het bedrag is in centen.
    $Bedrag_in_centen = $Bedrag_zonder_puntkomma;
  }
}


De waarde $Bedrag_in_centen wordt vervolgens verwerkt.
 
Sander

sander

05/05/2009 11:29:00
Quote Anchor link
De eerste regel:
if(!is_numeric($_POST['Bedrag']))
Geeft een foutmelding wanneer er een bedrag met komma wordt ingevuld.

Ik heb deze vervangen door:
if (!preg_match('#\d+([,.]\d{2})?#', $_POST['Bedrag']))

Nu werkt het probleemloos.
 



Overzicht Reageren