saftmeister
Nutze den Saft!
Hi,
Eine Funktion ohne explizites return true/>0 sollte immer eine leere Rückgabe haben. Das kannst du in einem Test-Programm einfach nach vollziehen:
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:
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:
Dieser Code liefert bei mir:
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:
Das Resultat ist folgendes:
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:
Diese zwei Zeilen an den Anfang deines PHP-Scriptes und dann sehen wir weiter...
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...