Emailadres controleren
Wie kan mij helpen ik heb dit script hieronder alleen er moet een email checker in weet iemand voor dit script de code? en de error velden moeten juist achter het veld staan wat niet is ingevuld nu zet hij het steeds boven neer.
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
if(function_exists('date_default_timezone_set')) { date_default_timezone_set('Europe/Amsterdam'); }
define('LF', "\n");
// Get a value from the $_POST array (case insensitive!!)
function getPost($key, $trim = false, $lowercase = false, $int = false)
{
if(isset($_POST[$key]))
{
$v = stripslashes($_POST[$key]);
if($trim)
{
$v = trim($v);
}
if($int)
{
$v = intval($v);
}
elseif($lowercase)
{
$v = strtolower($v);
}
return $v;
}
return '';
}
// Default values
$field_1 = '';
$field_2 = '';
$field_3 = '';
$sHtml = '';
$sFormError = '';
// Process form
if(empty($_POST['form']) == false)
{
$field_1 = getPost('field_1', true);
if(strlen($field_1) == 0) { $sFormError = 'Vul a.u.b. uw Naam in.'; }
$field_2 = getPost('field_2', true);
if(strlen($field_2) == 0) { $sFormError = 'Vul a.u.b. uw Emailadres in.'; }
$field_3 = getPost('field_3', true);
}
// Show form
if(empty($_POST['form']) || $sFormError)
{
$sHtml .= '<form action="" method="post">
<input name="form" type="hidden" value="form1">
' . $sFormError . '
<table border="0" cellpadding="3" cellspacing="0"><tr>
<td align="left" class="label" valign="top">* Naam</td>
<td align="left" class="input" valign="top"><input name="field_1" type="text" value="' . htmlentities($field_1) . '"></td>
</tr>
<tr>
<td align="left" class="label" valign="top">* Emailadres</td>
<td align="left" class="input" valign="top"><input name="field_2" type="text" value="' . htmlentities($field_2) . '"></td>
</tr>
<tr>
<td align="left" class="label" valign="top">Opmerking</td>
<td align="left" class="input" valign="top"><textarea name="field_3">' . htmlentities($field_3) . '</textarea></td>
</tr>
<tr>
<td align="left" class="text" valign="top"> </td>
<td align="left" class="input" valign="top"><input type="submit" value="Verzenden"> <input type="reset" value="Wissen"></td>
</table>
</form>';
}
else // Send form
{
$mail_to = '[email protected]';
$mail_from = '[email protected]';
$mail_subject = 'Test formulier sterrengokkers.nl';
$mail_message = 'Sterrengokkers invulformulier: ' . LF . LF
. 'Naam: ' . $field_1 . LF
. 'Email: ' . $field_2 . LF
. 'Opmerking: ' . $field_3 . LF
. LF
. 'IP: ' . $_SERVER['REMOTE_ADDR'] . ', Datum: ' . date('d-m-Y') . ', Tijd: ' . date('H:i:s');
mail($mail_to, $mail_subject, $mail_message, 'From: ' . $mail_from);
$sHtml .= '<h1>Uw aanvraag is succesvol verzonden!</h1><p>Hartelijk dank voor uw aanvraag, wij nemen zo spoedig mogelijk contact met u op.</p>Met vriendelijke groet,<br>Sterrengokkers.nl';
}
echo $sHtml;
?>
if(function_exists('date_default_timezone_set')) { date_default_timezone_set('Europe/Amsterdam'); }
define('LF', "\n");
// Get a value from the $_POST array (case insensitive!!)
function getPost($key, $trim = false, $lowercase = false, $int = false)
{
if(isset($_POST[$key]))
{
$v = stripslashes($_POST[$key]);
if($trim)
{
$v = trim($v);
}
if($int)
{
$v = intval($v);
}
elseif($lowercase)
{
$v = strtolower($v);
}
return $v;
}
return '';
}
// Default values
$field_1 = '';
$field_2 = '';
$field_3 = '';
$sHtml = '';
$sFormError = '';
// Process form
if(empty($_POST['form']) == false)
{
$field_1 = getPost('field_1', true);
if(strlen($field_1) == 0) { $sFormError = 'Vul a.u.b. uw Naam in.'; }
$field_2 = getPost('field_2', true);
if(strlen($field_2) == 0) { $sFormError = 'Vul a.u.b. uw Emailadres in.'; }
$field_3 = getPost('field_3', true);
}
// Show form
if(empty($_POST['form']) || $sFormError)
{
$sHtml .= '<form action="" method="post">
<input name="form" type="hidden" value="form1">
' . $sFormError . '
<table border="0" cellpadding="3" cellspacing="0"><tr>
<td align="left" class="label" valign="top">* Naam</td>
<td align="left" class="input" valign="top"><input name="field_1" type="text" value="' . htmlentities($field_1) . '"></td>
</tr>
<tr>
<td align="left" class="label" valign="top">* Emailadres</td>
<td align="left" class="input" valign="top"><input name="field_2" type="text" value="' . htmlentities($field_2) . '"></td>
</tr>
<tr>
<td align="left" class="label" valign="top">Opmerking</td>
<td align="left" class="input" valign="top"><textarea name="field_3">' . htmlentities($field_3) . '</textarea></td>
</tr>
<tr>
<td align="left" class="text" valign="top"> </td>
<td align="left" class="input" valign="top"><input type="submit" value="Verzenden"> <input type="reset" value="Wissen"></td>
</table>
</form>';
}
else // Send form
{
$mail_to = '[email protected]';
$mail_from = '[email protected]';
$mail_subject = 'Test formulier sterrengokkers.nl';
$mail_message = 'Sterrengokkers invulformulier: ' . LF . LF
. 'Naam: ' . $field_1 . LF
. 'Email: ' . $field_2 . LF
. 'Opmerking: ' . $field_3 . LF
. LF
. 'IP: ' . $_SERVER['REMOTE_ADDR'] . ', Datum: ' . date('d-m-Y') . ', Tijd: ' . date('H:i:s');
mail($mail_to, $mail_subject, $mail_message, 'From: ' . $mail_from);
$sHtml .= '<h1>Uw aanvraag is succesvol verzonden!</h1><p>Hartelijk dank voor uw aanvraag, wij nemen zo spoedig mogelijk contact met u op.</p>Met vriendelijke groet,<br>Sterrengokkers.nl';
}
echo $sHtml;
?>
alvast bedankt
Gewijzigd op 31/08/2012 15:33:33 door Remco de Geus
Is het dan ook niet veel handiger om zelf een script te maken? Dan kom je die problemen niet tegen.
Ozzie PHP op 31/08/2012 15:46:40:
Is het dan ook niet veel handiger om zelf een script te maken? Dan kom je die problemen niet tegen.
zo goed ben ik niet in php
Dan moet je er misschien ook niet aan beginnen, of eerst gaan leren, of het iemand anders laten doen.
Daarnaast zou je nog checkdnsrr of getmxrr kunnen gebruiken.
En daarnaast, checken of de email goed is is een van de zinlooste zaken ter wereld. Stel je eens voor:
Is een goed emailadres toch? Alleen jammer dat het emailadres niet bestaat... Je kan genoeg valid emailadressen opnoemen die toch niet gaan werken...
Tevens kun je met HTML5 een check uitvoeren:
En als je het echt wilt doen, doe het dan meteen goed: http://www.phphulp.nl/php/forum/topic/email-regex/77554/ ;-)
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
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
function check_mail($email = NULL) {
$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex) {
$isValid = false;
} else {
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
if ($localLen < 1 || $localLen > 64) {
// local part length exceeded
$isValid = false;
} elseif ($domainLen < 1 || $domainLen > 255) {
// domain part length exceeded
$isValid = false;
} elseif ($local[0] == '.' || $local[$localLen-1] == '.') {
// local part starts or ends with '.'
$isValid = false;
} elseif (preg_match('/\\.\\./', $local)) {
// local part has two consecutive dots
$isValid = false;
} elseif (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) {
// character not valid in domain part
$isValid = false;
} elseif (preg_match('/\\.\\./', $domain)) {
// domain part has two consecutive dots
$isValid = false;
} elseif (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local))) {
// character not valid in local part unless
// local part is quoted
if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local))) {
$isValid = false;
}
}
if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A"))) {
// domain not found in DNS
$isValid = false;
}
}
return $isValid;
}
$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex) {
$isValid = false;
} else {
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
if ($localLen < 1 || $localLen > 64) {
// local part length exceeded
$isValid = false;
} elseif ($domainLen < 1 || $domainLen > 255) {
// domain part length exceeded
$isValid = false;
} elseif ($local[0] == '.' || $local[$localLen-1] == '.') {
// local part starts or ends with '.'
$isValid = false;
} elseif (preg_match('/\\.\\./', $local)) {
// local part has two consecutive dots
$isValid = false;
} elseif (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) {
// character not valid in domain part
$isValid = false;
} elseif (preg_match('/\\.\\./', $domain)) {
// domain part has two consecutive dots
$isValid = false;
} elseif (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local))) {
// character not valid in local part unless
// local part is quoted
if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local))) {
$isValid = false;
}
}
if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A"))) {
// domain not found in DNS
$isValid = false;
}
}
return $isValid;
}
Zelf registreer ik me bijvoorbeeld niet gemakkelijk. Waarom zou ik in godsnaam mijn e-mail willen opgeven, de kans op spam hebben om misschien 1 keer dat forum te bezoeken? Dan vul ik toch gewoon een 10minutemail account in, ik activeer het en ben er weer van verlost :-)
Om gebruikers te mailen? Doe je toch niet, want je wilt niets spammen.
En wie wilt er nu een nieuwsbrief via de mail (en niet via Twitter / RSS oid?)?
Wat doe je nou echt met dat emailadres? Mailen bij problemen? Krijg je dan geen antwoord (dwz: bounche-back) is gewoon account deleten/blocken.
Zelfde als al die wachtwoord-controles van minimaal 8 tekens en minimaal 1 ander teken.
Als ik '123456' als wachtwoord wil om mijn gegevens te beveiligen, is dat toch prima?
We verwachten allerlei persoonlijke data (sommige webshops vragen zelfs mijn geboortedatum.... of ik nou 18 ben of 80: boeiend?).
Vraag echt alleen wat je nodig hebt.
Ipv een gebruikersnaam kan je wel een emaildres gebruiken. Leuk om te verificeren, maar dat kan dus ook met zo'n tijdelijk account.
wachtwoord vergeten stuur je via mail een linkje ( niet iedereen heeft een sms dienst daarvoor )
sommige houden gebruikers graag op de hoogte via mail ( facebook, phphulp,... )
Quote:
En wie wilt er nu een nieuwsbrief via de mail (en niet via Twitter / RSS oid?)?
Ik zou toch echt graag de nieuwsbrief via de mail krijgen. Zowel nettuts+, als Smashing Magazine als .NET magazine doen dit en dat vind ik toch verdraaid fijn...
Laten we niet vergeten dat er ook nog mensen een website bezoeken met de juiste bedoelingen, en die kunnen ook gewoon een typo maken! Dus gewoon controleren dat emailadres.
Ger van Steenderen op 01/09/2012 11:04:19:
Laten we niet vergeten dat er ook nog mensen een website bezoeken met de juiste bedoelingen, en die kunnen ook gewoon een typo maken! Dus gewoon controleren dat emailadres.
Dat vind ik dit topic nu is de enige goede reden. Mijn standpunt is, als een gebruiker echt interesse heeft, dan zal hij wel zijn echt e-mailadres opgeven. Anders geeft hij iets nutteloos op.
Uiteraard is er niets mis mee met een wachtwoord-vergeten-e-mail, een nieuwsbrief, account activatie, ... Alleen wil je dit niet altijd. Daarom vind ik het zinloos extreme controle op een e-mailadres te gaan doen.
[email protected] i.p.v. contact@phphulp.nl doe zullen die controles echt niet gaan klagen.
Daarom zou ik een email veld en daarna een herhaling email veld maken, je voorkomt dan deze typo's en heb je al deze checks niet meer nodig.
Ger, met regexen of de PHP filters controleer je ook niet de typo's. Als ik Daarom zou ik een email veld en daarna een herhaling email veld maken, je voorkomt dan deze typo's en heb je al deze checks niet meer nodig.
Wouter J op 01/09/2012 11:22:12:
Als ik [email protected] i.p.v. contact@phphulp.nl doe zullen die controles echt niet gaan klagen.
Het scriptje van mij zal dit adres afkeuren.
Wouter J op 01/09/2012 11:22:12:
Daarom zou ik een email veld en daarna een herhaling email veld maken, je voorkomt dan deze typo's en heb je al deze checks niet meer nodig.
Eigenlijk best een logisch standpunt.
- SanThe - op 01/09/2012 11:31:59:
Het scriptje van mij zal dit adres afkeuren.
Wouter J op 01/09/2012 11:22:12:
Als ik [email protected] i.p.v. contact@phphulp.nl doe zullen die controles echt niet gaan klagen.
Het scriptje van mij zal dit adres afkeuren.
Ja, en onnodig veel overhead veroorzaken. Want stel nu is dat phhulp.nl bestaat, dan heb je alsnog niets gewonnen. Een simpele controle volstaat, al de rest is onnodige overhead als je het mij vraagt.
Veld herhalen is dan een veel betere oplossing.
Toevoeging op 01/09/2012 11:51:27:
Als kan ik ook daar nog een kanttekening bij maken. Ik ben soms nog wel is lui, en copy paste mijn e-mailadres / laat het auto invullen.
Wouter J op 31/08/2012 16:56:15:
Dat is nogal useless aangezien een hacker ook gewoon een POST request naar die pagina kan sturen zonder die form. Maar wel leuk als bijkomende check.
Wouter J op 01/09/2012 11:22:12:
Daarom zou ik een email veld en daarna een herhaling email veld maken, je voorkomt dan deze typo's.
Wat ik vaak doe is 1x intypen, selecteren, kopiëren en dan plakken in het 2e veld.
Als dan in de 1e een tiepfaut zit, ben ik in ieder geval consequent....
Edit: zie net dat ik niet de enige ben met deze werkwijze.
Gewijzigd op 01/09/2012 11:59:34 door Obelix Idefix
Ik zelf heb de gewoonte om die herhalings velden te copy-pasten, dus dan streeft het middel ook het doel voorbij.
Daarnaast heb je met een controle het voordeel dat je niet meer hoeft te escapen of met een parameter te werken.
Quote:
Het scriptje van mij zal dit adres afkeuren.
En als ik [email protected] i.p.v. [email protected]? Kortom: Je zal nooit alles kunnen controleren. Misschien een hele simpele check doen en dat is genoeg:
Code (php)
Of met een regex:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
function check_email($email)
{
return preg_match('|[^@]+@[^.]+\.\w+|', $email);
}
?>
function check_email($email)
{
return preg_match('|[^@]+@[^.]+\.\w+|', $email);
}
?>