Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP验证电子邮件_Php_Mysql_Email Validation - Fatal编程技术网

使用PHP验证电子邮件

使用PHP验证电子邮件,php,mysql,email-validation,Php,Mysql,Email Validation,当访问者在我的网站上注册时,我如何验证他/她使用的电子邮件是否有效。我想通过电子邮件向他们发送一个链接,他们可以点击该链接来证明自己的会员资格,如何做到这一点?如果您使用的是PHP5.2或更高版本,一个选项是filter\u var函数 if (filter_var('email@example.com', FILTER_VALIDATE_EMAIL) !== FALSE) 创建一个唯一的随机数,并将其存储在用户ID旁边的表格中。通过电子邮件向他们发送一条消息,其中包含一个链接,指向一个接受随

当访问者在我的网站上注册时,我如何验证他/她使用的电子邮件是否有效。我想通过电子邮件向他们发送一个链接,他们可以点击该链接来证明自己的会员资格,如何做到这一点?

如果您使用的是PHP5.2或更高版本,一个选项是filter\u var函数

if (filter_var('email@example.com', FILTER_VALIDATE_EMAIL) !== FALSE)

创建一个唯一的随机数,并将其存储在用户ID旁边的表格中。通过电子邮件向他们发送一条消息,其中包含一个链接,指向一个接受随机数作为输入的页面。如果他们有正确的随机数,则将其帐户标记为活动。

在较高级别上,您要做的大致如下:

  • 当用户注册时,创建一个用户自己无法识别的密码
    • 这可以是像随机字符串一样随机分配的内容
    • 这也可以是您可以编程计算的东西(但用户不能),比如将用户电子邮件地址的MD5连接到一个秘密字符串;这样做可以为您节省一个数据库列,因为您不必存储它
  • 保存密码并以电子邮件链接的形式发送给用户
  • 在该链接上设置侦听器,如果代码匹配,“激活用户”

至于如何一步一步地做这件事,.

我曾经做过类似的事情,但是我不需要验证用户是否存在,我需要验证格式以及它是否是一个真正的域(scrub)none@none.com). 您可以查看我的函数并从那里开始

//Verify formatting
function verify_email($email){

    if(!preg_match('/^[_A-z0-9-]+((\.|\+)[_A-z0-9-]+)*@[A-z0-9-]+(\.[A-z0-9-]+)*(\.[A-z]{2,4})$/',$email)){
        return false;
    } else {
        return $email;
    }
}

//Verify MX records exist
function verify_email_dns($email){

    // This will split the email into its front
    // and back (the domain) portions
    list($name, $domain) = split('@',$email);

    if(!(checkdnsrr($domain,'MX') || checkdnsrr($domain, 'A'))){

        // No MX record found
        return false;

    } else {

        // MX record found, return email
        return true;

    }
}

您也可以使用以下方法检查此项

用户注册。 数据库将使用其详细信息进行更新,并为活动/非活动添加一个标志。 电子邮件通过链接发送到注册的电子邮件地址。 链接转到可以确认电子邮件地址有效并更新数据库的页面

不知道你在什么样的环境中工作,也不知道你在做一些假设,这大概就是你的工作方式

我假设您已经在坚持用户注册? 对于以下内容,您需要生成某种哈希,并将其与用户/成员详细信息一起插入

$hash = substr(md5(uniqid()), 0, 5);
您是否有信心构建电子邮件视图并使用phpMailer或类似工具发送? 如果是这样的话,那么就这样做,在点击链接时,它会抓取member_id和member_hash,等等类似于下面的东西。。。 我在这里使用PDO,再一次,有很多方法可以做你想做的事。。。什么对你最好

// PDO Instance
$pdo = $this->actionServer->getDataSource('PDO');

$findMember = $pdo->prepare('SELECT * FROM member WHERE member.member_id = :memberId AND member.member_hash = :memberHash AND hidden = 1');
$findMember->bindParam(':memberId', $memberId);
$findMember->bindParam(':memberHash', $memberHash);
$findMember->execute();
$findMemberResult = $findMember->fetch(PDO::FETCH_ASSOC);

if (empty($findMemberResult)) {
    $this->log->error('Could not find member based on ID and Hash combination');
    throw new HTTPException(404);
}

/**
 * Could use a method like below to approve
 */

protected function approveMember($memberId, $pdo) {
    $sql = 'UPDATE member SET member.hidden = 0 WHERE member.member_id = :memberId';
    $updateMember = $pdo->prepare($sql);
    $updateMember->bindParam(':memberId', $memberId);
    $updateMember->execute();
}
希望这有帮助


Cheerio

您想验证电子邮件id,还是想同时检查电子邮件id是否存在?这主要取决于您的托管解决方案这里的最佳答案是什么,但您可以从查看phpMail可能的副本开始,尽管关于FILTER_VALI的蹩脚部分并不认为他只想验证电子邮件的格式。他希望验证电子邮件是否是属于用户的真实电子邮件地址。因此,他想发送一封确认电子邮件,其中包含用户必须点击的链接。如果用户输入了一封伪造的电子邮件,他就无法验证他的帐户并登录。此外,none.com上的人也会不高兴,这是一个真实的域名(尽管人们一直在使用它,好像它不是)。你是说
example.com
?还有我对@Sourav说的话。至少你包括了.info和.mobi,但嘿,“.travel不存在(2001!),.museum不存在(2001!),.ф不存在(2010),拉拉”,请不要这样做。这是个糟糕的主意。接受用户输入的任何电子邮件地址,只要它包含@和句点,并通过向他们发送电子邮件进行验证。我对过于热心/不可靠的电子邮件地址验证感到厌烦。@如果这个解决方案在我的应用程序中对我有效,我建议从验证域开始。我还提供了一个类似SO问题的链接。