Avatar billede JMB2308 Nybegynder
01. juli 2011 - 08:39 Der er 7 kommentarer og
1 løsning

Brug af komma i forms bliver ikke overført til databasen

Hej

Jeg er ved at lave en database, der har mange indtastninger af beløb fra brugerens side. Disse beløb er oprettet, som decimal(10,2) og vises sådan her; xxx.xx

Mit problem er, at særligt danske brugere ville skrive xxx,xx når de skal bruge decimalerne, men tallet der overføres til DB'en er xxx.00 i alle tilfælde.

P.t. opfordres brugerne til at bruge "." i stedet for ",", men det synes jeg ikke er en ret god løsning.

Jeg tror svaret ligger lige foran mig, men kan ikke rigtig finde det nogen steder. Har også prøvet at søge google og forskellige fora igennem, men har ikke fundet et tilfredsstillende svar.
Avatar billede erikjacobsen Ekspert
01. juli 2011 - 09:01 #1
Du skal selv tage fat i den indtastede streng, og erstatte "," med "." - du kan ikke sætte MySql op til at forstå andet end "." i et komma-tal.
Avatar billede JMB2308 Nybegynder
01. juli 2011 - 09:08 #2
Så hvis jeg har følgende input:
<label for="amount">Amount:</label><input type="text" size="4" name="amount">

Hvad skulle jeg så gøre for at der kan skrives komma i stedet for punktum?
Avatar billede JMB2308 Nybegynder
01. juli 2011 - 10:16 #3
Har fundet ud af det nu. Brugte str_replace(',', '.', $amount) på variablen. Tak for hjælpen ellers.
Avatar billede nemlig Professor
01. juli 2011 - 11:59 #4
Det kan altså også give problemer.
Hvad nu, hvis brugeren indtaster værdien "7.551,00".
Så vil din kode blive til "7.551.00" og det vil jeg mene, at MySQL vil opfatte som "7.51" - altså en helt anden værdi.

Derfor vil jeg starte med at fjerne punktum fra inputtet med str_replace() og derefter udskifte komma med punktum, som du selv foreslår.

Men det giver også problemer, hvis der indtastes i engelsk format, fx. "500.75". Så vil koden ændre sig til "50075".

Med andre ord - så er det næsten umuligt at lave kode, der skal tage højde for både engelske og danske beløbsformatter.
Avatar billede arne_v Ekspert
01. juli 2011 - 15:39 #5
Jeg vil foreslaa:
1) skriv paa siden i hvilket format data skal indtastes
2) valider at data faktisk er i det format (f.eks. med regex)
3) hvis ikke ok saa faar bruger en fejl lige i sylten
4) hvis ok saa gemmer man
Avatar billede nemlig Professor
01. juli 2011 - 16:02 #6
Løsningen kan også være noget javascript, som konverterer til korrekt format, når feltet forlades.
Jeg bruger fx. i mine danske tal-felter et lille script, som konverterer inputet til dansk format. Fx.
900 = 900,00
9999 = 9.999,00
20,2 = 20,20

Dermed kan brugeren se, hvad resultatet bliver.
Avatar billede lone_a_p Praktikant
03. juli 2011 - 22:10 #7
$amount = str_replace('.', '', $amount);
$amount = str_replace(',', '.', $amount);
... og skriv $amount til databasen.

Undgå fejl ved tusindnotaition. Fjern først tusindnotationstegn. Byt derefter det danske komma med det engelske.
Avatar billede lone_a_p Praktikant
03. juli 2011 - 22:10 #8
Men så skal alle skrive i dansk format - og ingen i engelsk :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester