Ik wil mijn variabelen bij elkaar optellen in het script om daarna het totaal weg te schrijven in de database. De gegevens komen dus vanaf een formulier en die data wil ik dan in het script al graag optellen en dan pas in de MySql database weg te schrijven.
Ik weet dat php met een punt scheiding werkt bij decimalen wat ik later weer omzet naar een komma in de layout.
Nu is het optellen van hele getallen niet zo heel moeilijk, maar ik begrijp even niet waarom dat met een decimaal erbij ineens wel moeilijk gaat, want tot mijn verbazing schrijft de php server het getal weg met een komma in mijn tabel. Wat doe ik dus fout en zie ik over het hoofd?
Moet ik nou float of varchar gebruiken als type in de database?
Om fouten te voorkomen met wegschrijven vanaf het formulier heb ik ervoor gekozen om de euro en centen apart te vermelden en die voeg ik in het script dan bij elkaar met de punt als scheidingsteken.
Nu bedacht ik dat het dus heel simpel op te tellen is met deze code:
$Prijs_netto = $Prijs_bruto + $Prijs_toeslag;
Maar als ik dit weg schrijf wordt er een komma geplaatst in de tabel. Why?
Ik weet niet of ik hier de SUM ook kan gebruiken omdat die in alles wat ik lees, enkel in de SELECT wordt toegepast en dat is nou juist het aparte, ik heb het nog niet in de database staan.
>> Moet ik nou float of varchar gebruiken als type in de database?
Een varchar zou ik niet doen.
Een float is mogelijk maar een decimal kan ook. Het verschil is dat je bij een decimal het aantal cijfers voor en achter de komma zelf kan opgeven. Bijvoorbeeld DECIMAL(10,2). Daarnaast wordt onze valuta ook nog wel eens in centen opgeslagen. 1 euro wordt dan opgeslagen als 100 eurocent. Bij het type integer kun je dan getallen opslaan tussen de -21 en +21 miljoen. Je moet zelf (met php) euro's naar eurocenten omrekenen.
>> Om fouten te voorkomen met wegschrijven vanaf het formulier heb ik ervoor gekozen om de euro en centen apart te vermelden en die voeg ik in het script dan bij elkaar met de punt als scheidingsteken.
Dit zou je niet moeten doen. Is onnodig werk en werkt juist fouten in de hand.
Bij varchar plaats ie alles wat jij zegt alsof het een lap tekst is. Je levert dan zelf de komma aan.
Bij Float herkent hij de door jou aangeleverde komma niet en laat deze en de cijfers er achter dan ook vervallen.
[size=xsmall]Toevoeging op 16/03/2022 17:10:57:[/size]
Zowel bij een float als een decimaal mag je geen komma gebruiken.
Komt je waarde uit een formulier dan is deze "vervuild" omdat mensen altijd van alles proberen. Je moet deze waarde dan zelf controleren, eventueel aanpassen en accepteren of weigeren. Indien je applicatie de opgegeven waarde weigert zul je een nette foutmelding aan de gebruiker moeten tonen.
Maar als je goed kijkt in mijn code gebruik ik een punt.
Dus in de database zie ik bij Prijs_bruto 10.00 en bij Prijs_toeslag 1.50
Maar het optellen doet de server dus zelf met een komma in de tabel Prijs_netto. Dus wat doe ik dan fout in mijn code en instellingen?
Frank Nietbelangrijk op 16/03/2022 17:05:33
Bij varchar plaats ie alles wat jij zegt alsof het een lap tekst is. Je levert dan zelf de komma aan.
Bij Float herkent hij de door jou aangeleverde komma niet en laat deze en de cijfers er achter dan ook vervallen.
[size=xsmall]Toevoeging op 16/03/2022 17:10:57:[/size]
Zowel bij een float als een decimaal mag je geen komma gebruiken.
Komt je waarde uit een formulier dan is deze "vervuild" omdat mensen altijd van alles proberen. Je moet deze waarde dan zelf controleren, eventueel aanpassen en accepteren of weigeren. Indien je applicatie de opgegeven waarde weigert zul je een nette foutmelding aan de gebruiker moeten tonen.
[size=xsmall]Toevoeging op 16/03/2022 18:41:10:[/size]
Hij laat hierbij de punt vervallen in de tabel. Geen centen te zien dus. 10.00 + 1.50 = 11
Andere optie of variatie?
[size=xsmall]Toevoeging op 16/03/2022 18:47:26:[/size]
Frank Nietbelangrijk op 16/03/2022 17:00:38
>> Moet ik nou float of varchar gebruiken als type in de database?
Een varchar zou ik niet doen.
Een float is mogelijk maar een decimal kan ook. Het verschil is dat je bij een decimal het aantal cijfers voor en achter de komma zelf kan opgeven. Bijvoorbeeld DECIMAL(10,2). Daarnaast wordt onze valuta ook nog wel eens in centen opgeslagen. 1 euro wordt dan opgeslagen als 100 eurocent. Bij het type integer kun je dan getallen opslaan tussen de -21 en +21 miljoen. Je moet zelf (met php) euro's naar eurocenten omrekenen.
>> Om fouten te voorkomen met wegschrijven vanaf het formulier heb ik ervoor gekozen om de euro en centen apart te vermelden en die voeg ik in het script dan bij elkaar met de punt als scheidingsteken.
Dit zou je niet moeten doen. Is onnodig werk en werkt juist fouten in de hand.
Ik snap hem nu... Ik had 10,0 bij Decimal staan. Nu met 10,2 telt hij de waardes perfect op!
Thanks!!!!
[size=xsmall]Toevoeging op 16/03/2022 18:54:31:[/size]
@Frank
>> Om fouten te voorkomen met wegschrijven vanaf het formulier heb ik ervoor gekozen om de euro en centen apart te vermelden en die voeg ik in het script dan bij elkaar met de punt als scheidingsteken.
Dit zou je niet moeten doen. Is onnodig werk en werkt juist fouten in de hand. <<
De gebruiker is slechtziend en als deze dan in het veld een komma plaatst i.p.v. een punt, dan heb ik pas een probleem. En dit gebeurde regelmatig helaas. Vandaar dat ik het nu zo gescheiden doe. Nu werkt het perfect.
>> De gebruiker is slechtziend en als deze dan in het veld een komma plaatst i.p.v. een punt, dan heb ik pas een probleem. En dit gebeurde regelmatig helaas. Vandaar dat ik het nu zo gescheiden doe. Nu werkt het perfect.
Ik dacht dat je het apart op ging slaan in de database. Heb ik niet goed gelezen :-)
Sinds ik de website heb gebouwd in 2008 gebruikte ik simpel een veld waarin handmatig het bedrag incl decimaal werd ingevoerd.
Aangezien ik de website aan het vernieuwen ben en ik fouten tegenkwam bij de invoer door de gebruiker, heb ik er nu voor gekozen dat ze nooit meer een fout karakter in kunnen voeren voor het optimaal gebruik van het systeem.
Nu is er enkel een kolom toeslag bijgekomen en die wil ik dus direct optellen en later deze apart optellen voor de boekhouder.
Mijn gehele website rekent al met decimalen en dat werkt al jaren prima. Ik liep enkel vast in het optellen met mijn script. Maar dat heb ik nu dus wel geleerd dankzij de reacties.
Ivo P op 16/03/2022 22:06:31
afgezien van validatie van wat er in de post-velden zit:
<?php
$Prijs_bruto = $_POST['Prijs_euro'] . '.' . $_POST['Prijs_cent'];
?>
hier bouw je een string die er uit ziet als een decimaal getal.
Maar zoals eerder al opgemerkt: het is wel verstandig om te controleren of die velden wel puur uit cijfers bestaan.
[size=xsmall]Toevoeging op 17/03/2022 17:28:48:[/size]
Raar maar waar....
De optelling met de punt geeft in een echo het resultaat met een komma. Vandaar dat hij het niet weet te verwerken in de database.
Dit gaat even buiten mijn logica.
Ik had inmiddels het number format al gebruikt.
Maar waarom maakt de php server een komma van een punt??
Die logica snap ik gewoon niet.
Als ik nu alles eerst moet gaan delen, dan kan ik de rest van mijn systeem aan gaan passen omdat de waardes in mijn database dan niet kloppen. Het gebruik van number formaat lost nu mijn probleem wel op, maar begrijpen doe ik het niet.
[size=xsmall]Toevoeging op 17/03/2022 19:42:05:[/size]
@adoptive
Jouw code zonder number format geeft bij een decimaal getal een komma bij, in dit geval, de toeslag.
Kan het zijn dat dit met php versie 7 te maken heeft?