Enkel cijfers / letters
Ik zit met een probleempje.
Als een veld leeg is geeft hij een fout (dit werkt correct)
Alleen voor sommige velden zijn enkel cijfers of alleen letters mogelijk.
Hieronder mijn code. Wat doe ik fout?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?
if(empty($_POST['naam']) ){echo "U heeft geen naam ingevult.";}
else if(ereg('^[a-zA-Z]$', $_POST['naam'])){echo "Enkel letters mogelijk bij u naam.";}
else if(empty($_POST['aantalurenn']) ){echo "Heeft u niet gewerkt?";}
else if(ereg('^[0-9]$', $_POST['aantaluren'])){echo "Enkel cijfers mogelijk bij het aantal uren.";}
...
?>
if(empty($_POST['naam']) ){echo "U heeft geen naam ingevult.";}
else if(ereg('^[a-zA-Z]$', $_POST['naam'])){echo "Enkel letters mogelijk bij u naam.";}
else if(empty($_POST['aantalurenn']) ){echo "Heeft u niet gewerkt?";}
else if(ereg('^[0-9]$', $_POST['aantaluren'])){echo "Enkel cijfers mogelijk bij het aantal uren.";}
...
?>
Dat hoort echt niet;)
Theodoor van Donge op 07/10/2010 20:29:25:
Ga eerst eens die spatie tussen die elseif halen.
Dat hoort echt niet;)
Dat hoort echt niet;)
Ahum. Dat is dus niet het probleem. En dat maakt dus totaal niks uit. Zie php.net: elseif en else if. Eerst effe checken voordat je wat zegt.
Gebruik geen ereg, maar preg_*
En ik heb geen idee wat je probleem is.
Zou het wel anders aanpakken... Maar goed.
Zelf heb ik geen grote kennis van PHP, maar probeer het wel te leren.
Als je commentaar geeft over een spatie tussen "else if", snap je echt niet hoe de PHP syntax in elkaar steekt. Hoe al die gedachtes daarachter zijn, en waarom dat dat gewoon werkt...
Niek s op 07/10/2010 20:53:25:
Als je commentaar geeft over een spatie tussen "else if", snap je echt niet hoe de PHP syntax in elkaar steekt. Hoe al die gedachtes daarachter zijn, en waarom dat dat gewoon werkt...
Ik snap dat inderdaad niet, en ik ben wel benieuwd waarom dat werkt. (Was het namelijk nog nooit tegen gekomen, dat natuurlijk niet uitsluit dat het wel kan.)
Nu weet ik ook waar mijn fout zit.
Mijn achternaam is in 2 woorden dus natuurlijk geeft hij altijd een fout.
Hoe kan ik dat veranderen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?
if(empty($_POST['naam']) ){echo "U heeft geen naam ingevult.";}
else if (preg_match("~[^a-z]~", $_POST['naam'])){echo "Enkel letters mogelijk bij u naam.";}
else if(empty($_POST['aantalurenn']) ){echo "Heeft u niet gewerkt?";}
else if (preg_match("~[^0-9]~", $_POST['aantalduiken'])){echo "Enkel cijfers mogelijk bij u aantal duiken.";}
...
?>
if(empty($_POST['naam']) ){echo "U heeft geen naam ingevult.";}
else if (preg_match("~[^a-z]~", $_POST['naam'])){echo "Enkel letters mogelijk bij u naam.";}
else if(empty($_POST['aantalurenn']) ){echo "Heeft u niet gewerkt?";}
else if (preg_match("~[^0-9]~", $_POST['aantalduiken'])){echo "Enkel cijfers mogelijk bij u aantal duiken.";}
...
?>
Zo gaat het natuurlijk nooit goed
Zo doe je dat met de achternaam:
~[^A-z\s]~
Let wel op dat namen uit andere tekens kunnen bestaan. Hergé, bijvoorbeeld
Want je hebt ook bijvoorbeeld Hervé of Jean-Paul of garçon... of dit: ??
Zie zelfs phphulp kan het niet aan.
Oftewel, leestekens blacklisten is makkelijker. Dan gewoon prepared statements/escapen en htmlentities erover en dan gaat het goed.
Wouter de Jong op 07/10/2010 21:57:01:
Volgens mij moet preg_match beginnen met ^ en eindigen met $. Dus:
Nee, niet per se. Hier is dat wel oké, want dan heb je dat de string echt alleen uit die tekens mag bestaan. Anders kan je filteren o.i.d. en het hoeft niet in alle gevallen zo te zijn.
Maar de regex die jij voorstelt getuigt niet van enig inzicht in reguliere expressies.
Genoeg gePHPt vandaag =)
Slaapwel