智能文章系统实战-PHP现实的文章增删改查,MVC架构(2)

admin 发布于:2018-6-15 13:14  有 2344 人浏览,获得评论 0 条 标签: php MVC 

1. 核心公共文件 inc.php

<?php
@session_start();
header("Content-Type:text/html;charset=utf-8");
error_reporting(E_ALL & ~E_NOTICE);

//定义常量和变量


//定义方法
//输出JSON
function showJson($errCode=0,$errMsg='',$data=array())
{
	echo json_encode(array('errCode'=>$errCode,'errMsg'=>$errMsg,'data'=>$data));
}



//URL跳转
function gotoURL($url='',$msg='',$sec=2)
{
	if(!empty($url))
	{
		if($sec>0)
		{
			header("refresh:$sec;url={$url}");
		}
		else
		{
			header("Location:{$url}");
		}
		
	}
	
	if(!empty($msg))
	{
		print($msg);
	}
	
}

//返回在预定义字符之前添加反斜杠的字符串,该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串
function addslashesObj($data)
{
	if(get_magic_quotes_gpc ()==0)
	{
		return $data;
	}
	else
	{
		if(is_array($data))
		{
            foreach($data as $k=>$v)
			{
                $data[$k]=addslashesObj($v);
            }
        }
		else
		{
            $data=addslashes($data);
        }
		return $data;
	}
}

//把预定义的字符转换为 HTML 实体
function htmlspecialcharsObj($data)
{
	
	if(is_array($data))
	{
		foreach($data as $k=>$v)
		{
			$data[$k]=htmlspecialcharsObj($v);
		}
	}
	else
	{
		$data=addslashes($data);
	}
	return $data;
	
}

//简易模板解析
function parseTemplate($fileName)
{
	global $TEMPLATE;
	include $_SERVER['DOCUMENT_ROOT'].$fileName;
}





//数据库
$DBConfig=array(
'host'=>'127.0.0.1',  //数据库主机IP
'user'=>'root',       //数据库用户名
'password'=>'',		  //数据库密码
'dbname'=>'article',  //数据库名称
'dbcharset'=>'UTF8',  //数据库字符编码
);

//采用mysqli方式连接数据库
$db = new mysqli($DBConfig['host'],$DBConfig['user'],$DBConfig['password'],$DBConfig['dbname']);
$db->query("SET NAMES {$DBConfig['dbcharset']}");

 

 

2.文章的增删改查(逻辑模板分离) 逻辑部分 admin.php

 

<?php
require_once('./inc.php');

//文章的增删改查


//验证登录
if(!($_SERVER['PHP_AUTH_USER']=='admin' && $_SERVER['PHP_AUTH_PW']='123456'))
{
	echo '密码错误';
	header('HTTP/1.1 401 Unauthorized');
	header('WWW-Authenticate: Basic realm="Auth"');
	exit();
}
$action=addslashesObj($_REQUEST['action']);
switch($action)
{
	//文章增加模板
	case 'add':
	parseTemplate('/views/admin/article/add.php');
	break;
	
	//文章增加处理
	case 'addOK':
	//获取参数
	$title=addslashesObj($_REQUEST['title']);
	$content=addslashesObj($_REQUEST['content']);
	$times=time();
	
	//插入数据库
	$sql="INSERT INTO article SET `title`='".$title."',`content`='".$content."',`times`='".$times."'";
	$ret=$db->query($sql);
	if($ret)
	{
		gotoURL('admin.php',"发布成功");
	}
	else
	{
		gotoURL('admin.php',"发布失败");
	}
	break;
	
	
	//文章编辑模板
	case 'edit':
	//获取参数
	$id=intval($_REQUEST['id']);
	$page=intval($_REQUEST['page']);
	
	//获取数据
	$sql="SELECT * FROM article WHERE id='".$id."'";
	$result=$db->query($sql);
	if($result && $info=$result->fetch_array())
	{
		$TEMPLATE['info']=$info;
		$TEMPLATE['page']=$page;
		parseTemplate('/views/admin/article/edit.php');
	}
	else
	{
		gotoURL('admin.php',"信息不存在");
	}
	break;
	
	
	
	
	//文章编辑处理
	case 'editOK':
	//获取参数
	$id=intval($_REQUEST['id']);
	$page=intval($_REQUEST['page']);
	$title=addslashesObj($_REQUEST['title']);
	$content=addslashesObj($_REQUEST['content']);
	$update_time=time();
	
	//插入数据库
	$sql="UPDATE article SET `title`='".$title."',`content`='".$content."',`update_time`='".$update_time."' WHERE id='".$id."'";
	$ret=$db->query($sql);
	if($ret)
	{
		gotoURL('admin.php?action=list&page='.$page,"修改成功");
	}
	else
	{
		gotoURL('admin.php?action=list&page='.$page,"修改失败");
	}
	break;
	
	
	//文章删除处理
	case 'deleteOK':
	//获取参数
	$id=intval($_REQUEST['id']);
	$page=intval($_REQUEST['page']);
	
	
	//插入数据库
	$sql="DELETE FROM article WHERE id='".$id."'";
	$ret=$db->query($sql);
	if($ret)
	{
		gotoURL('admin.php?action=list&page='.$page,"删除成功");
	}
	else
	{
		gotoURL('admin.php?action=list&page='.$page,"删除失败");
	}
	break;
	
	//文章查看处理
	case 'show':
	//获取参数
	$id=intval($_REQUEST['id']);
	
	//插入数据库
	$sql="SELECT * FROM article WHERE id='".$id."'";
	$result=$db->query($sql);
	if($result && $info=$result->fetch_array())
	{
		$TEMPLATE['info']=$info;
		parseTemplate('/views/admin/article/show.php');
	}
	else
	{
		gotoURL('admin.php',"信息不存在");
	}
	break;
	
	
	
	//文章列表
	default:
	
	$sql="SELECT count(*) as num FROM article";
	$result=$db->query($sql);
	$info=$result->fetch_array();
	$allnum=intval($info['num']);
	
	$size=10;
	$page=intval($_REQUEST['page']);
	
	$maxpage=ceil($allnum/$size);
	if($page>$maxpage)
	{
		$page=$maxpage;
	}
	if($page<=0)
	{
		$page=1;
	}
	
	
	
	$offset=($page-1)*$size;
	
	$datas=array();
	$sql="SELECT * FROM article ORDER BY id DESC LIMIT {$offset},{$size}";
	$result=$db->query($sql);
	while($result && $info=$result->fetch_array())
	{
		$datas[]=$info;
	}
	$TEMPLATE['list']=$datas;
	$TEMPLATE['page']=$page;
	parseTemplate('/views/admin/article/list.php');
	break;
	
}



 

 

3.模板(仅仅是列表部分,其它模板自行实现)  文件名  ./views/admin/article/list.php

 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>智能文章管理平台</title>
	<link href="/css/bootstrap.3.0.0.united.css" rel="stylesheet">
	<script src="/js/jquery-1.11.2.min.js"></script>
    <script src="/js/bootstrap.min.js"></script>
</head>
<body>
<p>
 <a class="btn btn-sm btn-primary" href="?action=add" >添加管理员</a>
</p>

<table class="table table-striped table-hover ">
  <thead>
    <tr>
      <th>ID</th>
      <th>标题</th>
      <th>操作</th>
    </tr>
  </thead>
  <tbody>

<?php
foreach($TEMPLATE['list'] as $key =>$row)
{
?>
            <tr>
            <td><?=$row['id']?></td>
            <td><?=$row['title']?></td>
             <td>
                <a href="?action=edit&id=<?=$row['id']?>">编辑</a>
                <a href="?action=show&id=<?=$row['id']?>">查看</a>
                <a class="mal10" href="javascript:confirmDelete('<?=$row['id']?>');">删除</a>
            </td>

            </tr>
<?php
}
?>            
         
                    
        </tbody>
</table>

<nav  align="right"><ul class="pagination"><li><a href="?action=list&page=<?=$TEMPLATE['page']-1?>">首页</a></li><li><a href="?action=list&page=<?=$TEMPLATE['page']-1?>">«</a></li><li class="active"><a href="javascript:void(0)"><?=$TEMPLATE['page']?></a></li><li><a href="?action=list&page=<?=$TEMPLATE['page']+1?>">»</a></li></ul></nav>

</body>
</html>
<script>
    function confirmDelete(id) 
	{
	   if(confirm("确定要删除吗?")==true)
	   {
		   location.href='?action=deleteOK&id='+id;
	   }  
    }
</script>

 

 

4. 总结

最简单的MVC架构.

按照最小的系统设计,仅仅实现了管理后台的增删该查。以及一个列表的模板页,其它的模板页自行解决。 同时在安全,架构等方面没做过多设计。如表单输入验证,安全验证,数据库读写分离,文件上传等未实现。权限控制仅仅用401权限验证实现。 实现可一个最简单的模板分离。