Hey allemaal,
Wat is de beste manier om een prijs (geld) veld te gebruiken in SQL?
Ik gebruik nu een decimal, maar weet niet zeker of dat de juiste manier is?
Als ik met mijn php script een komma ga invoeren krijgt ik een SQL error.
Ik neem aan dat dit komt omdat ik de , moet escapen, maar hoe?
Of heeft iemand een betere oplossing?
- Prijs (geld) toevoegen SQL
-
28-06-2012, 12:57 #1
- Berichten
- 348
- Lid sinds
- 15 Jaar
Prijs (geld) toevoegen SQL
-
In de schijnwerper
-
28-06-2012, 13:02 #2
- Berichten
- 1.901
- Lid sinds
- 18 Jaar
Re: Prijs (geld) toevoegen SQL
Hoi Ton,
decimaal veld is prima, de opmaak van het veld is: DECIMAL(x,y), waarbij x het totaal aantal cijfers is en y het aantal cijfers na de komma. Voor bedragen tot 999.99 is het dus DECIMAL(5,2).
De fout die je krijgt is omdat een decimale waarde in MySQL door een puntje wordt gescheiden en niet door een komma. Als je een waarde invoert in de database moet je dus 9.95 invoeren in plaats van 9,95.
Simpelweg: str_replace(",", ".", $waarde) voldoet vaak al. Om te kijken of er een geldige waarde over blijft kun je dit doen:
$waarde = "9,95";
$decimal = str_replace(",", ".", $waarde);
if(floatval($decimal) > 0) { de ingevulde waarde is geldig }
else { er is geen geldig getal over gebleven }
-
28-06-2012, 13:10 #3
- Berichten
- 263
- Lid sinds
- 17 Jaar
Re: Prijs (geld) toevoegen SQL
Precies zoals Joshua het uitlegt. Daarbij wil ik vermelden dat mocht je met API's of XML's van andere partijen werken en deze in jouw database knallen dan moet je oppassen dat sommige feeds ook een . gebruiken bij duizendtallen. Bijvoorbeeld: 11.000,50
In dit geval moet je eerst de . eruit halen en daarna de , omzetten naar een .
Soms, vraag me niet waarom, zie ik ook mensen alleen maar INT velden gebruiken voor bedragen, zodra zij de data eruit halen dan knallen ze een , tussen het één na laatste en twee na laatste cijfer (voor de centen). Misschien doen ze dit omdat INT wellicht sneller werkt qua zoek queries als DECIMAL. Of dit echt zo is weet ik niet, maar dat zou misschien de reden kunnen zijn.
Hoi Ton,
decimaal veld is prima, de opmaak van het veld is: DECIMAL(x,y), waarbij x het totaal aantal cijfers is en y het aantal cijfers na de komma. Voor bedragen tot 999.99 is het dus DECIMAL(5,2).
De fout die je krijgt is omdat een decimale waarde in MySQL door een puntje wordt gescheiden en niet door een komma. Als je een waarde invoert in de database moet je dus 9.95 invoeren in plaats van 9,95.
Simpelweg: str_replace(",", ".", $waarde) voldoet vaak al. Om te kijken of er een geldige waarde over blijft kun je dit doen:
$waarde = "9,95";
$decimal = str_replace(",", ".", $waarde);
if(floatval($decimal) > 0) { de ingevulde waarde is geldig }
else { er is geen geldig getal over gebleven }
-
28-06-2012, 13:16 #4
- Berichten
- 348
- Lid sinds
- 15 Jaar
Re: Prijs (geld) toevoegen SQL
Oke, ik heb 'm door :)
Werkt prima zo inderdaad! Bedankt voor de snelle reacties
-
28-06-2012, 16:52 #5
- Berichten
- 691
- Lid sinds
- 14 Jaar
Re: Prijs (geld) toevoegen SQL
Kijk ook eens naar de functie number_format
-
28-06-2012, 17:20 #6
- Berichten
- 1.901
- Lid sinds
- 18 Jaar
Re: Prijs (geld) toevoegen SQL
@S van Laere: geeft dan ook wat meer tekst en uitleg (gezien we een Nederlands forum hebben en php.net Engels is).
number_format wordt gebruikt, zoals de naam al zegt, voor het opmaken van een getal:
$number = 22.95;
$display = number_format($number, 2, ",", ".");
Parameter 1 = het decimale getal uit de database (met een puntje dus)
Parameter 2 = het aantal decimalen
Parameter 3 = het decimaal scheidingsteken
Parameter 4 = het duizenden scheidingstekens
$display bevat nu dus "22,95", het formaat dat we hier gewend zijn.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic