Avatar billede googolplex Novice
23. august 2003 - 00:44 Der 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. ?
Avatar billede marduk666 Nybegynder
23. august 2003 - 01:00 #1
Sådan en?

<?php
$felter = array(
array("felt1", 20),
array("felt2", 10),
array("felt3", 3),
array("felt4", 20),
array("felt5", 20),
array("felt6", 20),
array("felt7", 20)
);


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>

<form action="" method="post" onsubmit="return checkForm();">
<input type="text" name="felt1">
...
<input type="submit">
</form>
Avatar billede ztyxx Nybegynder
23. august 2003 - 01:00 #2
du skal have fat i en javascriptkode til det, der kan teste inden formen bliver afsendt
Avatar billede googolplex Novice
23. august 2003 - 01:07 #3
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

ztyxx: Tror bare jeg checker serverside først :)
Avatar billede googolplex Novice
23. august 2003 - 01:09 #4
Måske der findes noget i PEAR, men det kender jeg ikke meget til (og ved ikke om det er standard på webhoteller).
Avatar billede ztyxx Nybegynder
23. august 2003 - 01:26 #5
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
Avatar billede marduk666 Nybegynder
23. august 2003 - 01:26 #6
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;
}


Eller noget :o)
Avatar billede tipsen Nybegynder
23. august 2003 - 01:50 #7
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.
Avatar billede googolplex Novice
23. august 2003 - 02:04 #8
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 ?
Avatar billede 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 :)
Avatar billede googolplex Novice
23. august 2003 - 02:50 #10
marduk666:

Jeg har bygget lidt på din (PEAR må jeg tage en anden gang...):

/* Bool valider_felt(string feltnavn [, integer maxlaengde [, string regular_expression]]) */

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 ?
Avatar billede 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;
}
Avatar billede googolplex Novice
23. august 2003 - 03:11 #12
Nå ja :)
Avatar billede tipsen Nybegynder
23. august 2003 - 11:36 #13
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.
Avatar billede 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å :)
Avatar billede tipsen Nybegynder
23. august 2003 - 16:59 #15
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
Avatar billede googolplex Novice
23. august 2003 - 21:29 #16
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 :-)
Avatar billede tipsen Nybegynder
23. august 2003 - 22:09 #17
Kast et blik på www.PHPkitchen.com og http://pear.php.net/ for dokumentation samt tutorials.

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!
Avatar billede tipsen Nybegynder
23. august 2003 - 22:10 #18
desuden kan jeg anbefale pear-nyhedsgruppen - der har jeg selv fået rigtigt meget hjælp.
Avatar billede googolplex Novice
23. august 2003 - 22:30 #19
Takker :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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