在此记录一下阿里百秀项目的教学视频的学习笔记,部分页面被我修改了,某些页面效果会不一样,基本操作是一致的,好记性不如烂笔头,加油叭!!!
由于每一个页面中都有一部分代码(侧边栏和头部)是相同的,分散到各个文件中,不便于维护,所以应该分别抽象到一个公共的文件中。
com / sidebar.php
<div class="aside">
<div class="profile">
<img class="avatar" src="../uploads/avatar.jpg">
<h3 class="name">布头儿h3>
div>
<ul class="nav">
<li class="active">
<a href="index.php"><i class="fa fa-dashboard">i>仪表盘a>
li>
<li>
<a href="#menu-posts" class="collapsed" data-toggle="collapse">
<i class="fa fa-thumb-tack">i>文章<i class="fa fa-angle-right">i>
a>
<ul id="menu-posts" class="collapse">
<li><a href="posts.php">所有文章a>li>
<li><a href="post-add.php">写文章a>li>
<li><a href="categories.php">分类目录a>li>
ul>
li>
<li>
<a href="comments.php"><i class="fa fa-comments">i>评论a>
li>
<li>
<a href="users.php"><i class="fa fa-users">i>用户a>
li>
<li>
<a href="#menu-settings" class="collapsed" data-toggle="collapse">
<i class="fa fa-cogs">i>设置<i class="fa fa-angle-right">i>
a>
<ul id="menu-settings" class="collapse">
<li><a href="nav-menus.php">导航菜单a>li>
<li><a href="slides.php">图片轮播a>li>
<li><a href="settings.php">网站设置a>li>
ul>
li>
ul>
div>
com/nav.php
<nav class="navbar">
<button class="btn btn-default navbar-btn fa fa-bars">button>
<ul class="nav navbar-nav navbar-right">
<li><a href="profile.html"><i class="fa fa-user">i>个人中心a>li>
<li><a href="login.html"><i class="fa fa-sign-out">i>退出a>li>
ul>
nav>
include 'com/sidebar.php' ;?>
<div class="main">
include 'com/nav.php';?>
</div>
由于侧边栏在不同页面时, active class name 出现的位置不尽相同,所以我们需要区分当前 sidebar.php 文件是 在哪个页面中载入的,从而明确焦点状态。
每一个菜单项 li <元素:
<li echo $current_page == 'dashboard' ? ' class="active"' : ''; >>
<a href="index.php"><i class="fa fa‐dashboard"></i>仪表盘</a> </li>
对于有子菜单的菜单项,有一点例外:
<li echo in_array($current_page,$menu_posts) ? 'class="active" ': ''?>>
<a href="#menu-posts" class="collapsed" data-toggle="collapse">
<i class="fa fa-file-text"></i>文章管理<i class="fa fa-angle-right"></i>
</a>
<ul id="menu-posts" class="collapse$current_page, array('posts', 'post-add', 'categories')) ? ' in' : ''; ?>">
<li echo $current_page == 'posts' ? ' class="active"' : ''; ?>><a href="posts.php">所有文章</a></li>
<li echo $current_page == 'post-add' ? ' class="active"' : ''; ?>><a href="post-add.php">写文章</a></li>
<li echo $current_page == 'categories' ? ' class="active"' : ''; ?>><a href="categories.php">分类目录</a></li>
</ul>
</li>
sliderbar.php
//php部分
$current_page = isset($current_page) ? $current_page : '';
//html部分
<div class="aside">
<div class="profile">
<img class="avatar" src="/static/uploads/avatar.jpg">
<h3 class="name">布头儿</h3>
</div>
<ul class="nav">
<li echo $current_page == 'dashboard' ? ' class="active"' : ''; ?>>
<!-- fa fa-dashboard -->
<a href="index.php"><i class="fa fa-list"></i>Home</a>
</li>
$menu_posts = array('posts','post-add','categories');?>
<li echo in_array($current_page,$menu_posts) ? 'class="active" ': ''?>>
<a href="#menu-posts" class="collapsed" data-toggle="collapse">
<i class="fa fa-file-text"></i>文章管理<i class="fa fa-angle-right"></i>
</a>
<ul id="menu-posts" class="collapse$current_page, array('posts', 'post-add', 'categories')) ? ' in' : ''; ?>">
<li echo $current_page == 'posts' ? ' class="active"' : ''; ?>><a href="posts.php">所有文章</a></li>
<li echo $current_page == 'post-add' ? ' class="active"' : ''; ?>><a href="post-add.php">写文章</a></li>
<li echo $current_page == 'categories' ? ' class="active"' : ''; ?>><a href="categories.php">分类目录</a></li>
</ul>
</li>
<li echo $current_page == 'comments' ? ' class="active"' : ''; ?>>
<a href="comments.php"><i class="fa fa-comments"></i>评论管理</a>
</li>
<li echo $current_page == 'users' ? ' class="active"' : ''; ?>>
<a href="users.php"><i class="fa fa-user-circle-o"></i>用户管理</a>
</li>
$menu_settings = array('nav-menus','slides','settings');?>
<li echo in_array($current_page,$menu_settings) ? 'class="active" ': ''?>>
<a href="#menu-settings" class="collapsed" data-toggle="collapse">
<i class="fa fa-wrench"></i>系统设置<i class="fa fa-angle-right"></i>
</a>
<ul id="menu-settings" class="collapse$current_page, array('nav-menus', 'slides', 'settings')) ? ' in' : ''; ?>">
<li echo $current_page == 'nav-menus' ? ' class="active"' : ''; ?>><a href="nav-menus.php">导航菜单</a></li>
<li echo $current_page == 'slides' ? ' class="active"' : ''; ?>><a href="slides.php">图片轮播</a></li>
<li echo $current_page == 'settings' ? ' class="active"' : ''; ?>><a href="settings.php">网站设置</a></li>
</ul>
</li>
</ul>
</div>
comments.php
$current_page='comments';?>
users.php
$current_page = 'users'; ?>
settings.php
$current_page='settings';?>
…
所有需要跳转页面显示高亮状态的页面以此类推都加上 $current_pag 变量
<a class="btn btn-primary btn-block btn-login" href="index.php">登 录a>
<button class="btn btn-primary btn-block btn-login">登录button>
<form class="login-wrap">
<form class="login-wrap" method="post" action="$_SERVER['PHP_SELF']; ?>" >
<input id="email" name="email" type="email" class="form-control" placeholder="邮箱" autofocus>
<input id="password" name="password" type="password" class="form-control" placeholder="密码">
config.php
define('DB_HOST','127.0.0.1');
/**
* 数据库用户名
*/
define('DB_USER','root');
/**
* 数据库密码
*/
define('DB_PASS', '');
/**
* 数据库名称
*/
define('DB_NAME', 'demo');
require_once '../config.php';
if(empty($_POST['email'])){
$GLOBALS['message'] = '请输入邮箱';
return;
}
if(empty($_POST['password'])){
$GLOBALS['message'] = '请输入密码';
return;
}
$email = $_POST['email'];
$password = $_POST['password'];
5.校验邮箱与密码(假数据)
if($email !== '[email protected]'){
$GLOBALS['message'] = '密码与邮箱不匹配';
return;
}
if($password !== '123'){
$GLOBALS['message'] = '密码与邮箱不匹配';
return;
}
<input id="email" name="email" type="email" class="form‐control" value="$_POST['email']) ? $_POST['email'] : ''; ?>" placeholder="邮箱" autofocus>
当验证邮箱与密码不匹配时,页面弹出错误信息
<link rel="stylesheet" href="/static/assets/vendors/bootstrap/css/bootstrap.css">
login.php
if (isset($message)) : ?>
<div class="alert alert-danger">
<strong>错误!</strong> echo $message; ?>
</div>
endif; ?>
<!-- 有错误信息时展示 -->
<!-- <div class="alert alert-danger">
<strong>错误!</strong> 用户名或密码错误!
</div> -->
<link rel="stylesheet" href="/static/assets/vendors/animate/animate.css">
<h1 class="callout-title">Animate.cssh1>
//当选择任意一个动画效果时,会发现中有动画效果的类名添加
栗子:当点击 rubberBand 这个动画时,会在class中添加相应的动画效果的类名
animate__animated animate__rubberBand
<form class="login-wrap $message) ?
'animate__animated animate__rubberBand' : ''; ?>"
method="post" action="$_SERVER['PHP_SELF']; ?>"
novalidate autocomplete="off">
//novalidate取消浏览器自定义的信息提示
//autocomplete="off"取消历史记录客户端自动完成功能提示
// 连接数据库
$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
mysqli_query($conn,'set names utf8');
if(!$conn){
exit('连接数据库失败
');
}
// 根据邮箱查询用户信息,limit 是为了提高查询效率
$query = mysqli_query($conn, "select * from users where email = '{
$email}' limit 1;");
if (!$query) {
$GLOBALS['message'] = '登录失败,请重试!';
return;
}
// 获取登录用户
$user = mysqli_fetch_assoc($query);
if (!$user) {
// 用户名不存在
$GLOBALS['message'] = '邮箱与密码不匹配';
return;
}
// 一般密码是加密存储的
if ($user['password'] !== md5($password)) {
// 密码不正确
$GLOBALS['message'] = '邮箱与密码不匹配';
return;
}
// 将用户信息存放在session中
$_SESSION['current_login_user'] = $user;
header('Location:/admin/');
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
login();
}
require_once '../config.php';
// 判断用户是否登录,防止用户不登陆直接跳转到其他页面
session_start();
function login(){
if(empty($_POST['email'])){
$GLOBALS['message'] = '请输入邮箱';
return;
}
if(empty($_POST['password'])){
$GLOBALS['message'] = '请输入密码';
return;
}
$email = $_POST['email'];
$password = $_POST['password'];
// 连接数据库
$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
//防止页面出现乱码(中文显示带?问号)
mysqli_query($conn,'set names utf8');
if(!$conn){
exit('连接数据库失败
');
}
$query = mysqli_query($conn, "select * from users where email = '{
$email}' limit 1;");
if (!$query) {
$GLOBALS['message'] = '登录失败,请重试!';
return;
}
// 获取登录用户
$user = mysqli_fetch_assoc($query);
if (!$user) {
// 用户名不存在
$GLOBALS['message'] = '邮箱与密码不匹配';
return;
}
// 一般密码是加密存储的
if ($user['password'] !== md5($password)) {
// 密码不正确
$GLOBALS['message'] = '邮箱与密码不匹配';
return;
}
//假数据
// if($email !== '[email protected]'){
// $GLOBALS['message'] = '密码与邮箱不匹配';
// return;
// }
// if($password !== '123'){
// $GLOBALS['message'] = '密码与邮箱不匹配';
// return;
// }
// 将用户信息存放在session中
$_SESSION['current_login_user'] = $user;
header('Location:/admin/');
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 如果是 POST 提交则处理登录业务逻辑
login();
}
session_start();
if(empty($_SESSION['current_login_user'])){
header('Location:/admin/login.php');
}
由于接下来的操作(开发)过程中会有很多需要查询数据库和判断用户是否登录的地方。如果每次都按照最原始的方法去写过于麻烦。 我们应该将重复的地方提取出来,封装一个公共的函数,方便后期调用和维护。
functions.php
require_once 'config.php';
//1. 封装判断用户是否登录信息,防止用户不登陆直接跳转到其他页面
session_start();
function get_userinfo(){
if(empty($_SESSION['current_login_user'])){
header('Location:/admin/login.php');
exit();
}
return $_SESSION['current_login_user'];
}
//2.封装数据库查询,简化每次查询次数麻烦
// 得先引入config.php文件,在文件开头引入
// 封装多条数据
function mysql_all($sql){
$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
// $conn -> query("set names utf8");
mysqli_query($conn,'set names utf8');
if(!$conn){
exit('连接失败');
}
$query = mysqli_query($conn,$sql);
if(!$query){
return false;
}
$result = array();
while ($row = mysqli_fetch_assoc($query)) {
$result[] = $row;
}
mysqli_free_result($query);
mysqli_close($conn);
return $result;
}
// 封装单条数据
function mysql_one ($sql) {
$res = mysql_all($sql);
return isset($res[0]) ? $res[0] : null;
}
// 封装增删改数据
function mysql_change ($sql) {
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
mysqli_query($conn,'set names utf8');
if (!$conn) {
exit('连接失败');
}
$query = mysqli_query($conn, $sql);
if (!$query) {
// 查询失败
return false;
}
// 对于增删修改类的操作都是获取受影响行数
$affected_rows = mysqli_affected_rows($conn);
mysqli_close($conn);
return $affected_rows;
}