Fehler bei der Überprüfung der eMail

Hi,

Das Ergebnis war identisch. Kann es denn sein, dass die Funktion gar nicht ausgeführt wird und deswegen immer "false" gilt? Woran kann das liegen?

Eine Funktion ohne explizites return true/>0 sollte immer eine leere Rückgabe haben. Das kannst du in einem Test-Programm einfach nach vollziehen:

PHP:
<?php
function foo()
{
}

$r = foo();
var_dump( $r );

if(!$r)
{
    echo "foo() returned false";
}
else
{
    echo "foo() returned true";
}
?>

Ein leeres Ergebnis (NULL), ein Ergebnis = 0, "" oder false liefert immer false.

Das bedeutet natürlich, das ein Ergebnis ungleich der oben genannten Resultate immer true sind. Das trifft auf true, auf "true", auf "false" auf >= 1 auch zu:

PHP:
<?php
function foo()
{
    return "false";
}

$r = foo();
var_dump( $r );

if(!$r)
{
    echo "foo() returned false";
}
else
{
    echo "foo() returned true";
}
?>

Folglich kann über deine Prüfung damit gesagt werden, das sie sinnlos ist, es wird _immer_ ein Wert zurück geliefert, auf den false (boolean) _nicht_ zutreffend ist.

Versuchen wir doch lieber deine ursprüngliche Funktion zum arbeiten zu bewegen:

PHP:
$r = checkEmail("hans@wurst.de");
echo "<br/>";
echo "content of \$r is ";
var_dump($r);

Dieser Code liefert bei mir:

Code:
Syntax check failed 
content of $r is bool(false)

Das bedeutet für mich zunächst einmal, dass der Reguläre Ausdruck anscheinend nicht stimmt.

Ich habe also zunächst einmal die Regex so festgelegt:

Code:
if(preg_match('/^\+?[a-z0-9](([-+.]|[_]+)?[a-z0-9]+)*@([a-z0-9]+(\.|\-))+[a-z]{2,6}$/' , $eMail))

Das Resultat ist folgendes:

Code:
Syntax is ok; 
Deprecated:  Function split() is deprecated in D:\web\htdocs\tests\emailcheck.php  on line 15
Domain of email address is wurst.de; checkdnsrr() failed!
content of  $r is bool(false)

Wenn man mal von dem Warning absieht, ist das Resultat jedenfalls schon mal etwas aussagekräftiger.

Grundsätzlich empfehle ich an dieser Stelle auch die Verwendung von Error-Reporting:

PHP:
error_reporting( E_ALL | E_STRICT );
ini_set('display_errors', 1);

Diese zwei Zeilen an den Anfang deines PHP-Scriptes und dann sehen wir weiter...
 
@saftmeister

Hab vielen Dank für Deine Hilfe. Durch Dich bin ja selbst dahintergekommen, dass die Funktion immer False ausgibt. Mit den Änderungen, die ich darauf gemacht habe (wie oben beschrieben), funktioniert die Prüfung jetzt.Es wird also der Wert "true" nur dann ausgegeben, wenn die Syntax der einer üblichen Mailadresse entspricht. :)
 
Zurück