1. 程式人生 > 其它 >最簡單的ThinkPHP例項(4)登入與註冊

最簡單的ThinkPHP例項(4)登入與註冊

這是一個簡單的登入與註冊的TP5的例子~

1、html部分

首頁:application\index\view\index\index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"
> <title>最簡單的ThinkPHP例項(4)登入與註冊</title> </head> <body> <div>老使用者?<a href="/index/index/login">去登入</a></div> <br/> <div>新使用者?<a href="/index/index/zhuce">去註冊</a></div> </body> </html>
View Code

登入頁:application\index\view\index\login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>最簡單的ThinkPHP例項(4)登入與註冊</title>
</head>
<body> <div id="app"> <h2>登入</h2> <form onsubmit="return false;"> <div> 使用者名稱:<input type="text" v-model="username" /> </div> <div> 密碼:<input type="password" v-model="password" /> </div> <div style="color: red">{{ error }}</div> <br/> <div> <button type="submit" @click="login()">登入</button> <button type="reset">重置</button> </div> <br/> <div>新使用者?<a href="/index/index/zhuce">去註冊</a></div> </form> </div> <!-- 開發環境版本,包含了有幫助的命令列警告 --> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <!-- 生產環境版本,優化了尺寸和速度 --> <!-- <script src="https://cdn.jsdelivr.net/npm/vue@2"></script> --> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <script src="/js/qs.js"></script> <script> var axiosAjax = axios.create({ baseURL:'/', // <---- 這裡使用 qs 轉換引數 transformRequest: [function (data) { // 轉換資料 data = Qs.stringify(data); // 通過Qs.stringify轉換為表單查詢引數 return data; }], headers:{ 'Content-Type':'application/x-www-form-urlencoded' } }) var app = new Vue({ el: '#app', data: { username: '', password: '', error: '' }, methods: { login(){ if(!this.username){ this.error = '請輸入使用者名稱' return } if(!this.password){ this.error = '請輸入密碼' return } this.error = '' // post方法 axiosAjax.post('/index/index/login', { username: this.username, password: this.password, }) .then( (response) => { console.log(response); const data = response.data if(data.code === 0){ alert('登入成功!') }else{ this.error = data.msg } }) .catch( (error) => { console.log(error); this.error = error }); } } }) </script> </body> </html>
View Code

註冊頁:application\index\view\index\zhuce.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>最簡單的ThinkPHP例項(4)登入與註冊</title>
</head>
<body>
    <div id="app">
        <h2>註冊</h2>
        <form onsubmit="return false;">
            <div>
                使用者名稱:<input type="text" v-model="username" />
            </div>
            <div>
                密碼:<input type="password" v-model="password" />
            </div>
            <div>
                確認密碼:<input type="password" v-model="password2" />
            </div>
            <div style="color: red">{{ error }}</div>
            <br/>
            <div>
                <button type="submit" @click="zhuce()">立即註冊</button>
                <button type="reset">重置</button>
            </div>
            <br/>
            <div>老使用者?<a href="/index/index/login">去登入</a></div>
        </form>
    </div>


    <!-- 開發環境版本,包含了有幫助的命令列警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <!-- 生產環境版本,優化了尺寸和速度 -->
    <!-- <script src="https://cdn.jsdelivr.net/npm/vue@2"></script> -->
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="/js/qs.js"></script>
    <script>
        var axiosAjax = axios.create({
            baseURL:'/',
            // <---- 這裡使用 qs 轉換引數
            transformRequest: [function (data) { // 轉換資料
                data = Qs.stringify(data); // 通過Qs.stringify轉換為表單查詢引數
                return data;
            }],
            headers:{
                'Content-Type':'application/x-www-form-urlencoded'
            }
        })
        var app = new Vue({
            el: '#app',
            data: {
                username: '',
                password: '',
                password2: '',
                error: ''
            },
            methods: {
                zhuce(){
                    if(!this.username){
                        this.error = '請輸入使用者名稱'
                        return
                    }
                    if(!this.password){
                        this.error = '請輸入密碼'
                        return
                    }
                    if(!this.password2){
                        this.error = '請再次密碼確認'
                        return
                    }
                    if(this.password !== this.password2){
                        this.error = '兩個密碼不一致'
                        return
                    }
                    this.error = ''

                    // post方法
                    axiosAjax.post('/index/index/zhuce', {
                        username: this.username,
                        password: this.password,
                        password2: this.password2,
                    })
                    .then( (response) => {
                        console.log(response);
                        const data = response.data
                        if(data.code === 0){
                            alert('註冊成功!')
                        }else{
                            this.error = data.msg
                        }
                    })
                    .catch( (error) => {
                        console.log(error);
                        this.error = error
                    });
                }
            }
        })
    </script>
</body>
</html>
View Code

2、控制器部分

<?php
namespace app\index\controller;

// 引入系統資料類
use think\Db;
// 引入系統控制器類
use think\Controller;

class Index extends Controller
{
    public function index()
    {
        return view();
    }

    public function zhuce()
    {

        if(!$_POST){
            return view();
        }

        $username = $_POST["username"];
        $password = $_POST["password"];
        // $password2 = $_POST["password2"]; // 此處忽略兩次密碼校驗

        $data = '';
        $code = '';
        $msg = '';
        
        // 從資料庫中讀取資料
        $ifExit = Db::table('user')->where('username', $username)->find();

        if($ifExit){
            $msg = '使用者已存在,請勿重複註冊';
            $code = -1;
        }else{
            $data = [
                "username" => $username,
                "password" => $password
            ];
            $userId = Db::table('user')->insertGetId($data);
            $data['id'] = $userId;
            $code = 0;
        }
    
        $res = [
            "data" => $data,
            "code" => $code,
            "msg" => $msg
        ];

        return json_encode($res, JSON_UNESCAPED_UNICODE);
    }

    public function login()
    {

        if(!$_POST){
            return view();
        }

        $username = $_POST["username"];
        $password = $_POST["password"];

        $data = '';
        $code = '';
        $msg = '';
        
        // 從資料庫中讀取資料
        $ifExit = Db::table('user')->where('username', $username)->find();

        if(!$ifExit){
            $msg = '使用者不存在';
            $code = -1;
        }else{
            if($password != $ifExit["password"]){
                $msg = '密碼錯誤';
                $code = -1;
            }else{
                $data = $ifExit;
                $code = 0;
            }
        }
    
        $res = [
            "data" => $data,
            "code" => $code,
            "msg" => $msg
        ];

        return json_encode($res, JSON_UNESCAPED_UNICODE);
    }
}
View Code

3、資料庫部分

最後的效果:

註冊校驗:

登入校驗:

最後:這個例子只是為了入門TP做的簡單的嘗試,實際應用的登入和註冊往往要複雜得多,比如防注水的驗證碼等。