Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

email_validering

11 views
Skip to first unread message

Hans Lommeuld

unread,
Apr 15, 2012, 7:40:31 AM4/15/12
to
Hvad mangler jeg for at få valideringen til at virke?
Skal jeg anvende noget header(Location) i tilfælde af invalid email!?
I så fald hvor?

Hilsen

Claus
Alias: "Hans Lommeuld"

$email=$_POST['email'];

if (isset($email)){
function validEmail($email)
{
$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;
}
else if ($domainLen < 1 || $domainLen > 255)
{
// domain part length exceeded
$isValid = false;
}
else if ($local[0] == '.' || $local[$localLen-1] == '.')
{
// local part starts or ends with '.'
$isValid = false;
}
else if (preg_match('/\\.\\./', $local))
{
// local part has two consecutive dots
$isValid = false;
}
else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))
{
// character not valid in domain part
$isValid = false;
}
else if (preg_match('/\\.\\./', $domain))
{
// domain part has two consecutive dots
$isValid = false;
}
else if
(!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;
}
}

Birger Sørensen

unread,
Apr 15, 2012, 1:17:59 PM4/15/12
to
Hans Lommeuld udtrykte præcist:
function ValidEmail($email) {
$isValid = true;
if (($atIndex = strrpos($email, "@")) === false) {
$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
($domainLen < 1 || $domainLen > 255) || // domain part length
exceeded
($local[0] == '.' || $local[$localLen-1] == '.') || // local part
starts or ends with '.'
(preg_match('/\\.\\./', $local)) || // local part has two
consecutive dots
(!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) || // character
not valid in domain part
(preg_match('/\\.\\./', $domain)) || // domain part has two
consecutive dots
( (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
str_replace("\\\\","",$local))) && // character not valid in local part
(!preg_match('/^"(\\\\"|[^"])+"$/',
str_replace("\\\\","",$local))) ) || // unless local part is quoted
(!(checkdnsrr($domain, "MX") || checkdnsrr($domain, "A"))) //
domain not found in DNS
) {
$isValid = false;
}
}
return $isValid;
}

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://skippersevent.dk


Hans Lommeuld

unread,
Apr 16, 2012, 1:58:55 AM4/16/12
to
Mit problem er, at når jeg kalder variablen $email i functionen bliver
den ikke genkendt i isset statement og heller ikke oppe ved $_POST.

Birger Sørensen

unread,
Apr 16, 2012, 3:41:25 AM4/16/12
to
Hans Lommeuld forklarede:
8X
> Mit problem er, at når jeg kalder variablen $email i functionen bliver
> den ikke genkendt i isset statement og heller ikke oppe ved $_POST.

if (isset($email)) {
if (validEmail($email)) {
// send email eller fortsæt behandling af data
}
else {
echo 'Email adresse er ikke gyldig';
}
}
else {
echo 'Der er ikke angivet en email adresse';
}

function validEmail($email) { ... }


Hvis email ikke kendes af $_POST, er der noget forkert med din form
eller indlæsning af variable...

Hvis formen har et input, f.eks.
<input name="email" value="min@email">
skal du hente den i PHP med
$email = $_POST['email'];

scootergrisen

unread,
Apr 16, 2012, 3:24:07 PM4/16/12
to
> Hvis formen har et input, f.eks.
> <input name="email" value="min@email">
> skal du hente den i PHP med
> $email = $_POST['email'];

Og det giver sikkert en fejl første gang man besøger siden eller hvis
man sende formularen med et tomt email felt.

Så du skal teste om den er sat før du tildelen den til noget.


If(isset($_POST['email'])){

$email = $_POST['email'];

}


Hvis du vil med på HTML5 så kan du bruge <input type="email">.
Så validere de nyere browsere som forstår det automatisk uden du behøver
skrive javascript kode.

Se her : http://scootergrisen.dk/htmlgrisen/kode_form_validering.php

Birger Sørensen

unread,
Apr 16, 2012, 6:35:02 PM4/16/12
to
Efter mange tanker skrev scootergrisen:
> Og det giver sikkert en fejl første gang man besøger siden eller hvis man
> sende formularen med et tomt email felt.

Hvorofor skulle det give fejl første gang?
Hvor feltet efterlades tomt, er $POST[] også bare en tom streng. Det
giver ikke fejl.

Hans Lommeuld

unread,
Apr 18, 2012, 4:10:51 AM4/18/12
to
On 17 Apr., 00:35, Birger Sørensen <s...@bbsorensen.com> wrote:
> Efter mange tanker skrev scootergrisen:
>
> > Og det giver sikkert en fejl første gang man besøger siden eller hvis man
> > sende formularen med et tomt email felt.
>
> Hvorofor skulle det give fejl første gang?
> Hvor feltet efterlades tomt, er $POST[] også bare en tom streng. Det
> giver ikke fejl.
>
> Birger
>
> --http://varmeretter.dk- billig, sund og hurtig madhttp://skippersevent.dk

Til alle på denne streng.

Tak for hjælpen

Nu virker det fint.

(Både i PHP og html5)

hilsen

Claus
Alias:"Hans Lommeuld"

Leif Neland

unread,
Apr 18, 2012, 5:38:33 AM4/18/12
to

"Hans Lommeuld" <hanslo...@gmail.com> skrev i en meddelelse
news:46792c09-079d-4029...@2g2000yqp.googlegroups.com...
> Hvad mangler jeg for at få valideringen til at virke?

Blot et apropos:
Med de nye "vanity" top level domains, kan en adresse som
bill.gates@microsoft gå hen og være lovlig, så man kan ikke engang teste på
at der skal være et punktum i domænet.
Eller at et tld skal være på maks 4 tegn (.museum er vist ikke blevet ret
populært...)

Der er ikke andet end at teste om domænet har en MX-record.
(Eller en A, men man burde næsten indføre at der ikke kan sendes til en A,
hvis det er et domænenavn, kun en host.
Altså m...@host.mit.dom, men ikke m...@host.dom uden MX.)


Leif





0 new messages