Contact formulier error afhandeling
Ik heb een contact formulier op mijn website en die word gecontroleerd met php (voor mensen die javascript uit hebben maar daar gaat het nu niet om), het probleem is alleen dat als alles fout is hij alleen de 1e fout op het scherm weergeeft. Dit is het stuk script dat de invoer controleerd:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?
$s1=''; $s2=''; $s3=''; $s4=''; $s5=''; $s6='';
if (strlen($_POST["name"]) == 0){
echo 'Naam is verplicht.';
$s1='style="border:#FF0000 solid 2px;"';
}
elseif (strlen($_POST["mail"]) == 0){
echo 'Mail is verplicht, in de vorm [email protected]';
$s2='style="border:#FF0000 solid 2px;"';
}
elseif(preg_match("^[a-z0-9._-]+@[a-z0-9._-]+.[a-z]{2,6}$", ($_POST["mail"]) )){
echo 'Mail is verplicht, in de vorm [email protected]';
$s2='style="border:#FF0000 solid 2px;"';
}
elseif (($_POST["repeatmail"]) != ($_POST["mail"])){
echo 'Mail moet worden herhaald';
$s3='style="border:#FF0000 solid 2px;"';
}
elseif (strlen($_POST["message"]) <= 10){
echo 'Bericht is verplicht en moet langer zijn dan 10 tekens.';
$s6='style="border:#FF0000 solid 2px;"';
}
elseif (strlen($_POST["onderwerp"]) == 0){
echo 'Onderwerp is verplicht.';
$s4='style="border:#FF0000 solid 2px;"';
}
elseif (($_POST["validate"]) != 'woord'){
echo 'Nee, dat woord staat niet lager';
$s5='style="border:#FF0000 solid 2px;"';
}
?>
$s1=''; $s2=''; $s3=''; $s4=''; $s5=''; $s6='';
if (strlen($_POST["name"]) == 0){
echo 'Naam is verplicht.';
$s1='style="border:#FF0000 solid 2px;"';
}
elseif (strlen($_POST["mail"]) == 0){
echo 'Mail is verplicht, in de vorm [email protected]';
$s2='style="border:#FF0000 solid 2px;"';
}
elseif(preg_match("^[a-z0-9._-]+@[a-z0-9._-]+.[a-z]{2,6}$", ($_POST["mail"]) )){
echo 'Mail is verplicht, in de vorm [email protected]';
$s2='style="border:#FF0000 solid 2px;"';
}
elseif (($_POST["repeatmail"]) != ($_POST["mail"])){
echo 'Mail moet worden herhaald';
$s3='style="border:#FF0000 solid 2px;"';
}
elseif (strlen($_POST["message"]) <= 10){
echo 'Bericht is verplicht en moet langer zijn dan 10 tekens.';
$s6='style="border:#FF0000 solid 2px;"';
}
elseif (strlen($_POST["onderwerp"]) == 0){
echo 'Onderwerp is verplicht.';
$s4='style="border:#FF0000 solid 2px;"';
}
elseif (($_POST["validate"]) != 'woord'){
echo 'Nee, dat woord staat niet lager';
$s5='style="border:#FF0000 solid 2px;"';
}
?>
Ik snap dat dat komt door de if dat hij gelijk de bovenste pakt maar is dit ook op te lossen?
Alvast bedankt
Door alles in zijn eigen "If" te plaatsen in plaats van "elseif", want je wilt(neem ik aan) dat die op alles controleert.
Bedankt, heb je ook een idee hoe ik de mail kan valideren? ik doe het nu met preg_match maar volgens mij is dat niet echt een goede manier of wel?
PHP KookboekPHP Kookboek:
en dan kan je het aanroepen met:
Alle credits gaan naar Ward van der Put.
Met dit script uit Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
/**
* E-mailadres valideren
*
* @author Ward van der Put <[email protected]>
* @license http://creativecommons.org/licenses/by/3.0/
* @version 4
*
* @param string $str
* @return boolean
*/
function is_emailadres($str)
{
// Een e-mailadres moet een alfanumerieke string zijn
if (!is_string($str) or is_numeric($str)) {
return FALSE;
}
// Een e-mailadres kan niet korter zijn dan 7 karakters
// en mag niet langer zijn dan 256 karakters
if ((strlen($str) < 7) or (strlen($str) > 256)) {
return FALSE;
}
/**
* E-mailadres valideren met een inputfilter
*
* @link http://www.php.net/manual/en/function.filter-var.php
*/
if (!filter_var($str, FILTER_VALIDATE_EMAIL)) {
return FALSE;
}
/**
* E-mailadres valideren met een reguliere expressie
*
* Deze reguliere expressie accepteert lange TLD's van 6 karakters
* (bijvoorbeeld .museum) en nieuwe geo TLD's van 7 of 8 karakters
* (bijvoorbeeld .ottawa, .hamburg en .saarland).
*
* @link http://wiki.phpfreakz.nl/Invoer_validatie
* @link http://www.php.net/manual/en/function.preg-match.php
*/
if (!preg_match('#^[a-z0-9][a-z0-9_.\-]*@([a-z0-9]+\.)*[a-z0-9][a-z0-9\-]+\.([a-z]{2,8})$#i', $str)) {
return FALSE;
}
// E-mailadres uitsplitsen in een geïndexeerde array
$aEmailadres = explode('@', $str);
// Het e-mailadres moet uit twee onderdelen bestaan:
// een lokale naam en een hostnaam
if (count($aEmailadres) != 2) {
return FALSE;
}
// De lokale naam mag niet langer zijn dan 64 karakters
if (strlen($aEmailadres[0]) > 64) {
return FALSE;
}
/**
* DNS voor SMTP
*
* Als er een MX-record wordt gevonden, dan is de hostnaam in het
* e-mailadres bruikbaar voor mail exchange (MX). Wordt er geen
* MX-record gevonden, dan moet de hostnaam zelf zijn te vinden met
* een DNS-lookup.
*
* @link http://www.faqs.org/rfcs/rfc2821
* @link http://www.php.net/manual/en/function.getmxrr.php
* @link http://www.php.net/manual/en/function.gethostbyname.php
*/
if (getmxrr($aEmailadres[1], &$aMXhosts)) {
return TRUE;
} else {
$sIPadres = gethostbyname($aEmailadres[1]);
if ($sIPadres == $aEmailadres[1]) {
return FALSE;
} else {
return TRUE;
}
}
}
?>
/**
* E-mailadres valideren
*
* @author Ward van der Put <[email protected]>
* @license http://creativecommons.org/licenses/by/3.0/
* @version 4
*
* @param string $str
* @return boolean
*/
function is_emailadres($str)
{
// Een e-mailadres moet een alfanumerieke string zijn
if (!is_string($str) or is_numeric($str)) {
return FALSE;
}
// Een e-mailadres kan niet korter zijn dan 7 karakters
// en mag niet langer zijn dan 256 karakters
if ((strlen($str) < 7) or (strlen($str) > 256)) {
return FALSE;
}
/**
* E-mailadres valideren met een inputfilter
*
* @link http://www.php.net/manual/en/function.filter-var.php
*/
if (!filter_var($str, FILTER_VALIDATE_EMAIL)) {
return FALSE;
}
/**
* E-mailadres valideren met een reguliere expressie
*
* Deze reguliere expressie accepteert lange TLD's van 6 karakters
* (bijvoorbeeld .museum) en nieuwe geo TLD's van 7 of 8 karakters
* (bijvoorbeeld .ottawa, .hamburg en .saarland).
*
* @link http://wiki.phpfreakz.nl/Invoer_validatie
* @link http://www.php.net/manual/en/function.preg-match.php
*/
if (!preg_match('#^[a-z0-9][a-z0-9_.\-]*@([a-z0-9]+\.)*[a-z0-9][a-z0-9\-]+\.([a-z]{2,8})$#i', $str)) {
return FALSE;
}
// E-mailadres uitsplitsen in een geïndexeerde array
$aEmailadres = explode('@', $str);
// Het e-mailadres moet uit twee onderdelen bestaan:
// een lokale naam en een hostnaam
if (count($aEmailadres) != 2) {
return FALSE;
}
// De lokale naam mag niet langer zijn dan 64 karakters
if (strlen($aEmailadres[0]) > 64) {
return FALSE;
}
/**
* DNS voor SMTP
*
* Als er een MX-record wordt gevonden, dan is de hostnaam in het
* e-mailadres bruikbaar voor mail exchange (MX). Wordt er geen
* MX-record gevonden, dan moet de hostnaam zelf zijn te vinden met
* een DNS-lookup.
*
* @link http://www.faqs.org/rfcs/rfc2821
* @link http://www.php.net/manual/en/function.getmxrr.php
* @link http://www.php.net/manual/en/function.gethostbyname.php
*/
if (getmxrr($aEmailadres[1], &$aMXhosts)) {
return TRUE;
} else {
$sIPadres = gethostbyname($aEmailadres[1]);
if ($sIPadres == $aEmailadres[1]) {
return FALSE;
} else {
return TRUE;
}
}
}
?>
en dan kan je het aanroepen met:
Alle credits gaan naar Ward van der Put.
Gewijzigd op 23/02/2012 17:23:33 door Koen Vlaswinkel
Ik heb dat script gebruikt maar als ik nu hoi invul dan word hij ook geacepteerd.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
if(is_emailadres($_POST["mail"]))
{
$r2='<span class="ValidationErrors">Mail is verplicht, in de vorm [email protected]</span>';
$s2='style="border:#FF0000 solid 2px;"';
}
?>
if(is_emailadres($_POST["mail"]))
{
$r2='<span class="ValidationErrors">Mail is verplicht, in de vorm [email protected]</span>';
$s2='style="border:#FF0000 solid 2px;"';
}
?>
Pas ik hem zo goed toe?
Toevoeging op 23/02/2012 17:41:09:
opgelost, moest nog een ! toevoegen