16. juni 2005 - 12:36Der er
77 kommentarer og 1 løsning
Form med tal
Hej. Jeg har en form hvor et af felterne skal udfyldes med et tal. Hvordan sikrer jeg at brugerne højest kan indtaste 6 cifrede tal i feltet. Har prøvet at sætte feltet til int med 6 tegn i MySql databasen, men kan alligevel indtaste 1000000 (7cifre).?????
Hvis du skal checke det inden formularen submittes, kan du ikke bruge PHP. Så skal du bruge javascript. Men hvis du vil lade brugeren submitte formularen, og dernæst checke, kan du bruge PHP. Which will it be?
Nej, for hvis du fanger 99,9% af de indtastningsfejl, brugeren laver client-side, sparer du både din server for noget unødig belastning og brugeren for den ventetid, der måtte være på at serveren returnerer med en fejlmeddelelse !o]
Men selvfølgelig skal du også checke serverside, man kunne jo forestille sig ondsindede brugere, som lavede deres egen form, hvor checket ikke var på (samt måske, at du lige præcis fanger een af de få, som har javascript disablet !-)
roenving >> Helt enige om at serverside-validering er et must. Men jeg vil stadig mene, at serveren bruger den kraft den bruger på at checke formen, og bruger hverken mere eller mindre hvis formen ikke kan valideres. Ja altså, det kommer selvfølgeligt an på koden, men såfremt man bygger det nogenlunde fornuftigt op...
Hvis du har et antal felter, som er mandatory og/eller har bestemte form-krav, risikerer du at skulle returnere den samme side til brugeren for hvert eneste felt, måske endda flere gange ved f.eks. strikse krav til datoer, og det betyder jo, at serveren flere gange skal behandle det samme, og det er jo tåbeligt, hvis man kan lade de simple indtastningsfejl være behandlet af brugerens maskine (hvor der med meget stor sandsynlighed er mylliarder af kræfter i overskud !-)
Jeg vil mene at den bedste løsning vil være: <?php if(ereg('[0-9]{6}',$tal_fra_form)) !== true) { print "Der skete en fejl"; } else { // Mysql indsæt tingest her }
Synes godt om
Slettet bruger
16. juni 2005 - 16:16#12
Jeg regner med, at grunden til at du siger at der ikke må indtastes 0 er, at du ikke vil have "0" alene, men "102040" godt må komme med:
<? if(is_numeric($_POST['tal']) && $_POST['tal'] != 0) { # Det virker } else { #Enten er det en streng der er indtastet, 0 eller slet ingen ting
?>
Synes godt om
Slettet bruger
16. juni 2005 - 16:16#13
<? if(is_numeric($_POST['tal']) && $_POST['tal'] != 0) { # Det virker } else { #Enten er det en streng der er indtastet, 0 eller slet ingen ting } ?>
wicez hvordan ser det ud hvis jeg skal spørge på om det er falsk dvs. noget i retning af if(!is_numeric($_POST['tal']) && $_POST['tal'] = 0) { der er fejl}
Jeg har et problem med de blanke tegn. Jeg har et felt hvor der skal skrives noget, men hvor man slipper afsted med kan at lave blanke tegn. if (empty($_POST[alder]) && trim($_POST[alder]) == "") { echo "du skal skrive et tal"; ?>
if (!preg_match ("/^[1-9]\d{0,5}$/", $input_number)) { ...
Fortolkning: Efter at vi har slettet blanktegn foran og bagved skal der stå et ciffer i internallet 1-9 måligvis efterfulgt af op til 5 vilkårlige ciffre.
Nu er det så ikke hele formen vi ser, men lige netop med dato halløj, er det langt mere sikkert at bruge nogle selects, år, måned, dato, og derefter bruge checkdate() b.t.w. :O)
Jeg spørger på om feltet er tomt for det må det ikke være. Men i samme forespørgsel siger den at feltet er tomt hvis jeg har skrevet et 0. Men 0 er iorden så hvordan får jeg den til at acceptere det ??
Synes godt om
Slettet bruger
17. juni 2005 - 10:33#60
hoejgaard du må undskylde at jeg ikke svarede på dine spørgsmål.. jeg havde regnet med at få en mail :/
Synes godt om
Slettet bruger
17. juni 2005 - 10:34#61
if (!preg_match ("/^([0-9]\d{0,5})$/", $input_number))
Ja fint :-) Jeg har lige et andet valideringsspørgsmål hvis vi ka klare det her. Jeg skal have valideret et brugernavn som må bestå af tal,bogstaver,og bindestreg, men ikke alle mulige specialtegn.. Hvordan ser forespørgslen så ud ??
okay fint, puha det er hårdt med den validering, men det er nødvendigt til en vis grad.. Lige en lille ting til : Når jeg smider feks. navnene "a a" og "a a" i databasen så er det ok, men når jeg hvier dem ud af databasen og skriver dem ud så er de ens som "a a" Kan jeg ikke få dem skrevet ud som de står i databasen med korrekte mellemrum ??
øhh er ikke helt med. Hvordan skal jeg lave om på følgende så det whitespaces ikke skippes ?? : <td align = left width="20%"><? echo "<a href=\"visprofil.php?vis=".$row['brugernavn']."\" class='link9'>$row[brugernavn]</a>"; ?></td>
Ja har stadig ikke fået løst det med at undgå at whitespacene skippes. Har lige en ting med valideringen : <? if (!preg_match( "/^[a-zæøåA-ZÆØÅ\-\.\_\ ]{1,12}$/", $_POST['brugernavn']) && !empty($_POST[brugernavn])) { ?> <tr><td width="7%" ><br> </td><td class="td17"><br><b>Du har indtastet et ugyldigt brugernavn !</b></td><td width="13%"><br> </td></tr> <? } ?>
Hvis $_POST[brugernavn]=tester112 så siger den at det er ugyldigt.. Det forstår jeg ikke?? Er den ikke sat til at godkende tal ??
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.