我有一个脚本可以验证电子邮件地址&我认为这是在表单提交时验证电子邮件的唯一解决方案吗?我最终得到了这个脚本
<?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
。
有没有办法删除 ERROR ?和改进代码?到目前为止是否有任何电子邮件验证真正验证电子邮件?
答案 0 :(得分:1)
你可以做这样的事情
<?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>
答案 1 :(得分:0)
您可以尝试以下作为示例
<?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.";
}
答案 2 :(得分:-1)
共鸣是,end(explode("@", $email));
函数导致错误,end()
需要引用,因为您可以尝试使用以下代码,
$EmailArray = explode("@", $email);
$first = end($EmailArray);
mixed end ( array &$array )
end()
使数组的内部指针前进到最后一个元素,并返回其值。
<强>参数:强>
array :此数组通过引用传递,因为它被函数修改。这意味着你必须传递一个实变量,而不是一个返回数组的函数,因为只有实际的变量可以通过引用传递。
返回值:返回最后一个元素的值,或返回空数组的FALSE。