这是我的代码,它使用扩展的phpMailer。如果我检查firstResult和lastResult,这是有效的,但如果我检查emailResult则不行:
$validator = new FormValidator();
$firstResult = $validator->checkFirst($_POST['firstname']);
$lastResult = $validator->checkLast($_POST['lastname']);
$emailResult = $validator->checkEmail($_POST['emailaddress1']);
var_dump($emailResult);
if (is_null($firstResult) && is_null($lastResult) && is_null($emailResult)) {
$mail = new ULSMail();
$mail->IsSMTP(); // telling the class to use SMTP
$mail->AddAddress("shummel@ulsinc.com");
$mail->Subject = "test";
$mail->MsgHTML($messageHTML);
redirectULS('english/forms/thankyou.php');
if(!$mail->Send()) {
echo 'Message was not sent.';
echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
//$bridge->pushLead($lead);
}
} else {
//...
}
并在我的FormValidator类中:
function checkEmail($email){
if(strlen(trim($email)) < 8){
return 'Please enter a valid email address of more than 8 characters</span>';
} else {
return NULL;
}
}
redirectULS是一个简单的重定向功能,用于我网站上的内部重定向。只要我不检查$ emailResult就行了。
答案 0 :(得分:3)
if (checkEmail("123456789") === NULL)
print "Actually, it does!\n";
您正在做的是直接打印结果,这会将NULL
转换为空字符串。因此它似乎只返回任何东西。
请注意,我使用了triple equals operator,它测试值和类型的相等性。正如@Tomcat建议的那样,您也可以使用is_null()
答案 1 :(得分:1)
实际上,当字符串低于8时,它会返回NULL
。
试试var_dump
代替echo
/ print
,它应该显示字符串的“真实”值(= NULL
)。
答案 2 :(得分:0)
你如何测试回报?
echo is_null(checkEmail('foo@bar.com')) ? 'Pass' : 'Fail';
也只是一张纸条;如j@cc.tv
这样的电子邮件,您的8个字符的验证参数将失败。虽然很少见,但建议您使用正则表达式根据表单进行验证。网上有很多examples。
class Validator{
public function checkEmail($email){
return preg_match('/^[^@]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$/', $email);
}
public function checkName($name){
return preg_match('/[a-z]{2,}/i', $name); //valid if $name is 2+ A-Z characters
}
}
$v = new Validator;
if($v->checkEmail($_POST['email'])
&& $v->checkName($_POST['fname'])
&& $v->checkName($_POST['lname'])){
//the info is valid
}else{
//the info is not valid
}