forceren decimaal scheidingsteken
Heb aan het begin van mijn php code de regel setlocale(LC_ALL, 'nld_NLD'); opgenomen.
Toch verschijnen er in FireFox puntjes als decimaal scheidingsteken in mijn bedrag velden ( input type = "number" ) en als ik daar kommatjes invul en vervolgens submit krijg ik volgende foutmelding:
Failure to query with database with query update meterstanden set veld1 = 1281, veld2 = 46900, veld3 = 5700, veld4 = 1126, veld5 = 43287, veld6 = 5350, veld7 = 4,10, veld8 = 0.30, veld9 = 0.85, veld10 = 4.10, veld11 = 276.00, veld12 = 348.00, veld13 = 2, veld14 = " ", veld15 = "Grote afwijking in opgegeven eindstand water." where veld0=10009 and jaar=2013
Je zou denken een gewone foute communicatie met de MySQL database vanwege de komma bij veld7, maar als ik hetzelfde in Chrome probeer, krijg ik daar wél komma's als decimaal scheidingsteken en gaat het verder ook gewoon goed.
Nu is mijn vraag: is er nog een ( extra ) manier om in alle browsers ( dus ook in FireFox ) hetzelfde gedrag als in Chrome te forceren?
Gerard
Toevoeging op 26/03/2013 16:52:53:
Maar let even op: Mysql kijkt NIET naar de PHP-instellingen die je met setlocale doet.
MySQL moet gewoon een punt hebben, ongeacht welke instelling dan ook.
Maar ik vind het raar dat je bij veld7 4,10 gebruik en bij veld8 0.30
Dus bij de ene een komma, bij de andere een komma.
Daarnaast zis een omschrijving als veld1 tm veld15 erg slecht.
Toch een paar kanttekeningen bij je reactie:
De aanduidingen "Veld1" t/m "Veld15" zijn dummy namen in de foutmelding tekst omdat ik geen echte veldnamen wilde meegeven.
Het "inconsequente" gebruik van komma's en punten was juist bedoeld om de fout aan te geven/te forceren.
Daarnaast snap ik dat MySQL "intern" punten verwacht. Dat is met meerdere databases zo, alleen dat is aan ( bijna ) geen gebruiker uit te leggen. Zeker niet van het gebruikersniveau waarvoor ik het programma schrijf. Die willen komma's als decimaal scheidingsteken in hun velden kunnen invoeren. Dat dat vervolgens door MySQL of wat dan ook naar punten wordt vertaald is iets voor "achter de schermen". Daarbij geef ik in het voorbeeld aan dat Chrome wél op de gewenste wijze werkt. Daar kan een gebruiker in zijn invoerveld een komma gebruiken en gaat MySQL daarvan niet "over z'n nek".
Ben er intussen achter dat het "goed werken" van de komma als decimaal scheidingsteken een gedrag van het html5 input type "number" is. In FireFox werkt ditzelfde gedrag dus blijkbaar niet??? Ben overigens "teruggestapt" op input type "text" voor de getallen, omdat html5 nog niet door alle browsers ondersteund wordt en ik browserafhankelijkheid zoveel mogelijk wil vermijden.
Wat ik dus voor ogen heb is dat de gebruiker in het invoerveld een komma als decimaal scheidingsteken ziet, terwijl het voor MySQL een punt wordt / blijft. Overigens lijkt setlocale daarvoor niet te werken.
Gerard
Je kan input type "number" gewoon gebruiken want als een browser de input type niet herkent, schakelt hij als het goed is automatisch terug naar "text" aangezien dat de standaard is. Je kan eventueel ook input type "text" gebruiken en JavaScript gebruiken om punten naar komma's om te zetten en te controleren op geldigheid.
Beter kan je serverside 1 standaard aanhouden (de mysql standaard dus) en gewoon zelf zorgen dat input altijd eerst wordt omgezet naar die standaard voor je er mee gaat werken. Als je dus een komma als scheidingsteken binnen krijgt, dit eerste omzetten naar een punt, en dan invoeren in de database.
Verandert alle komma's naar punten.
Let op dat 83,937,371,373.00 dus iets ongeldigs wordt.
483.373.371.371,27 gaat ook niet werken zoals verwacht.