PHP安全电子邮件正在阻止虚假电子邮件,但允许注册通过
我试图使一个表格,是安全的垃圾邮件,并发送一个简单的电子邮件给人谁注册 我对PHP很陌生,我面临的问题是,当表单在电子邮件字段中使用错误的电子邮件地址提交时,它会显示错误消息,说明电子邮件无效,但仍然允许注册通过将其添加到数据库 这是密码PHP安全电子邮件正在阻止虚假电子邮件,但允许注册通过,php,forms,security,email,spam,Php,Forms,Security,Email,Spam,我试图使一个表格,是安全的垃圾邮件,并发送一个简单的电子邮件给人谁注册 我对PHP很陌生,我面临的问题是,当表单在电子邮件字段中使用错误的电子邮件地址提交时,它会显示错误消息,说明电子邮件无效,但仍然允许注册通过将其添加到数据库 这是密码 function spamcheck($field) { // filter_var() sanitizes the e-mail // address using FILTER_SANITIZE_EMAIL $field = filt
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 = "name@mywebsite.com";
$message = "Just a message";
$subject = "Subject";
mail($to, $message, $subject, "From: $from", "-f$from");
}
}
函数spamcheck($field){
//filter_var()清理电子邮件
//使用筛选器的地址\u清理\u电子邮件
$field=filter\u var($field,filter\u SANITIZE\u EMAIL);
//filter_var()验证电子邮件
//使用筛选器\验证\电子邮件的地址
if(筛选变量($field,筛选验证\电子邮件)){
返回TRUE;
}
否则{
返回FALSE;
}
}
如果(isset($_请求['email'])){
//如果填写了“电子邮件”,请继续
//检查电子邮件地址是否无效
$mailcheck=spamcheck($_请求['email']);
如果($mailcheck==FALSE){
死亡(“您的电子邮件地址无效,请重试。
”);
}
否则{//发送电子邮件
$to=“$email”;
$from=”name@mywebsite.com";
$message=“只是一条消息”;
$subject=“subject”;
邮件($to,$message,$subject,“From:$From”,“-f$From”);
}
}
任何帮助都将不胜感激。首先,打印邮件检查,看看它说什么 die(“邮件支票:”.$mailcheck) 如果没有,则将其设置为=== 如果($mailcheck==false){
}这里的问题可能是,您的检查功能首先清除电子邮件地址,然后验证已清除的电子邮件。这意味着,“检查”功能会检查经过消毒的电子邮件,但在该功能之外,您仍在处理无效的电子邮件 因此,要么在check函数之外进行清理,要么在我看来更好,只验证输入而不进行清理(最好让用户意识到他键入的内容不正确,而不是试图修复它) 编辑:
实际上肯定还有另一个问题,因为当代码
消失(…您的电子邮件地址无效…
时,页面的处理将停止。我们需要查看写入数据库的代码部分。没有显示将其添加到数据库的代码,但是它不会发送邮件-在这种情况下,请确保将注册保存到数据库的呼叫位于您发送邮件的部分。您好,谢谢,电子邮件正在通过,代码就在它下面,要将其添加到数据库中,我将其移动了(就在值下面)和相同的问题。如果插入db的代码与mail命令不在同一个{}中,它不能向您显示“您的电子邮件地址无效”消息并发送邮件(不遵循发布的代码),谢谢你的回复,对不起,我是一个完全的新手,我应该把这段代码放在if($mailcheck==FALSE){die($insert=mysql\u query(“insert-INTO-users”)前面吗(标题、用户名、密码、电子邮件、名、名、名、年龄、国籍、城镇、语言学习、学习方式、语言水平、周一、周二、周三、周四、周五、周六、周日、电话等)值(“$title”、“$username”、“$password”、“$email”、“$firstname”、“$secondname”、“$age”、“$national”、“$town_city”、“$language_to_study”、“$how_to_study”、“$language_level”、“$星期一”、“$星期二”、“$星期三”、“$星期四”、“$星期五”、“$星期六”、“$星期天”、“$telephone”、“$telephone”;”);功能spamcheck($field)@Paul Meadows-在测试电子邮件地址之前,您正在插入新用户?只有在电子邮件验证成功后,才应执行查询。查询应位于同一位置,在该位置调用mail()
function.好的,谢谢你的回复,我把它放在了将它插入数据库的上面,而且它似乎起了作用,谢谢你的帮助,我为此绞尽脑汁好几个小时了。@Paul Meadows-不客气!也许我误解了你的评论,但是如果你在if(isset($\u REQUEST['email'))之后进行插入查询){…}
,有人可以将电子邮件留空,代码不会检查电子邮件地址,但无论如何都会将其插入数据库。
function checkEmail($input)
{
return filter_var($input, FILTER_VALIDATE_EMAIL);
}