这个章节将讲解分层模式对雇员管理系统的系统,首先看下基本的流程图设计:
下面是具体的代码:
1、login.php(参照上节)
2、loginProcess.php
- <?php
- /**
- *
- * @author jsh
- * @version
- */
- require_once 'AdminService.class.php';
- //接受用户数据
- $id=$_POST['id'];
- $password=$_POST['password'];
- //实例化对象
- $adminService=new AdminService();
- if(($name=$adminService->checkAdmin($id, $password)) != ""){
- header("Location:https://192.168.1.110/myphp/manage/empManage.php?name=$name");
- exit();
- } else {
- header("Location:https://192.168.1.110/myphp/manage/login.php?errno=1");
- exit();
- }
- ?>
3、empmain.php(参照上节)
4、empList.php
- <html>
- <head>
- <meta http-equiv="content-tpe" content="text/html;charset-utf-8"/>
- <title>雇员管理列表</title>
- <script type="text/javascript">
- <!--
- function check(){
- return window.confirm("是否要删除用户");
- }
- //-->
- </script>
- </head>
- <?php
- include_once 'EmpService.class.php';
- include_once 'FenyePage.class.php';
- /*
- $pageNow :显示第几页:用户输入
- $pageCount:共有几页[]
- $rowCount:共有多少条记录[数据库获取]
- $pagesize:每页显示几条记录[人为定义]
- */
- if(!empty($_GET['flag'])){
- $id=$_GET['Id'];
- $empservice=new empService();
- $empservice->delUserById($id);
- }
- if(!empty($_GET['pageNow'])){
- $pageNow = $_GET['pageNow'];
- } else {
- $pageNow = 1;
- }
- $fenyePage=new fenyepage();
- $fenyePage->pageSize = 3;
- $fenyePage->pageNow = $pageNow;
- $fenyePage->page_num=3;
- //获取共有多少记录
- $empservice=new empService();
- $pageCount=$empservice->getFenYePageInfo($fenyePage);
- echo "<h1>雇员管理系统</h1>";
- echo "<table width='700px' border='1px'>";
- echo "<tr><th>Id</th><th>Name</th><th>Grade</th><th>Email</th><th>Salary</th><th>删除用户</th><th>修改用户</th></tr>";
- for($i=0;$i<count($fenyePage->res_array);$i++){
- $row=$fenyePage->res_array[$i];
- echo "<tr><th>{$row['Id']}</th><th>{$row['Name']}</th><th>{$row['Grade']}</th>".
- "<th>{$row['Email']}</th><th>{$row['Salary']}</th><th><a οnclick='return check()' href='empList.php?flag=1&Id={$row['Id']}'>删除用户</a></th>".
- "<th><a href='empList.php?pageNow={$row['Id']}'>修改用户</a></th></tr>";
- }
- echo "</table>";
- echo $fenyePage->navigation_bars;
- /* //打印上一页下一页
- if($fenyePage->pageNow>1){
- $prepage = $fenyePage->pageNow - 1;
- echo "<a href='empList.php?pageNow=$prepage'>上一页</a>";
- }
- if($fenyePage->pageNow<$fenyePage->pageCount){
- $nextpage = $fenyePage->pageNow + 1;
- echo "<a href='empList.php?pageNow=$nextpage'>下一页</a>";
- }
- //翻页
- $start=floor(($fenyePage->pageNow - 1)/$fenyePage->page_num) * $fenyePage->page_num + 1;
- $index = $start;
- for(;$start < $fenyePage->pageCount && $start<$index + $fenyePage->page_num;$start++){
- echo "<a href='empList.php?pageNow=$start'>[$start]</a>";
- }
- //显示当前页和共有多少页
- echo " 当前页{$fenyePage->pageNow}/共{$fenyePage->pageCount}页";
- */
- ?>
- <!-- 指定跳转到某页 -->
- <form action="empList.php" method="get">
- 跳转到:<input type="text" name="pageNow"/>
- <input type="submit" value="GO"/>
- </form>
- </html>
5、AdminService.class.php
- <?php
- //该类是一个业务逻辑处理类,
- require_once 'SqlHelper.class.php';
- class AdminService {
- //提供一个验证用户是否合法的方法
- public function checkAdmin($id,$password){
- $sql="select * from admin where Id=$id";
- //创建一个SqlHelper对象
- $sqlHelper=new SqlHelper();
- //执行查询命令
- $res=$sqlHelper->execute_dql($sql);
- if($row=mysql_fetch_assoc($res)){
- if(md5($password) == $row['Password']){
- return $row['Name'];
- }
- }
- //释放资源
- mysql_free_result($res);
- //关闭链接
- $sqlHelper->close_connect();
- return "";
- }
- }
- ?>
6、empService.class.php
- <?php
- require_once 'SqlHelper.class.php';
- class empService {
- //一个函数可以获得多少页
- function getPageCount($pagesize){
- //需要查询$rowcount
- $sql="select count(Id) from emp";
- $sqlHelper=new SqlHelper();
- $result=$sqlHelper->execute_dql($sql);
- if($row=mysql_fetch_row($result)){
- $pageCount=ceil($row[0]/$pagesize);
- }
- //释放资源
- mysql_free_result($result);
- //关闭连接
- $sqlHelper->close_connect();
- return $pageCount;
- }
- //获得当前页的雇员信息
- function getEmpListByPage($pageNow,$pageSize){
- $sql="select * from emp limit ".($pageNow-1)*$pageSize.",$pageSize";
- $sqlHelper=new SqlHelper();
- $res=$sqlHelper->execute_dql2($sql);
- //关闭连接
- $sqlHelper->close_connect();
- return $res;
- }
- //分页
- public function getFenYePageInfo($fenyePage){
- $sqlHelper=new SqlHelper();
- $sql1="select * from emp limit ".($fenyePage->pageNow - 1)*$fenyePage->pageSize.",$fenyePage->pageSize";
- $sql2="select count(Id) from emp";
- $php_name="empList.php";
- $sqlHelper->exectue_dql_fenye($sql1, $sql2, $fenyePage,$php_name);
- //关闭链接
- $sqlHelper->close_connect();
- return $fenyePage;
- }
- //删除用户
- public function delUserById($id){
- $sql="delete from emp where Id='$id'";
- $sqlHelper = new SqlHelper();
- $res=$sqlHelper->execute_dml($sql);
- return $res;
- }
- }
- ?>
7、SqlHelper.class.php
- <?php
- //这是一个工具类,作用是完成对数据库的基本操作
- class SqlHelper {
- public $conn;
- public $dbname="manage";
- public $usename="root";
- public $password="";
- public $host="192.168.1.110:3306";
- //构造方法,连接及选择数据库
- public function __construct(){
- $this->conn=mysql_connect($this->host,$this->usename,$this->password);
- if(!$this->conn){
- die("连接失败".mysql_error());
- }
- mysql_select_db($this->dbname,$this->conn);
- }
- //执行dql语句 查询
- public function execute_dql($sql){
- $res=mysql_query($sql,$this->conn) or die("执行失败".mysql_error());
- return $res;
- }
- //省去资源释放的
- public function execute_dql2($sql){
- $res=mysql_query($sql,$this->conn) or die("执行失败".mysql_error());
- $arr=array();
- $i=0;
- while ($row=mysql_fetch_assoc($res)){
- $arr[$i++]=$row;
- }
- //释放资源
- mysql_free_result($res);
- return $arr;
- }
- /* 考虑分页情况的查询
- $sql1="select count(Id) from 表名";
- $sql2="select * from 表名 limit x,y"; */
- public function exectue_dql_fenye($sql1,$sql2,&$fenyePage,$php_name){
- $navigation_bars="";
- $res=mysql_query($sql1,$this->conn) or die("执行失败".mysql_error());
- $arr=array();
- $i=0;
- while ($row=mysql_fetch_assoc($res)){
- $arr[$i++]=$row;
- }
- //释放资源
- mysql_free_result($res);
- //获得数据库共有多少行
- $res=mysql_query($sql2,$this->conn) or die(mysql_errno());
- if($row=mysql_fetch_row($res)){
- $fenyePage->row_Count=$row[0];
- }
- $fenyePage->res_array=$arr;
- //共有多少页
- $fenyePage->pageCount = ceil($fenyePage->row_Count/$fenyePage->pageSize);
- //释放资源
- mysql_free_result($res);
- if($fenyePage->pageNow>1){
- $prepage = $fenyePage->pageNow - 1;
- $navigation_bars="<a href='$php_name?pageNow=$prepage'>上一页</a>";
- }
- if($fenyePage->pageNow<$fenyePage->pageCount){
- $nextpage = $fenyePage->pageNow + 1;
- $navigation_bars .= "<a href='$php_name?pageNow=$nextpage'>下一页</a>";
- }
- //翻页
- $start=floor(($fenyePage->pageNow - 1)/$fenyePage->page_num) * $fenyePage->page_num + 1;
- $index = $start;
- if($fenyePage->pageNow > $fenyePage->page_num){
- $navigation_bars .="<a href='$php_name?pageNow=".($start-1)."'> << </a>";
- }
- for(;$start < $fenyePage->pageCount && $start<$index + $fenyePage->page_num;$start++){
- $navigation_bars .= "<a href='$php_name?pageNow=$start'>[$start]</a>";
- }
- $navigation_bars .="<a href='$php_name?pageNow=".($start+1)."'> << </a>";
- //显示当前页和共有多少页
- $navigation_bars .= " 当前页{$fenyePage->pageNow}/共{$fenyePage->pageCount}页";
- $fenyePage->navigation_bars=$navigation_bars;
- }
- //执行DML语句 更新 删除 添加
- public function execute_dml($sql){
- $b=mysql_query($sql,$this->conn);
- if(!$b){
- return 0;//失败
- } else {
- if(mysql_affected_rows($this->conn)){
- return 1;//执行成功
- }else{
- return 2;//表示没有行发生变化
- }
- }
- }
- //关闭连接的方法
- public function close_connect(){
- if($this->conn){
- mysql_close($this->conn);
- }
- }
- }
- ?>
- <?php
- class fenyepage{
- public $pageSize; //每页显示的行数
- public $pageNow; //当前页
- public $pageCount; //共有多少页。计算得到
- public $res_array;//显示数据,数据库获得
- public $row_Count; //共有多少行,数据库获得
- public $page_num; //翻页数
- public $navigation_bars;//导航条
- }
- ?>
下面展示的是一个主要的页面:
MVC 的基本概念:
1、 MVC是一种软件的设计模式-》套路
2、 解释下每个字母的含义
M(Model模型:处理业务逻辑 比如 各种类
V (View 视图、界面:PHP编写的
C (Controller 控制器,主要作用是接受用户的请求,并调用某个方法,完成任务,跳转到下一个界面
3、 核心思想
强制程序员在编写项目的时候,把数据的输入、处理、输出分开。
Mvc 的处理过程:
1、 首先控制器接受用户的请求,并决定应该调用那个模型来进行处理
2、 然后调用模型来处理用户的请求并返回数据
3、 最后控制器用相应的视图显示模型返回的数据,并通过浏览器呈现给用户。