PHP實現用戶登錄注冊功能


初學php做了一些比較常見且有用的頁面,放在上面記錄一下咯
我是用了bootstrap框架里面的模態框做注冊登陸頁面,這樣頁面比較美觀
頁面效果:
image.png
在這里插入圖片描述
注冊成功條件/功能:
1)用戶名不能沖突
image.png
2)兩次密碼必須相同
image.png
3)用戶注冊數據添加進數據庫
4)注冊/登錄成功之后,用戶自動登錄
image.pngimage.png
HTML代碼:

    <link rel="stylesheet" href="css/bootstrap.css">
    <li class="toggle"><a data-toggle="modal" href="#loginer">登錄</a></li>
    <li class="toggle"><a data-toggle="modal" href="#register">注冊</a></li>
    <li class="toggle hidden"><a id="nicheng" href="##"></a></li>
    <li class="toggle hidden"><a id="logout" href="##">注銷</a></li>
//登錄模態框
<div id="loginer" class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel1"
     aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">
                    <span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
                <h4 class="modal-title">請登錄</h4>
            </div>
            <form id="form_login" class="form-horizontal">
                <div class="modal-body">
                    <div class="form-group has-feedback">
                        <label class="col-sm-3 control-label" for="zh1">用戶名:</label>
                        <div class="col-sm-9 require">
                            <input type="text" class="form-control" name="username" id="zh1"
                                   pattern="\w{6,10}" required>
                        </div>
                    </div>
                    <div class="form-group has-feedback">
                        <label class="col-sm-3 control-label" for="pw1">密碼:</label>
                        <div class="col-sm-9 require">
                            <input type="password" pattern="\w{6,10}" class="form-control" name="pwd" id="pw1"
                                   required>
                        </div>
                    </div>
                    <div class="form-group has-feedback">
                        <label class="col-sm-3 control-label" for="yzm">驗證碼:</label>
                        <div class="col-sm-5 require">
                            <input type="text" pattern="\d{4}" class="form-control" name="yzm" id="yzm"
                                   required>
                        </div>
                        <div class="col-sm-4">
                            <img src="php/idcode.php" alt="">
                        </div>
                    </div>
                    <div class="form-group has-feedback">
                        <label id="info" class="col-sm-4 control-label pull-left"></label>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-primary">登錄</button>
                    <button type="button" class="btn btn-default" data-dismiss="modal">關閉</button>
                </div>
            </form>
        </div>
    </div>
</div>
//注冊模態框
<div id="register" class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabe2"
     aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">
                    <span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
                <h4 class="modal-title">請注冊</h4>
            </div>
            <form id="form_regist" class="form-horizontal">
                <div class="modal-body">
                    <div class="form-group has-feedback">
                        <label class="col-sm-3 control-label" for="zh2">用戶名:</label>
                        <div class="col-sm-9 require">
                            <input type="text" class="form-control" name="username" id="zh2"
                                   pattern="\w{6,10}" required>
                        </div>
                    </div>
                    <div class="form-group has-feedback">
                        <label class="col-sm-3 control-label" for="pw2">密碼:</label>
                        <div class="col-sm-9 require">
                            <input type="password" pattern="\w{6,10}" class="form-control" name="pwd" id="pw2">
                        </div>
                    </div>
                    <div class="form-group has-feedback">
                        <label class="col-sm-3 control-label" for="pw3">確認密碼:</label>
                        <div class="col-sm-9 require">
                            <input type="password" pattern="\w{6,10}" class="form-control" name="repwd" id="pw3">
                        </div>
                    </div>
                    <div class="form-group has-feedback">
                        <label class="col-sm-3 control-label" for="lc">昵稱:</label>
                        <div class="col-sm-9 require">
                            <input type="text" pattern="\S{2,10}" class="form-control" name="nc" id="lc">
                        </div>
                    </div>
                    <div class="form-group has-feedback">
                        <label id="wanner" class="col-sm-4 control-label pull-left"></label>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-primary">注冊</button>
                    <button type="button" class="btn btn-default" data-dismiss="modal">關閉</button>
                </div>
            </form>
        </div>
    </div>
</div>

JS代碼:

<script src="js/jquery-2.1.3.js"></script>
<script src="js/bootstrap.min.js"></script>
<script>
    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('用戶名沖突,請重試!')
            }
        })
    });

connect.php(連接數據庫):

<?php
$link=new PDO("mysql:host=localhost;port=3306;dbname=db","root","");
$link->query("set names utf8");

get.php(判斷登錄狀態):未登錄顯示登錄注冊選項,用戶登陸后切換顯示成昵稱和注銷選項

<?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*/

regist.php(注冊):根據設置標志flag的值判斷注冊的三種狀態

<?php
include_once ("connect.php");
$user=$_GET['username'];//獲取表單提交的數據
$pwd=$_GET['pwd'];
$repwd=$_GET['repwd'];
$nc=$_GET['nc'];
$row=$link->query("select * from `user` where username='$user'");
/*查詢數據庫中是否存在用戶名相同的用戶*/
if ($row->rowCount()){
    $flag=1;/*存在用戶名相同,即用戶名沖突*/
}else if ($pwd!=$repwd){
   $flag=2;/*兩次密碼不相同*/
}else{/*插入數據進數據庫*/
    $row=$link->exec("insert into`user`( `username`,  `pwd`,`nc`) values ('$user','$pwd','$nc')");
    session_start();/*打開會話,將用戶名和昵稱存起來*/
    $_SESSION['username']=$user;
    $_SESSION['nc']=$nc;
    $flag=3;/*注冊成功標志*/
}
echo $flag;

login.php(登錄):根據標志flag判斷登錄操作是否成功或哪里出錯

<?php
include_once ("connect.php");
session_start();/*開啟會話*/
$user=$_GET['username'];/*獲取登錄表單提交過來的數據*/
$pwd=$_GET['pwd'];
$yzm=$_GET['yzm'];
if($yzm==$_SESSION['vCode']){/*當用戶輸入的驗證碼和圖片驗證碼相同時*/
    $result=$link->query("select * from `user` where username='$user' and pwd='$pwd'");
    $link = null;
    $row = $result->fetch();/*讀取從數據庫獲取的數據*/
    if ($row) {/*如果數據存在,即用戶登錄成功*/
        $_SESSION['username'] = $row['username'];
        /*將用戶名和昵稱存在服務器,可以多個頁面使用*/
        $_SESSION['nc'] = $row['nc'];
        $flag=3;
    }else{/*用戶名或密碼錯誤*/
        $flag=2;
    }
}else{/*驗證碼輸入錯誤*/
    $flag=1;
}
echo $flag;

logout.php(注銷登錄):直接銷毀會話變量,然后get.php里面獲取不到username和nc即判斷用戶已注銷

<?php
session_start();
unset($_SESSION['username']);//銷毀用戶名
unset($_SESSION['nc']);//銷毀昵稱
echo json_encode(true);//返回結果

登錄頁面的自動生成驗證碼代碼,在我的另一篇文里
https://www.cnblogs.com/xyyl/p/10901100.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM