博主信息
白猫警长的博客
博文
59
粉丝
0
评论
1
访问量
25507
积分:0
P豆:418

PHP+MySQL实现用户登录及退出操作——2018年4月23日17时40分

2018年04月23日 17:58:59阅读数:2090博客 / 白猫警长的博客/ mysqli

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

实例

<h2>我是公共底部位置</h2>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


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);	 //设置客户端默认字符编码集

运行实例 »

点击 "运行实例" 按钮查看在线实例


预览效果图:

用户登录界面:

1.png


登录后预览图:

2.png


退出预览图:

3.png

目前主要是实现代码功能,没有考虑到界面美观,加强代码功能练习

批改状态:未批改

老师批语:

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论