教员的小粉丝 發表於 2019-5-28 13:47:00

PHP实现用户登录注册功能

<p>初学php做了一些比较常见且有用的页面,放在上面记录一下咯<br>
我是用了bootstrap框架里面的模态框做注册登陆页面,这样页面比较美观<br>
页面效果:<br>
<img src="https://upload-images.jianshu.io/upload_images/17943987-0bf58b76d626a86b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"><br>
<img src="https://img-blog.csdnimg.cn/20190527190626913.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTEyNzE4Mw==,size_16,color_FFFFFF,t_70"><br>
注册成功条件/功能:<br>
1)用户名不能冲突<br>
<img src="https://upload-images.jianshu.io/upload_images/17943987-1cc57c038d307f64.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"><br>
2)两次密码必须相同<br>
<img src="https://upload-images.jianshu.io/upload_images/17943987-df8719f63b816c88.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"><br>
3)用户注册数据添加进数据库<br>
4)注册/登录成功之后,用户自动登录<br>
<img src="https://upload-images.jianshu.io/upload_images/17943987-ae1a99cac2f320a1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"><img src="https://upload-images.jianshu.io/upload_images/17943987-f7b2631dee0842ae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"><br>
HTML代码:</p>
<pre><code>    &lt;link rel="stylesheet" href="css/bootstrap.css"&gt;
    &lt;li class="toggle"&gt;&lt;a data-toggle="modal" href="#loginer"&gt;登录&lt;/a&gt;&lt;/li&gt;
    &lt;li class="toggle"&gt;&lt;a data-toggle="modal" href="#register"&gt;注册&lt;/a&gt;&lt;/li&gt;
    &lt;li class="toggle hidden"&gt;&lt;a id="nicheng" href="##"&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li class="toggle hidden"&gt;&lt;a id="logout" href="##"&gt;注销&lt;/a&gt;&lt;/li&gt;
//登录模态框
&lt;div id="loginer" class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel1"
   aria-hidden="true"&gt;
    &lt;div class="modal-dialog"&gt;
      &lt;div class="modal-content"&gt;
            &lt;div class="modal-header"&gt;
                &lt;button type="button" class="close" data-dismiss="modal"&gt;
                  &lt;span aria-hidden="true"&gt;&amp;times;&lt;/span&gt;&lt;span class="sr-only"&gt;Close&lt;/span&gt;&lt;/button&gt;
                &lt;h4 class="modal-title"&gt;请登录&lt;/h4&gt;
            &lt;/div&gt;
            &lt;form id="form_login" class="form-horizontal"&gt;
                &lt;div class="modal-body"&gt;
                  &lt;div class="form-group has-feedback"&gt;
                        &lt;label class="col-sm-3 control-label" for="zh1"&gt;用户名:&lt;/label&gt;
                        &lt;div class="col-sm-9 require"&gt;
                            &lt;input type="text" class="form-control" name="username" id="zh1"
                                 pattern="\w{6,10}" required&gt;
                        &lt;/div&gt;
                  &lt;/div&gt;
                  &lt;div class="form-group has-feedback"&gt;
                        &lt;label class="col-sm-3 control-label" for="pw1"&gt;密码:&lt;/label&gt;
                        &lt;div class="col-sm-9 require"&gt;
                            &lt;input type="password" pattern="\w{6,10}" class="form-control" name="pwd" id="pw1"
                                 required&gt;
                        &lt;/div&gt;
                  &lt;/div&gt;
                  &lt;div class="form-group has-feedback"&gt;
                        &lt;label class="col-sm-3 control-label" for="yzm"&gt;验证码:&lt;/label&gt;
                        &lt;div class="col-sm-5 require"&gt;
                            &lt;input type="text" pattern="\d{4}" class="form-control" name="yzm" id="yzm"
                                 required&gt;
                        &lt;/div&gt;
                        &lt;div class="col-sm-4"&gt;
                            &lt;img src="php/idcode.php" alt=""&gt;
                        &lt;/div&gt;
                  &lt;/div&gt;
                  &lt;div class="form-group has-feedback"&gt;
                        &lt;label id="info" class="col-sm-4 control-label pull-left"&gt;&lt;/label&gt;
                  &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class="modal-footer"&gt;
                  &lt;button type="submit" class="btn btn-primary"&gt;登录&lt;/button&gt;
                  &lt;button type="button" class="btn btn-default" data-dismiss="modal"&gt;关闭&lt;/button&gt;
                &lt;/div&gt;
            &lt;/form&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
//注册模态框
&lt;div id="register" class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabe2"
   aria-hidden="true"&gt;
    &lt;div class="modal-dialog"&gt;
      &lt;div class="modal-content"&gt;
            &lt;div class="modal-header"&gt;
                &lt;button type="button" class="close" data-dismiss="modal"&gt;
                  &lt;span aria-hidden="true"&gt;&amp;times;&lt;/span&gt;&lt;span class="sr-only"&gt;Close&lt;/span&gt;&lt;/button&gt;
                &lt;h4 class="modal-title"&gt;请注册&lt;/h4&gt;
            &lt;/div&gt;
            &lt;form id="form_regist" class="form-horizontal"&gt;
                &lt;div class="modal-body"&gt;
                  &lt;div class="form-group has-feedback"&gt;
                        &lt;label class="col-sm-3 control-label" for="zh2"&gt;用户名:&lt;/label&gt;
                        &lt;div class="col-sm-9 require"&gt;
                            &lt;input type="text" class="form-control" name="username" id="zh2"
                                 pattern="\w{6,10}" required&gt;
                        &lt;/div&gt;
                  &lt;/div&gt;
                  &lt;div class="form-group has-feedback"&gt;
                        &lt;label class="col-sm-3 control-label" for="pw2"&gt;密码:&lt;/label&gt;
                        &lt;div class="col-sm-9 require"&gt;
                            &lt;input type="password" pattern="\w{6,10}" class="form-control" name="pwd" id="pw2"&gt;
                        &lt;/div&gt;
                  &lt;/div&gt;
                  &lt;div class="form-group has-feedback"&gt;
                        &lt;label class="col-sm-3 control-label" for="pw3"&gt;确认密码:&lt;/label&gt;
                        &lt;div class="col-sm-9 require"&gt;
                            &lt;input type="password" pattern="\w{6,10}" class="form-control" name="repwd" id="pw3"&gt;
                        &lt;/div&gt;
                  &lt;/div&gt;
                  &lt;div class="form-group has-feedback"&gt;
                        &lt;label class="col-sm-3 control-label" for="lc"&gt;昵称:&lt;/label&gt;
                        &lt;div class="col-sm-9 require"&gt;
                            &lt;input type="text" pattern="\S{2,10}" class="form-control" name="nc" id="lc"&gt;
                        &lt;/div&gt;
                  &lt;/div&gt;
                  &lt;div class="form-group has-feedback"&gt;
                        &lt;label id="wanner" class="col-sm-4 control-label pull-left"&gt;&lt;/label&gt;
                  &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class="modal-footer"&gt;
                  &lt;button type="submit" class="btn btn-primary"&gt;注册&lt;/button&gt;
                  &lt;button type="button" class="btn btn-default" data-dismiss="modal"&gt;关闭&lt;/button&gt;
                &lt;/div&gt;
            &lt;/form&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre>
<p>JS代码:</p>
<pre><code>&lt;script src="js/jquery-2.1.3.js"&gt;&lt;/script&gt;
&lt;script src="js/bootstrap.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
    function toggle(){
      $.getJSON("php/get.php",function (res) {
            //获取当前用户是否登录
            if(res['flag']){//用户已经登录,显示昵称和注销选项
                $('li.toggle').toggleClass('hidden');
                $('#nicheng').html(res['nc'])
            }
      });
    }
    $('#form_login').submit(function (e) {/*登录*/
      e.preventDefault();/*阻止表单默认事件,页面全局刷新*/
      var data=$('#form_login').serialize();/*将表单里的数据包装起来*/
      $.getJSON('php/login.php',data,function (res) {
            /*data:将表单里的数据传给php,回调函数接受php返回来的值*/
            if(res==3){//用户名、密码、验证码都输入正确
                toggle();/*修改首页选项菜单*/
                $('#loginer').modal('hide');/*关闭模态框*/
            }else if(res==2){
                $('#info').html('用户名或密码有误')
            }else {
                $('#info').html('验证码有误')
            }
      })
    });
    $('#logout').click(function () {
      confirm('确定要注销?');
      $.getJSON('php/logout.php',function (res) {
            if(res)toggle();
      })
    })
    $('#form_regist').submit(function (e) {
      e.preventDefault();
      var data=$('#form_regist').serialize();
      $.getJSON('php/regist.php',data,function (res) {
            if(res==3){
                toggle();
                $('#register').modal('hide');
            }else if (res==2) {
                $('#wanner').html('两次密码不一致,请重试!')
            }else if (res==1) {
                $('#wanner').html('用户名冲突,请重试!')
            }
      })
    });
</code></pre>
<p>connect.php(连接数据库):</p>
<pre><code>&lt;?php
$link=new PDO("mysql:host=localhost;port=3306;dbname=db","root","");
$link-&gt;query("set names utf8");
</code></pre>
<p>get.php(判断登录状态):未登录显示登录注册选项,用户登陆后切换显示成昵称和注销选项</p>
<pre><code>&lt;?php
include_once ("connect.php");
session_start();/*开启会话*/
if (isset($_SESSION['username'])){
   /* 判断用户会话里用户名是否存在,即用户是否登录*/
    $json['nc']=$_SESSION['nc'];/*把昵称存起来,一会返回给首页*/
    $json['flag']=true;/*用户已经登录,标志flag为true*/
}else
    $json['flag']=false;/*用户已经登录,标志flag为true*/
echo json_encode($json);/*返回json*/
</code></pre>
<p>regist.php(注册):根据设置标志flag的值判断注册的三种状态</p>
<pre><code>&lt;?php
include_once ("connect.php");
$user=$_GET['username'];//获取表单提交的数据
$pwd=$_GET['pwd'];
$repwd=$_GET['repwd'];
$nc=$_GET['nc'];
$row=$link-&gt;query("select * from `user` where username='$user'");
/*查询数据库中是否存在用户名相同的用户*/
if ($row-&gt;rowCount()){
    $flag=1;/*存在用户名相同,即用户名冲突*/
}else if ($pwd!=$repwd){
   $flag=2;/*两次密码不相同*/
}else{/*插入数据进数据库*/
    $row=$link-&gt;exec("insert into`user`( `username`,`pwd`,`nc`) values ('$user','$pwd','$nc')");
    session_start();/*打开会话,将用户名和昵称存起来*/
    $_SESSION['username']=$user;
    $_SESSION['nc']=$nc;
    $flag=3;/*注册成功标志*/
}
echo $flag;
</code></pre>
<p>login.php(登录):根据标志flag判断登录操作是否成功或哪里出错</p>
<pre><code>&lt;?php
include_once ("connect.php");
session_start();/*开启会话*/
$user=$_GET['username'];/*获取登录表单提交过来的数据*/
$pwd=$_GET['pwd'];
$yzm=$_GET['yzm'];
if($yzm==$_SESSION['vCode']){/*当用户输入的验证码和图片验证码相同时*/
    $result=$link-&gt;query("select * from `user` where username='$user' and pwd='$pwd'");
    $link = null;
    $row = $result-&gt;fetch();/*读取从数据库获取的数据*/
    if ($row) {/*如果数据存在,即用户登录成功*/
      $_SESSION['username'] = $row['username'];
      /*将用户名和昵称存在服务器,可以多个页面使用*/
      $_SESSION['nc'] = $row['nc'];
      $flag=3;
    }else{/*用户名或密码错误*/
      $flag=2;
    }
}else{/*验证码输入错误*/
    $flag=1;
}
echo $flag;
</code></pre>
<p>logout.php(注销登录):直接销毁会话变量,然后get.php里面获取不到username和nc即判断用户已注销</p>
<pre><code>&lt;?php
session_start();
unset($_SESSION['username']);//销毁用户名
unset($_SESSION['nc']);//销毁昵称
echo json_encode(true);//返回结果
</code></pre>
<p>登录页面的自动生成验证码代码,在我的另一篇文里<br>
https://www.cnblogs.com/xyyl/p/10901100.html</p><br><br>
来源:https://www.cnblogs.com/xyyl/p/10936788.html
頁: [1]
查看完整版本: PHP实现用户登录注册功能