最簡單的ThinkPHP例項(4)登入與註冊
阿新 • • 發佈:2021-08-17
這是一個簡單的登入與註冊的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"View Code> <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>
登入頁: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>View Code<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>
註冊頁: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做的簡單的嘗試,實際應用的登入和註冊往往要複雜得多,比如防注水的驗證碼等。