<div class="row cl">
<label class="form-label col-xs-3"><i class="Hui-iconfont"></i></label>
<div class="formControls col-xs-8">
<input id="" name="username" type="text" placeholder="账户" class="input-text size-L">
</div>
</div>
<div class="row cl">
<label class="form-label col-xs-3"><i class="Hui-iconfont"></i></label>
<div class="formControls col-xs-8">
<input id="" name="password" type="password" placeholder="密码" class="input-text size-L">
</div>
</div>
<div class="row cl">
<div class="formControls col-xs-8 col-xs-offset-3">
<label for="online">
<input type="checkbox" name="online" id="online" value="1">
使我保持登录状态</label>
</div>
</div>

image.png
require_once('init.php');
$code = $_POST['code'];
//后台登录首页index.html传递过来的四个数据:
//username、password、online(保持登录状态)、$code(验证码)
$username = $_POST['username'];
$password = $_POST['password'];
$online = $_POST['online'];
//在这里要进行判断
//账号密码验证码不能为空,但是保持登录状态可以不选
if(empty($username) || empty($password)){
show_message('账号或密码为空', 'index.php?m=admin&c=index');
}
if(empty($code)){
show_message('验证码为空', 'index.php?m=admin&c=index');
}
//将 $code接收到的用户输入验证码和系统随机出来的验证码$_SESSION['verify']进行比较:
if(strtolower($code) != $_SESSION['verify']){
//如果用户输入错误,就提示验证码错误并且刷新验证码
//如果输入正确,不做任何反应
show_message('验证码错误', 'index.php?m=admin&c=index');
}
//如果用户在后台登录页面输入信息错误,则提示并再次进入此页面
//参数是在后台登录界面login.php进行逻辑判断时传过来的
function show_message($msg, $url){
die("<script> alert('$msg'); location.href=' $url'; </script>");
}
跳转页面可以这样直接写url,也可以用
history.back()回到上一页面
还可以用history.go(1);正数就是前进多少个页面,负数就是向后退多少个页面
history.go(-1);就相当于history.back()
//如果用户在后台登录页面输入信息错误,则提示并再次进入此页面
//参数是在后台登录界面login.php进行逻辑判断时传过来的
function show_message($msg, $url=null){
if(!empty($url)){
die("<script> alert('$msg'); location.href=' $url'; </script>");
}else{
die("<script> alert('$msg'); history.go(-1); </script>");
}
}
error_reporting(E_ALL ^ E_NOTICE);

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png
INSERT into admin (username, password, nickname)values ('admin', md5('123'), '超人');

image.png
//引入之前写好的数据库查询函数库
require_once('includes/db.php');
//验证账号密码是否正确
//验证账号是否存在 -> 验证密码是否正确,验证完成后登陆成功跳转到后台首页
//这里需要建库,要验证的数据都来自数据库
//使用之前的1803库,在这个库下建表admin
//将之前封装的查询函数库db.php复制到includes(包含的意思)文件夹中来
$sql = "select * from admin where username='$username' limit 1";
$row = get_row($sql);
print_r($row);

image.png
//验证账号密码是否正确
//验证账号是否存在 -> 验证密码是否正确,验证完成后登陆成功跳转到后台首页
//这里需要建库,要验证的数据都来自数据库
//使用之前的1803库,在这个库下建表admin
//将之前封装的查询函数库db.php复制到includes(包含的意思)文件夹中来
$sql = "select * from admin where username='$username' limit 1";
$row = get_row($sql);
//验证账号是否正确,如果为空,就弹出提示信息
if(empty($row)){
show_message('账号不存在', 'index.php?m=admin&c=index');
}
//验证密码,把登录界面接收到的密码和之前的密码进行对比
//需要两者都是经过md5处理的才行
if($row['password'] != md5($password)){
show_message('密码错误', 'index.php?m=admin&c=index');
}
echo 'OK';
header('location:index.php?m=admin&c=main');
上面的echo 'OK';使用于测试,实际写的话要用header跳转到后台首页去

image.png
<?php
require_once('init.php');
$smarty->display('main.html');
?>
<{$smarty.const.__STATIC__}>访问自定义常量

image.png

image.png
target: 页面打开方式
_self(缺省) 在本页面打开
_blank 在新窗口打开页面
framename 在iframe窗口中打开
_top 在顶级窗口打开
_parent 在父窗口(上一级窗口)打开(如果在一个内嵌的窗口中点击链接,那么打开的新窗口会显示在外面这个父窗口中)
<?php
//检测是否通过入口访问
require_once('init.php');
$smarty->display('welcome.html');//调用welcome页面
?>
$_SESSION['admin'] = $row;
ob_clean();
header("content-type: image/png;");
//封装格式化输出函数:输出内容:登录管理员账号的信息
function dump($data){
echo '<pre>';
print_r($data);
echo '</pre>';
}
dump($_SESSION['admin']);

image.png
main.php页面:
<?php
require_once('init.php');
//分配admin到main.html,在main.html页面通过<{$admin.nickname}>接收
$smarty->assign('admin', $_SESSION['admin']);
$smarty->display('main.html');//通过模板显示main.html
?>
<li><{$admin.nickname}></li>

image.png

image.png
<li><{$smarty.session.admin.nickname}></li>

image.png
<a href="#" class="dropDown_A"><{$smarty.session.admin.username}> <i class="Hui-iconfont"></i></a>
//修改登录时间、次数,ip
$login_time= date('Y-m-d H:i:s');
//获取客户端 IP
//$_SERVER 超全局数组 可以拿到用户的服务器信息(IPO地址、登陆时间等)
//SERVER_ADDR就是这个超全局数组的IP的索引。用它可以获取到IP地址
$login_ip = $_SERVER['SERVER_ADDR'];
$sql = "update admin set login_time='$login_time', login_ip='$login_ip', login_num=login_num+1 where id={$row['id']}";
//execute返回上面受影响的sql语句中的参数
execute($sql);
<p class="f-20 text-success">欢迎使用H-ui.admin <span class="f-14">v3.1</span>后台模版!</p>
<p>登录次数:<{$smarty.session.admin.login_num+1}> </p>
<{if $smarty.session.admin.login_time > 0}>
<p>上次登录IP:<{$smarty.session.admin.login_ip}> 上次登录时间:<{$smarty.session.admin.login_time}></p>
<{else}>
<p>上次登录时间:第一次登陆</p>
<{/if}>

image.png
//判断是否已经登录,如果已经登录,就跳转到后台主页
if( !empty($_SESSION['admin'])){
header("location:index.php?m=admin&c=main");
}
$not_auth_login = ['index', 'login', 'verify'];
//登陆需要验证,这就需要先定义哪些页面不需要验证的,下面这三个页面就是不要验证的
//in_array 要在数组 $not_auth_login 中搜索的值 $c,
//下面代码表示,如果$c不在数组中($c='文件名' url的最后一项)
//如:http://yixing666.com/index.php?m=admin&c=main
//如果$c不在数组中,且session为空的话,就没登陆,就跳转到登录页面
$not_auth_login = ['index', 'login', 'verify'];
if( !in_array($c, $not_auth_login) && empty($_SESSION['admin'])){
header('location:idnex.php?m=admin&c=index');die();
}
<li><a href="index.php?m=admin&c=logout">退出</a></li>
//不管是什么,只要新建一个文件,就先包含初始化文件进来
require_once('init.php');
//退出功能逻辑: 清理掉session并跳转到登录界面
//unset() 销毁指定的变量
unset($_SESSION['admin']);
header("location:index.php?m=admin&c=index");

image.png