我有一个脚本,它将验证电子邮件地址&我认为这是唯一在表单提交时验证电子邮件的解决方案?我最终得到了这个脚本
<?php
if(isset($_POST['email']))
{
$email = $_POST['email'];
if (strpos($email, '@'))
{
$first = end(explode("@", $email));
if(checkdnsrr($first, 'MX'))
{
$validate = 'Valid email.';
}
else
{
$validate = 'Invalid email.';
}
}
else
{
$validate = 'Invalid email.';
}
echo $validate;
}
?>
<form method="POST">
<input type="text" name="email">
<input type="submit" value="submit">
</form>
它运行正常,但我有这个错误Strict standards: Only variables should be passed by reference
。
是否有任何方法可以删除错误?和改进代码?到目前为止,是否有电子邮件验证真正验证电子邮件?
您可以执行类似的操作
<?php
if(isset($_POST['email']))
{
$email = $_POST['email'];
if (strpos($email, '@'))
{
$first = explode("@", $email);
$validate = checkdnsrr($first[1], 'MX') ? 'Valid email.' : 'Invalid email.';
}
else
{
$validate = 'Invalid email.';
}
echo $validate;
}
?>
<form method="POST">
<input type="text" name="email">
<input type="submit" value="submit">
</form>
您可以尝试下面的示例
<?php
function domain_exists($email, $record = 'MX'){
list($user, $domain) = explode('@', $email);
return checkdnsrr($domain, $record);
}
if(isset($_POST['email'])){
$email = $_POST['email'];
if(domain_exists($email)) {
echo('This MX records exists; I will accept this email as valid.');
}
else {
echo('No MX record exists; Invalid email.');
}
}
?>
但是,这并不可靠。dns通常不可靠。这是最大的努力。提供无效域也可能需要很长时间,因此,如果有人用大量无效/脱机域破坏您的脚本,您需要考虑系统的潜在DOS。
事实上(鲜为人知),域甚至不需要有MX记录就可以发送邮件。邮件传递应该回退到使用指定主机的A记录。现在这种情况可能不会发生太多,但从理论上讲。。
这样你就可以用类似的preg匹配来验证你的电子邮件
//$email = "abc123@lolhaha"; // Invalid email address
$email = "somebody@somesite.com"; // Valid email address
$regex = '/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$/';
if (preg_match($regex, $email)) {
echo $email . " is a valid email. We can accept it.";
} else {
echo $email . " is an invalid email. Please try again.";
}
原因是,end(explode("@", $email));
函数导致错误,end()
需要一个参考,为此您可以尝试使用以下代码,
$EmailArray = explode("@", $email);
$first = end($EmailArray);
mixed end ( array &$array )
end()
使数组的内部指针前进到最后一个元素,并返回其值。
参数:
array:此数组是通过引用传递的,因为它是由函数修改的。这意味着您必须将实际变量而不是返回数组的函数传递给它,因为只有实际变量才能通过引用传递。
返回值:返回最后一个元素的值,对于空数组,返回FALSE。