PHP与MYSQL实现用户登录与登录后的退出操作
index.php文件
实例
<?php $page_title = '首页'; // include('inc/header.php'); //首页登录页面 include('login_page.php'); //导入公共底部文件 // include ('inc/footer.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
login_page.php文件
实例
<?php /医院 *用户登录页面 *此页面只做2件事 *1.输出错误(比如邮箱错误,密码错误等) *2.输出登录表单 */ $page_title = '用户登录'; //导入公共头部文件 include('inc/header.php'); //输出错误信息 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="请输入登录邮箱"> </p> <p> <label for="password">密码:</label> <input type="password" name="password" id="password" value="<?php echo isset($_POST['password'])?$_POST['password']:'' ?>" placeholder="请输入登录密码"> </p> <p align="center"> <button type="sublim" name="sublim" id="sublim">登录</button> </p> </form> </div> <?php //导入公共底部文件 include('inc/footer.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
login.php文件
实例
<?php /医院 *前端代码写完后,点击登录按钮后把信息提交到login.php文件, *下面实现登录验证 * *思路: *函数将完成以下2个工作: *1.验证用户的邮箱和密码 *2.跳转到指定页面 * */ //检测请求类型是否为POST if($_SERVER['REQUEST_METHOD'] == 'POST') { // 1.加载公共函数库 require ('inc/function.php'); // 2.连接数据库 require ('inc/connect.php'); //3.验证登录 list($check, $data)= check_login($adc, $_POST['email'], $_POST['password']); //4.验证通过 if($check) { //设置cookies setcookie('user_id', $data['user_id']); setcookie('user_name', $data['user_name']); //跳转页面 redirect_user('loggedin.php'); } else { //验证失败 $errors = $data; } //关闭数据库连接 mysqli_close($adc); } //加载 include('login_page.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
loggedin.php文件
实例
<?php // 没有登录的验证 if (!isset($_COOKIE['user_id'])) { require ('inc/function.php'); //把函数库加载过来 redirect_user(); //跳转到默认首页 } $page_title = '已经登录'; //如果已经登录,设置页面标题 include('inc/header.php'); //调用头部信息 //输出欢迎信息,并提供退出功能 echo <<< "WELCOME" <h2>登录成功</h2> <p>欢迎您: {$_COOKIE['user_name']}</p> <p><a href="logout.php">退出</a></p> WELCOME; include('inc/footer.php'); //调用公共底部
运行实例 »
点击 "运行实例" 按钮查看在线实例
logout.php文件
实例
<?php if (!isset($_COOKIE['user_id'])) { require ('inc/function.php'); //跳转到默认首页 redirect_user(); } else { //删除cookies setcookie('user_id', '', time()-3600); setcookie('user_name','', time()-3600); } //设置页面标题 $page_title = '已经登录'; include ('inc/header.php'); //输出退出信息,并提供登录功能 echo <<< "WELCOME" <h2 style="color:red">退出成功</h2> <p><a href="login.php">登录</a></p> WELCOME; include ('inc/footer.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
公共文件:
header.php文件
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title><?php echo isset($page_title) ? $page_title : '默认标题'; ?></title> </head> <body style="text-align: center;"> <h2>我是公共头部位置</h2>
运行实例 »
点击 "运行实例" 按钮查看在线实例
footer.php
function.php文件
实例
<?php /医院 *用户自定义跳转地址 *@param string $page */ function redirect_user($page='index.php') { //1.默认地址 $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); //2.如果有,去掉url右侧的斜线 $url = rtrim($url, '/\\'); //3.添加上当前的脚本名称,默认为:index.php $url .= '/'.$page; //4.跳转到指定的目标地址 header('Location:'. $url); //5.退出当前函数,这是一个好习惯,否则后面代码仍会执行,仅仅不会在当前页面输出罢了 exit(); } /医院 *验证用户登录,需要去数据库中去验证 * */ //第1个参数: $adc 数据库连接文件( connect.php ) //第2个参数: $email 需要传入的邮箱 //第3个参数: $password 需要传入密码 function check_login($adc, $email='', $password='') { //1.创建初始化错误信息数组 $errors = []; //2.验证邮箱 if(empty($email)) { $errors[] = '邮箱不能为空'; }else { //mysqli_real_escape_string():转义字符串的特殊字符 $e = mysqli_real_escape_string($adc, trim($email)); } //3.验证密码 if (empty($password)) { $errors[] = '密码不能为空'; }else { $p = mysqli_real_escape_string($adc, trim($password)); } //4.非空验证通过,即$error数组为空,执行以下语句 if (empty($errors)) { //根据邮箱与密码来查询用户id与用户名 //数据库中的user_id,user_name,user(表名称),WHERE `email`='$e'(条件),password(密码) $sql = "SELECT `user_id`,`user_name` FROM `user` WHERE `email`='$e' AND `password`=sha1('$p') "; //执行查询 $res = mysqli_query($adc, $sql); //查询成功应该返回唯一一条记录 if (mysqli_num_rows($res) == 1) { //将查询结果解析到数组中 $row = mysqli_fetch_array($res, MYSQLI_ASSOC); //返回查询结果 // print_r($row);exit(); return [true, $row]; } else { //查询失败 $errors[] = '邮箱或密码不正确,请重新输入'; } } return [false, $errors]; }
运行实例 »
点击 "运行实例" 按钮查看在线实例
connect.php文件
实例
<?php /医院 *创建连接参数: 因为连接参数不会经常变化,所以推荐使用常量 */ define('DB_HOST', 'localhost'); //数据库地址名称 define('DB_USER', 'root'); //数据库用户名 define('DB_PASS', 'root'); //数据库密码 define('DB_NAME', 'PHP'); //数据库名称 define('DB_CHAR', 'utf8'); //字符编码集 //进行数据库链接 //连接失败一定会返回错误编号,可以根据编号判断,也可用 $db是否为false进行判断 $adc = mysqli_connect(DB_HOST, DB_USER, DB_PASS); //判断是否连接成功 //1.获取 $adc 数值 if(mysqli_connect_errno($adc)){ //如果连接失败,给用户一些提示 echo "连接失败".mysqli_connect_errno(); } mysqli_select_db($adc, DB_NAME); //选择要操作的数据库 mysqli_set_charset($adc, DB_CHAR); //设置客户端默认字符编码集
运行实例 »
点击 "运行实例" 按钮查看在线实例
预览效果图:
用户登录界面:
登录后预览图:
退出预览图:
目前主要是实现代码功能,没有考虑到界面美观,加强代码功能练习