• php实现邮箱激活功能


    php实现邮箱激活功能

    一、样例

    二、文件结构

    其中swiftmailer-master是第三方插件,用来发验证邮件

    三、核心代码

    doAction.php 响应页面

      1 <?php
      2 header("content-type:text/html;charset=utf-8;");
      3 require_once 'config/config.php';
      4 require_once 'functions/common.func.php';
      5 require_once 'functions/mysql.func.php';
      6 require_once 'swiftmailer-master/lib/swift_required.php';
      7 $link = connect3();//数据库的连接
      8 $table = "51zxw_user";//表名字
      9 $act = $_REQUEST['act'];
     10 $username = $_REQUEST['username'];
     11 $password = md5($_REQUEST['password']);
     12 
     13 switch ($act){
     14     case 'reg':
     15 //         echo  '注册成功!';
     16         //关闭事物的自动提交
     17         mysqli_autocommit($link, false);
     18         //得到当前时间
     19         $regTime = time(); 
     20         //得到邮箱
     21         $email = $_POST['email'];
     22         //生成一个token
     23         $token = md5($username.$password.$regTime);
     24         //生成一个token的过期时间
     25         $token_exptime = $regTime+24*3600;//表示一天以后过期
     26         //插入数据
     27         $data = compact('username','password','email','regTime','token','token_exptime');
     28         $res = insert($link, $data, $table);
     29         //调用第三方的库发送邮件
     30         //创建一个transport对象,确定发送到哪个邮箱
     31         $transport = Swift_SmtpTransport::newInstance("smtp.sina.com",25);
     32         //账号名
     33         $transport->setUsername('clivelyn@sina.com');
     34         //密码
     35         $transport->setPassword('lin123');
     36         //创建一个发送邮箱的对象
     37         $mailer = Swift_Mailer::newInstance($transport);
     38         //发送邮件要有发送人,要有标题,要有邮件主体
     39         //发送邮件信息对象
     40         $message = Swift_Message::newInstance();
     41         //谁来发送
     42         $message->setFormat(array('clivelyn@sina.com'));
     43         //发送到哪里,谁注册,我发送到谁那里
     44         $message->setTo($email);
     45         //设置主题
     46         $message->setSubject('注册账号激活邮箱');
     47         //邮件中的链接
     48         $activeStr = "?act=active&username={$username}&token={$token}";
     49         $url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$activeStr;
     50         //设置邮件的正文内容
     51         //链接已经成功,url再加密
     52         $urlEncode = urlencode($url);
     53 //         echo $urlEncode;
     54         $emailBody = <<<EOF
     55                               欢迎{$username}使用账号激活功能,请点击连接激活账号:
     56                 <a href="{$url} target="_blank">{$urlEncode}</a><br/>
     57             (该链接在24小时内有效) 如果上面不是链接形式,请将地址复制到您的浏览器(例如IE)的地址栏再访问。
     58         
     59 EOF;
     60         
     61         //真正的发送
     62         $message->setBody($emailBody,'text/html','utf-8');
     63         try {
     64             $res1 = $mailer->send($message);
     65             if($res && $res1){
     66                 mysqli_commit($link);
     67                 mysqli_autocommit($link,true);
     68                 alertMes("注册信息,请激活使用", "index.php");
     69             }
     70         }catch (Swift_ConnectionException $e){
     71             //echo $e;
     72             die('邮件服务器错误:').$e->getMessage();
     73         }
     74         
     75         
     76         
     77         
     78         break;
     79     case 'active'://激活功能
     80 //         echo  '激活成功!';
     81         $token = $_GET['token'];
     82         //因为要进行转义
     83         $username = mysqli_real_escape_string($link, $username);
     84         //sql语句
     85         $query = "select id,token_exptime from {$table} where username='{$username}'";
     86         //mysqli的查询语句
     87         $user = fetchOne($link, $query);
     88         if($user){
     89             $now = time();
     90             $token_exptime = $user['token_exptime'];
     91             //判断是否激活过期
     92             if($now>$token_exptime){//过期
     93                 delete($link, $table,"username={$username}");
     94                 alertMes("激活码过期,请重新注册", "index.php");
     95             }else{//激活,把status改为1就好
     96                 $data = array('status'=>1);
     97                 $res = update($link, $data, $table);
     98                 if($res){//激活成功
     99                     alertMes("激活成功", "index.php");
    100                 }else{
    101                     alertMes("激活失败,请重新激活", "index.php");
    102                 }
    103             }
    104         }else{
    105             alertMes("激活失败,没有找到要激活的用户", 'index.php');
    106         }
    107         break;
    108 }
    109 echo "<br/>你好";

    工具函数

    mysql.fun.php  封装的mysqli的工具

      1 <?php
      2 /**
      3  * 连接
      4  * @param string $host
      5  * @param string $user
      6  * @param string $password
      7  * @param string $charset
      8  * @param string $database
      9  * @return object 连接标识符
     10  */
     11 function connect1($host,$user,$password,$charset,$database) {
     12     $link = mysqli_connect ( $host, $user, $password ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () );
     13     mysqli_set_charset ( $link, $charset );
     14     mysqli_select_db ( $link, $database ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) );
     15     return $link;
     16 }
     17 /**
     18  * 连接 需要传递数组
     19  * @param array $config
     20  * @return object
     21  */
     22 function connect2($config) {
     23     $link = mysqli_connect ( $config ['host'], $config ['user'], $config ['password'] ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () );
     24     mysqli_set_charset ( $link, $config ['charset'] );
     25     mysqli_select_db ( $link, $config ['dbName'] ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) );
     26     return $link;
     27 }
     28 /**
     29  * 用常量的形式建立连接
     30  * @return unknown
     31  */
     32 function connect3(){
     33     $link = mysqli_connect ( DB_HOST, DB_USER, DB_PWD ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () );
     34     mysqli_set_charset ( $link, DB_CHARSET );
     35     mysqli_select_db ( $link, DB_DBNAME ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) );
     36     return $link;
     37 }
     38 
     39 /*
     40  array(
     41  'username'=>'king',
     42  'password'=>'king',
     43  'age'=>'12',
     44  'regTime'=>'123123123'
     45  );
     46  INSERT user(username,password,age,regTime) VALUES('king','king','12','123123123');
     47  */
     48 /**
     49  * 插入操作
     50  * @param object $link
     51  * @param array $data
     52  * @param string $table
     53  * @return boolean
     54  */
     55 function insert($link,$data,$table){
     56     $keys = join ( ',', array_keys ( $data ) );
     57     $vals = "'" . join ( "','", array_values ( $data ) ) . "'";
     58     $query = "INSERT {$table}({$keys}) VALUES({$vals})";
     59     $res = mysqli_query ( $link, $query );
     60     if ($res) {
     61         return mysqli_insert_id ( $link );
     62     } else {
     63         return false;
     64     }
     65 }
     66 
     67 /*
     68  array(
     69          'username'=>'king123',
     70          'password'=>'king123',
     71          'age'=>'32',
     72          'regTime'=>'123123123'
     73  );
     74  UPDATE user SET username='king123',password='king123',age='32',regTime='123123123' WHERE id=1
     75 */
     76 /**
     77  * 更新操作
     78  * @param object $link
     79  * @param array $data
     80  * @param string $table
     81  * @param string $where
     82  * @return boolean
     83  */
     84 function update($link, $data, $table, $where = null) {
     85     foreach ( $data as $key => $val ) {
     86         $set .= "{$key}='{$val}',";
     87     }
     88     $set = trim ( $set, ',' );
     89     $where = $where == null ? '' : ' WHERE ' . $where;
     90     $query = "UPDATE {$table} SET {$set} {$where}";
     91     $res = mysqli_query ( $link, $query );
     92     if ($res) {
     93         return mysqli_affected_rows ( $link );
     94     } else {
     95         return false;
     96     }
     97 }
     98 
     99 //DELETE FROM user WHERE id=
    100 /**
    101  * 删除操作
    102  * @param object $link
    103  * @param string $table
    104  * @param string $where
    105  * @return boolean
    106  */
    107 function delete($link, $table, $where = null) {
    108     $where = $where ? ' WHERE ' . $where : '';
    109     $query = "DELETE FROM {$table} {$where}";
    110     $res = mysqli_query ( $link, $query );
    111     if ($res) {
    112         return mysqli_affected_rows ( $link );
    113     } else {
    114         return false;
    115     }
    116 }
    117 
    118 /**
    119  * 查询指定记录
    120  * @param object $link
    121  * @param string $query
    122  * @param string $result_type
    123  * @return array|boolean
    124  */
    125 function fetchOne($link, $query, $result_type = MYSQLI_ASSOC) {
    126     $result = mysqli_query ( $link, $query );
    127     if ($result && mysqli_num_rows ( $result ) > 0) {
    128         $row = mysqli_fetch_array ( $result, $result_type );
    129         return $row;
    130     } else {
    131         return false;
    132     }
    133 }
    134 
    135 /**
    136  * 查询所有记录
    137  * @param object $link
    138  * @param string $query
    139  * @param string $result_type
    140  * @return array|boolean
    141  */
    142 function fetchAll($link, $query, $result_type = MYSQLI_ASSOC) {
    143     $result = mysqli_query ( $link, $query );
    144     if ($result && mysqli_num_rows ( $result ) > 0) {
    145         while ( $row = mysqli_fetch_array ( $result, $result_type ) ) {
    146             $rows [] = $row;
    147         }
    148         return $rows;
    149     } else {
    150         return false;
    151     }
    152 }
    153 
    154 /**
    155  * 得到表中的记录数
    156  * @param object $link
    157  * @param string $table
    158  * @return number|boolean
    159  */
    160 function getTotalRows($link, $table) {
    161     $query = "SELECT COUNT(*) AS totalRows FROM {$table}";
    162     $result = mysqli_query ( $link, $query );
    163     if ($result && mysqli_num_rows ( $result ) == 1) {
    164         $row = mysqli_fetch_assoc ( $result );
    165         return $row ['totalRows'];
    166     } else {
    167         return false;
    168     }
    169 }
    170 
    171 /**
    172  * 得到结果集的记录条数
    173  * @param object $link
    174  * @param string $query
    175  * @return boolean
    176  */
    177 function getResultRows($link, $query) {
    178     $result = mysqli_query ( $link, $query );
    179     if ($result) {
    180         return mysqli_num_rows ( $result );
    181     } else {
    182         return false;
    183     }
    184 }
    185 
    186 
    187 
    188 /**
    189  * @param object $link
    190  */
    191 function getServerInfo($link) {
    192     return mysqli_get_server_info ( $link );
    193 }
    194 /**
    195  * @param object $link
    196  */
    197 function getClientInfo($link) {
    198     return mysqli_get_client_info ( $link );
    199 }
    200 
    201 /**
    202  * @param object $link
    203  */
    204 function getHostInfo($link){
    205     return mysqli_get_host_info($link);
    206 }
    207 
    208 /**
    209  * @param object $link
    210  */
    211 function getProtoInfo($link) {
    212     return mysqli_get_proto_info ( $link );
    213 }

    跳转工具

    common.func.php 激活成功之后的跳转

     1 <?php
     2 /**
     3  * 弹出提示信息并且跳转
     4  * @param string $mes
     5  * @param string $url
     6  */
     7 function alertMes($mes,$url){
     8     echo "<script>
     9             alert('{$mes}');
    10             location.href='{$url}';
    11     </script>";
    12     die;
    13 }

    四、完整代码

    完整代码我会放在GitHub上面

    链接如下:

  • 相关阅读:
    sys.stdout.flush-倒计时
    wget 网站扒取
    万能英数脚本
    sample function
    get_time
    读取指定行
    request设置cookies
    resize2fs
    闭包与认识装饰器
    函数的名称空间与作用域
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8550764.html
Copyright © 2020-2023  润新知