PHP與MYSQL實(shí)現(xiàn)用戶登錄與登錄后的退出操作
index.php文件
<?php $page_title = '首頁'; // include('inc/header.php'); //首頁登錄頁面 include('login_page.php'); //導(dǎo)入公共底部文件 // include ('inc/footer.php');
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
login_page.php文件
<?php /醫(yī)院 *用戶登錄頁面 *此頁面只做2件事 *1.輸出錯(cuò)誤(比如郵箱錯(cuò)誤,密碼錯(cuò)誤等) *2.輸出登錄表單 */ $page_title = '用戶登錄'; //導(dǎo)入公共頭部文件 include('inc/header.php'); //輸出錯(cuò)誤信息 if (isset($errors) && !empty($errors)) { $errors_msg = '<p style="color:red">'; foreach ($errors as $msg) { $errors_msg .= $msg.'<br>'; } echo $errors_msg.'</p>'; } ?> <div class="login_bd" style="width: 400px; height: 200px; background-color: DodgerBlue; margin: auto; color: #fff; padding: 3px 10px;"> <form action="login.php" method="post"> <h2>用戶登錄</h2> <p> <label for="email">郵箱:</label> <input type="email" name="email" id="email" value="<?php echo isset($_POST['email'])?$_POST['email']:'' ?>" placeholder="請(qǐng)輸入登錄郵箱"> </p> <p> <label for="password">密碼:</label> <input type="password" name="password" id="password" value="<?php echo isset($_POST['password'])?$_POST['password']:'' ?>" placeholder="請(qǐng)輸入登錄密碼"> </p> <p align="center"> <button type="sublim" name="sublim" id="sublim">登錄</button> </p> </form> </div> <?php //導(dǎo)入公共底部文件 include('inc/footer.php');
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
login.php文件
<?php /醫(yī)院 *前端代碼寫完后,點(diǎn)擊登錄按鈕后把信息提交到login.php文件, *下面實(shí)現(xiàn)登錄驗(yàn)證 * *思路: *函數(shù)將完成以下2個(gè)工作: *1.驗(yàn)證用戶的郵箱和密碼 *2.跳轉(zhuǎn)到指定頁面 * */ //檢測(cè)請(qǐng)求類型是否為POST if($_SERVER['REQUEST_METHOD'] == 'POST') { // 1.加載公共函數(shù)庫(kù) require ('inc/function.php'); // 2.連接數(shù)據(jù)庫(kù) require ('inc/connect.php'); //3.驗(yàn)證登錄 list($check, $data)= check_login($adc, $_POST['email'], $_POST['password']); //4.驗(yàn)證通過 if($check) { //設(shè)置cookies setcookie('user_id', $data['user_id']); setcookie('user_name', $data['user_name']); //跳轉(zhuǎn)頁面 redirect_user('loggedin.php'); } else { //驗(yàn)證失敗 $errors = $data; } //關(guān)閉數(shù)據(jù)庫(kù)連接 mysqli_close($adc); } //加載 include('login_page.php');
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
loggedin.php文件
<?php // 沒有登錄的驗(yàn)證 if (!isset($_COOKIE['user_id'])) { require ('inc/function.php'); //把函數(shù)庫(kù)加載過來 redirect_user(); //跳轉(zhuǎn)到默認(rèn)首頁 } $page_title = '已經(jīng)登錄'; //如果已經(jīng)登錄,設(shè)置頁面標(biāo)題 include('inc/header.php'); //調(diào)用頭部信息 //輸出歡迎信息,并提供退出功能 echo <<< "WELCOME" <h2>登錄成功</h2> <p>歡迎您: {$_COOKIE['user_name']}</p> <p><a href="logout.php">退出</a></p> WELCOME; include('inc/footer.php'); //調(diào)用公共底部
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
logout.php文件
<?php if (!isset($_COOKIE['user_id'])) { require ('inc/function.php'); //跳轉(zhuǎn)到默認(rèn)首頁 redirect_user(); } else { //刪除cookies setcookie('user_id', '', time()-3600); setcookie('user_name','', time()-3600); } //設(shè)置頁面標(biāo)題 $page_title = '已經(jīng)登錄'; include ('inc/header.php'); //輸出退出信息,并提供登錄功能 echo <<< "WELCOME" <h2 style="color:red">退出成功</h2> <p><a href="login.php">登錄</a></p> WELCOME; include ('inc/footer.php');
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
公共文件:
header.php文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title><?php echo isset($page_title) ? $page_title : '默認(rèn)標(biāo)題'; ?></title> </head> <body style="text-align: center;"> <h2>我是公共頭部位置</h2>
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
footer.php
function.php文件
<?php /醫(yī)院 *用戶自定義跳轉(zhuǎn)地址 *@param string $page */ function redirect_user($page='index.php') { //1.默認(rèn)地址 $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); //2.如果有,去掉url右側(cè)的斜線 $url = rtrim($url, '/\\'); //3.添加上當(dāng)前的腳本名稱,默認(rèn)為:index.php $url .= '/'.$page; //4.跳轉(zhuǎn)到指定的目標(biāo)地址 header('Location:'. $url); //5.退出當(dāng)前函數(shù),這是一個(gè)好習(xí)慣,否則后面代碼仍會(huì)執(zhí)行,僅僅不會(huì)在當(dāng)前頁面輸出罷了 exit(); } /醫(yī)院 *驗(yàn)證用戶登錄,需要去數(shù)據(jù)庫(kù)中去驗(yàn)證 * */ //第1個(gè)參數(shù): $adc 數(shù)據(jù)庫(kù)連接文件( connect.php ) //第2個(gè)參數(shù): $email 需要傳入的郵箱 //第3個(gè)參數(shù): $password 需要傳入密碼 function check_login($adc, $email='', $password='') { //1.創(chuàng)建初始化錯(cuò)誤信息數(shù)組 $errors = []; //2.驗(yàn)證郵箱 if(empty($email)) { $errors[] = '郵箱不能為空'; }else { //mysqli_real_escape_string():轉(zhuǎn)義字符串的特殊字符 $e = mysqli_real_escape_string($adc, trim($email)); } //3.驗(yàn)證密碼 if (empty($password)) { $errors[] = '密碼不能為空'; }else { $p = mysqli_real_escape_string($adc, trim($password)); } //4.非空驗(yàn)證通過,即$error數(shù)組為空,執(zhí)行以下語句 if (empty($errors)) { //根據(jù)郵箱與密碼來查詢用戶id與用戶名 //數(shù)據(jù)庫(kù)中的user_id,user_name,user(表名稱),WHERE `email`='$e'(條件),password(密碼) $sql = "SELECT `user_id`,`user_name` FROM `user` WHERE `email`='$e' AND `password`=sha1('$p') "; //執(zhí)行查詢 $res = mysqli_query($adc, $sql); //查詢成功應(yīng)該返回唯一一條記錄 if (mysqli_num_rows($res) == 1) { //將查詢結(jié)果解析到數(shù)組中 $row = mysqli_fetch_array($res, MYSQLI_ASSOC); //返回查詢結(jié)果 // print_r($row);exit(); return [true, $row]; } else { //查詢失敗 $errors[] = '郵箱或密碼不正確,請(qǐng)重新輸入'; } } return [false, $errors]; }
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
connect.php文件
<?php /醫(yī)院 *創(chuàng)建連接參數(shù): 因?yàn)檫B接參數(shù)不會(huì)經(jīng)常變化,所以推薦使用常量 */ define('DB_HOST', 'localhost'); //數(shù)據(jù)庫(kù)地址名稱 define('DB_USER', 'root'); //數(shù)據(jù)庫(kù)用戶名 define('DB_PASS', 'root'); //數(shù)據(jù)庫(kù)密碼 define('DB_NAME', 'PHP'); //數(shù)據(jù)庫(kù)名稱 define('DB_CHAR', 'utf8'); //字符編碼集 //進(jìn)行數(shù)據(jù)庫(kù)鏈接 //連接失敗一定會(huì)返回錯(cuò)誤編號(hào),可以根據(jù)編號(hào)判斷,也可用 $db是否為false進(jìn)行判斷 $adc = mysqli_connect(DB_HOST, DB_USER, DB_PASS); //判斷是否連接成功 //1.獲取 $adc 數(shù)值 if(mysqli_connect_errno($adc)){ //如果連接失敗,給用戶一些提示 echo "連接失敗".mysqli_connect_errno(); } mysqli_select_db($adc, DB_NAME); //選擇要操作的數(shù)據(jù)庫(kù) mysqli_set_charset($adc, DB_CHAR); //設(shè)置客戶端默認(rèn)字符編碼集
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
預(yù)覽效果圖:
用戶登錄界面:
登錄后預(yù)覽圖:
退出預(yù)覽圖:
目前主要是實(shí)現(xiàn)代碼功能,沒有考慮到界面美觀,加強(qiáng)代碼功能練習(xí)
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)