2012-09-28 36 views
1

我想制作一个表格,从垃圾邮件安全,并发送一个简单的电子邮件给注册人。PHP安全电子邮件阻止虚假的电子邮件,但让注册通过

我对PHP相当陌生,im面临的问题是,当表单在电子邮件字段中提交了一个错误的电子邮件地址时,它会显示错误消息,指出电子邮件无效,但仍允许注册通过将其添加到数据库。

这里是代码

function spamcheck($field) { 
    // filter_var() sanitizes the e-mail 
    // address using FILTER_SANITIZE_EMAIL 
    $field = filter_var($field, FILTER_SANITIZE_EMAIL); 

    // filter_var() validates the e-mail 
    // address using FILTER_VALIDATE_EMAIL 
    if(filter_var($field, FILTER_VALIDATE_EMAIL)) { 
     return TRUE; 
    } 
    else { 
     return FALSE; 
    } 
} 

if(isset($_REQUEST['email'])) { 
    // if "email" is filled out, proceed 
    // check if the email address is invalid 
    $mailcheck = spamcheck($_REQUEST['email']); 
    if ($mailcheck==FALSE) { 
     die("<font color='red'>Your email address is invalid, please try again.</font><br/><br/><form><INPUT TYPE='button' VALUE='Back' onClick='history.go(-1);return true;'></form>"); 
    } 
    else {//send email 
     $to = "$email"; 
     $from = "[email protected]"; 
     $message = "Just a message"; 
     $subject = "Subject"; 

     mail($to, $message, $subject, "From: $from", "-f$from"); 
    } 
} 

任何帮助将不胜感激。

+1

将其添加到数据库的代码未显示,但它不会发送邮件 - 在这种情况下,请确保将注册保存到数据库的调用位于您发送邮件的部分。 – BugFinder

+0

嗨,感谢,电子邮件正在通过,代码正好在它下面将它添加到数据库中,我移动它(只是低于值)和相同的问题。 –

+0

它不能显示“你的电子邮件地址是无效的”消息,并发送邮件 - 不遵循发布的代码 - 如果数据库插入的代码与邮件命令不同,那么它会这样做与垃圾邮件状态无关。 – BugFinder

回答

0

也许这里的问题,您的支票功能首先进行消毒电子邮件地址,然后验证已清理的电子邮件。这意味着,检查功能会检查已清理过的电子邮件,但在该功能之外,您仍在使用无效的电子邮件。

所以要么在检查功能之外进行消毒,要么在我看来更好,只验证没有消毒的输入(更好地让用户知道他输入的不正确,而不是尝试修复它)。

function checkEmail($input) 
{ 
    return filter_var($input, FILTER_VALIDATE_EMAIL); 
} 

编辑:

实际上必须有另外一个问题,因为在代码执行die(...Your email address is invalid...)时,页面的处理停止。我们需要看到写入数据库的代码部分。

+0

$ insert = mysql_query(“INSERT INTO users(title,username,password,email,姓名,secondname,年龄, 国籍,town_city,language_to_study,how_to_study,language_level, 周一,周二,周三,周四,周五,周六,周日,电话, )VALUES( '$标题', '$用户名' ,'$ password','$ email','$ firstname','$ secondname','$ age', '$ nationality','$ town_city','$ language_to_study','$ how_to_study','$ language_level ', '$ monday','$ tuesday','$ wednesday','$ thursday','$ friday','$星期六','$ sunday','$ telephone',)“ ); 功能spamcheck($字段) –

+0

希望它可读,对不起 –

+0

@Paul Meadows - 所以你插入新的用户,然后再测试电子邮件地址?该查询只能在**验证邮件成功后执行**。查询应该在同一个地方,你可以调用'mail()'函数。 – martinstoeckli

0

首先,打印Mailcheck看看它的说法。

die('Mail Check:'。$ mailcheck);

如果其分毫将其设置为===

如果($ MAILCHECK ===假){

}

+0

感谢您的回复,对不起,我是一个完整的新手,我应该把这个代码的前面if($ mailcheck == FALSE){ die( –