23. august 2003 - 00:44Der er
17 kommentarer og 2 løsninger
Validering af formular
Jeg en temmelig mange formular felter jeg skal have valideret, nogen der har en smart funktion eller lignende der kan tjekke om det pågældende felt er udfyldt, for langt, forkert udfyldt ol. ?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
foreach ( $felter as $value ) { if ( (!$_POST[$value[0]]) OR (strlen($_POST[$value[0]]) =< $value[1]) ) { print "Det fælt skal være udfyldt og have mere end 19 bogstaver!"; }
if ( ereg ("([a-zæøå])", $_POST[$value[0]]) ) { print "Du må kun bruge a-z og æøå!"; } } ?>
Eller en Javascript ting?
<script language="javascript"> <!-- function checkForm() { if (document.submit.felt1.value=="") { alert("Du har ikke indtastet dit navn!"); return false; } else if (document.submit.felt2.value=="") { alert("Du har ikke indtastet din alder!"); return false; } else if (document.submit.felt3.value=="") { alert("Du har ikke indtastet din alder!"); return false; } else if (document.submit.felt3.value < 20) { alert("Der er mindre end 20 bogstaver i felt4!"); return false; } else if (document.submit.password1.value=="") { alert("Du har ikke indtastet din adgangskode!"); return false; } else if (document.submit.password2.value=="") { alert("Du har ikke bekræftet din adgangskode!"); return false; } else if (document.submit.password1.value!=document.submit.password2.value) { alert("Du har ikke bekræftet din adgangskode korrekt!"); return false;
} return true; } function isInteger(streng) { var isOK = true; if (streng.length==0) isOK = false; for (var i=0;i<streng.length;i++) { if ((streng.charAt(i) < "0") || (streng.charAt(i) > "9")) isOK = false; } return (!isOK); } //--> </script>
marduk666: Mere ala en funktion, hvor jeg kan skrive 'valider_felt($feltnavn, $maxlaengde)' og så checker den at feltet er udfyldt, ikke overstiger max længde, kun indeholder tal eller bogstaver osv og giver et passende svar.
Tænkte bare at der fandtes nogle smarte funktioner der kunne den slags så jeg slap for at lave en selv :P
gogogolplex> ulempen ved at tjekke serverside, er at hvis der er fejl i indtastning, og man skal tilbage igen, så kan du komme ud for at skulle indtaste det hele om igen, og det kan være irriterende hvis der er meget der skal indtastes
function valider_felt($feltnavn, $intMax) { if ( ($feltnavn) AND (!strlen($feltnavn) > $intMax) AND ((ereg ("([a-z0-9æøå])", $feltnavn))) ) { return true;
} else {
return false; } }
if ( !valider_felt($_POST['feltnavn1'], 20) ) { print "Fejl!"; exit; }
Fordelen ved client-side validering er at det er hurtigere for brugeren - du må dog aldrig satse udelukkende på client-side validering - dvs. alt det validering der er nødvendig skal som minimum udføres server-side.
Jeg har netop lavet et større CMS system, hvor jeg til formular-styringen har benyttet QuickForm fra PEAR og eksempel på det du efterspørger er følgende regler der kræver at form-feltet "title" er udfyldt og det skal valideres både client- og server-side:
$this->addRule('title', 'Titel skal udfyldes', 'required', '','client'); $this->addRule('title', 'Titel skal udfyldes', 'required');
Metoden har mange andre parametre end 'required' og du kan også lave dine egne - derudover genereres der automatisk crossbrowser kompatibelt javascript til client-side valideringen.
QuickForm kan varmt anbefales og er nok blandt de mest benyttede klasser på PEAR.
tipsen: Det var QuickForm jeg tænkte på, kunne bare ikke huske navnet :-) Har du et link til en manual for QF ? Jeg bruger B-one, er det normalt at webhoteller understøtter PEAR ?
Synes godt om
Slettet bruger
23. august 2003 - 02:16#9
tipsen: Må vi ikke snart se det famøse CMS? Det lyder som om det bliver rigtigt godt, og at du har gjort dig umage :)
function ($feltnavn, $maxlaengde = 255, $regular_expression) {
if (!$feltnavn) { echo "$_POST[$feltnavn] er ikke udfyldt!"; return false; } else if (strlen($feltnavn) > $maxlaengde) { echo "$_POST[$feltnavn] må ikke indeholde mere end $maxlaengde karakterer!"; return false; } else if (!ereg($regular_expression, $feltnavn)) { echo "$_POST[$feltnavn] er ikke gyldig!"; return false; }
return true; }
MEN jeg skal lige bruge en default til min $regular_expression, hvordan jeg laver man en regular_expression der godkender alt ?
Synes godt om
Slettet bruger
23. august 2003 - 03:09#11
Du kan jo bare gøre noget ala:
function ($feltnavn, $maxlaengde = 255, $regular_expression = FALSE) {
Og:
} else if ($regular_expression !== FALSE && !ereg($regular_expression, $feltnavn)) { echo "$_POST[$feltnavn] er ikke gyldig!"; return false; }
googol: PEAR behøver ikke understøttes af serveren - du kan selv lægge de pear-filer op på serveren som du har brug for - det plejer jeg at gøre. Du kan finde en ok tutorial på: http://www.linuxbackup.co.uk/quickform
mercur8: Det er ikke engang tæt på at være "rigtigt" færdigt - det tager vist mange måneder endnu med de ideer jeg har, pt. prøver jeg at modularisere det, så man kan til- og frakoble komponenter.
Synes godt om
Slettet bruger
23. august 2003 - 16:13#14
tipsen: Ok troede bare, fordi du skrev "Jeg har netop lavet et større CMS system". Men god arbejdslyst så :)
mercur8: Det er også taget i brug, men jeg har mange ting jeg selv vil have rettet til og lavet tilføjelser osv. - så der er meget arbejde endnu inden jeg vil tillade mig at kalde det for en v. 1.0
tipsen: Okay, det ser godt nok smart ud, det bruger jeg :) Smid et svar, så får I begge point.
Lige et sidste spørgsmål:
1. Hvilke filer er det jeg skal ligge op på min server ? Jeg har downloadet HTML_QuickForm, men der jo en hel bunke mapper og filer og så vidt jeg kan se inkludere QuickForm andre packages, skal jeg så også lægge dem op ?! Jeg er temmelig forvirret :-| Du skulle vel ikke kende til en PEAR tutorial for nybegyndere :-)
På http://pear.php.net/package/HTML_QuickForm kan du se en kort beskrivelse, forskelligt andet information samt hvilke afhængigheder der er for de forskellige versioner af QuickForm - i dette tilfælde, skal du bruge HTML_Common >=1.2.1 med QuickForm 3.1
Lav et bibliotek på serveren (pear) hvor alle dine pear filer placeres og sørg for at biblioteket er med i din include-path - hvis du ikke kan rette i php.ini, kan du sætte include_path med ini_set direkte i dit script!
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.