php MVC

Posted h0000dh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php MVC相关的知识,希望对你有一定的参考价值。

-- 比赛
create table `match` (
m_id int unsigned primary key auto_increment,
t1_id int unsigned comment \'球队一ID\',
t2_id int unsigned comment \'球队二ID\',
t1_score int comment \'球队一进球\',
t2_score int comment \'球队二进球\',
m_time int comment \'比赛时间 时间戳\'
)charset=utf8;
insert into `match` values 
(null, 3, 4, 1, 2, unix_timestamp(\'2015-01-31 17:00:00\')),
(null, 1, 2, 2, 3, unix_timestamp(\'2015-01-30 17:00:00\')),
(null, 4, 2, 2, 0, unix_timestamp(\'2015-01-27 17:00:00\')),
(null, 3, 1, 2, 0, unix_timestamp(\'2015-01-26 17:00:00\')),
(null, 5, 4, 0, 2, unix_timestamp(\'2015-01-22 18:30:00\')),
(null, 8, 5, 0, 1, unix_timestamp(\'2015-01-10 17:00:00\')),
(null, 5, 7, 2, 1, unix_timestamp(\'2015-01-14 17:00:00\')),
(null, 5, 6, 2, 1, unix_timestamp(\'2015-01-18 17:00:00\'));

-- 球队
create table `team` (
t_id int unsigned primary key auto_increment,
t_name varchar(20)
)charset=utf8;
insert into `team` values 
(1, \'伊拉克\'), (2, \'阿联酋\'), (3, \'韩国\'), (4, \'澳大利亚\'), (5, \'中国\'), (6, \'朝鲜\'), (7, \'乌兹别克斯坦\'), (8, \'沙特\');

-- 运动员
create table `player` (
p_id int unsigned primary key auto_increment,
p_name varchar(20),
t_id int unsigned comment \'球队ID\'
)charset=utf8;
insert into `player` values 
(null, \'张琳芃\', 5),(null, \'郜林\', 5),(null, \'孙可\', 5),(null, \'王大雷\', 5),(null, \'吴曦\', 5) ,(null, \'于海\', 5);


select * from `match` ;

select t1.t_name, m.t1_score, m.t2_score, m.t2_id, m.m_time from `match` as m left join `team` as t1 ON m.t1_id = t1.t_id;

select t1.t_name, m.t1_score, m.t2_score, t2.t_name, m.m_time from `match` as m left join `team` as t1 ON m.t1_id = t1.t_id  left join `team` as t2 ON m.t2_id=t2.t_id;


select t1.t_name as t1_name, m.t1_score, m.t2_score, t2.t_name as t2_name, m.m_time from `match` as m left join `team` as t1 ON m.t1_id = t1.t_id  left join `team` as t2 ON m.t2_id=t2.t_id;

 

./Factory.class.php

 

<?php

/**
* 项目中的工厂类
*/
class Factory {
/**
* 生成模型的单例对象
*
* @param $model_name string
* @return object
*/
public static function M($model_name) {
static $model_list = array();//存储已经实例化好的模型对象的列表,下标模型名,值模型对象
//判断当前模型是否已经实例化

if(!isset($model_list[$model_name])) {
//没有实例化过
require \'./\' . $model_name . \'.class.php\';
$model_list[$model_name] = new $model_name;//可变标志符,可变类
}

return $model_list[$model_name];

}
}

 

 

./match_list_c.php

<?php
# 比赛列表
date_default_timezone_set(\'PRC\');
header(\'Content-Type: text/html; charset=utf-8\');

// 实例化相应的模型类对象,调用某个方法,实现固定功能
// require \'./MatchModel.class.php\';
// $m_match = new MatchModel();
//通过工厂获得对象
require \'./Factory.class.php\';
$m_match = Factory::M(\'MatchModel\');
$match_list = $m_match->getList();
// $m_match2 = Factory::M(\'MatchModel\');

// 载入负责显示的html文件
require \'./template/match_list_v.html\';

 

 

./MatchModel.class.php

<?php
/**
* match表的操作模型类
*/
require_once \'./Model.class.php\';
class MatchModel extends Model {
/**
* 获得所有的比赛列表
*/
public function getList() {
//获得比赛列表数据
$sql = "select t1.t_name as t1_name, m.t1_score, m.t2_score, t2.t_name as t2_name, m.m_time from `match` as m left join `team` as t1 ON m.t1_id = t1.t_id left join `team` as t2 ON m.t2_id=t2.t_id;";
return $this->_dao->getAll($sql);
}

/**
* 删除某场比赛
*/
public function removeMatch($m_id) {
$sql = "delete from `match` where m_id=$m_id";
return $this->_dao->query($sql);
}

public function rmTeam($t_id) {
return $this->_dao->query("delete from `team` where t_id = $t_id");
}
}

 

 

./Model.class.php

<?php


/**
* 基础模型类
*/
class Model {
protected $_dao;//存储DAO对象的属性,可以在子类方法中被访问,使用DAO对象

/**
* 初始化DAO
*/
protected function _initDAO() {
//初始化mysqlDB
$config = array(\'host\' => \'127.0.0.1\',    \'port\' => \'3306\', \'username\'=>\'root\', \'password\' => \'h0000dh@\', \'charset\'=>\'utf8\', \'dbname\'=>\'itcast\');
require_once \'./MySQLDB.class.php\';
$this->_dao = MySQLDB::getInstance($config);//$dao , Database Access Object 数据库操作对象(dao层)
}

/**
* 构造方法
*/
public function __construct() {
// 初始化DAO
$this->_initDAO();
}
}

 

./MySQLDB.class.php

<?php
//类名,也习惯上(推荐)使用跟文件名相似的名字
//定义一个mysql连接类,该类可以连接mysql数据库
//并实现其单例模式
//该类的功能还能够完成如下基本mysql操作:
//执行普通的增删改非返回结果集的语句
//执行select语句并可以返回3种类型的数据:
//多行结果(二维数组),单行结果(一维数组)
//单行单列(单个数据)
class MySQLDB{
public $host;
public $port;
public $username;
public $password;
public $charset;
public $dbname;

//连接结果(资源)
private static $link;

private $resourc;

public static function getInstance($config){
if(!isset(self::$link)){
self::$link = new self($config);
}
return self::$link;
}

//构造函数:禁止new
private function __construct($config){
//初始化数据
$this->host = isset($config[\'host\']) ? $config[\'host\'] : \'localhost\';
$this->port = isset($config[\'port\']) ? $config[\'port\'] : \'3306\';
$this->username = isset($config[\'username\']) ? $config[\'username\'] : \'root\';
$this->password = isset($config[\'password\']) ? $config[\'password\'] : \'\';
$this->charset = isset($config[\'charset\']) ? $config[\'charset\'] : \'utf8\';
$this->dbname = isset($config[\'dbname\']) ? $config[\'dbname\'] : \'\';

//连接数据库
$this->connect();
//设定连接编码
$this->setCharset($this->charset);
//选定数据库
$this->selectDb($this->dbname);
}
//禁止克隆
private function __clone(){}
//这里进行连接
public function connect(){
$this->resourc = mysql_connect("$this->host:$this->port", "$this->username","$this->password") or die("连接数据库失败!");
}
public function setCharset($charset){
mysql_set_charset($charset, $this->resourc); 
}
public function selectDb($dbname){
mysql_select_db($dbname, $this->resourc);
}

/**
* 功能:执行最基本(任何)sql语句
* 返回:如果失败直接结束,如果成功,返回执行结果
*/
public function query($sql){
if(!$result = mysql_query($sql, $this->resourc))
{
echo ("<br />执行失败。");
echo "<br />失败的sql语句为:" . $sql;
echo "<br />出错信息为:" . mysql_error();
echo "<br />错误代号为:" . mysql_errno();
die();
}
return $result;
}
/**
* 功能:执行select语句,返回2维数组
* 参数:$sql 字符串类型 select语句
*/
public function getAll($sql){
$result = $this->query($sql);
$arr = array();    //空数组
while( $rec = mysql_fetch_assoc( $result )){
$arr[] = $rec;//这样就形成二维数组
}
return $arr;
}
//返回一行数据(作为一维数组)
public function getRow($sql){
$result = $this->query($sql);
//$rec = array();
if( $rec2 = mysql_fetch_assoc( $result )){//返回下标为字段名的数组
//如果fetch出来有数据(也就是取得了一行数据),结果自然是数组
return $rec2;
}
return false;
}
//返回一个数据(select语句的第一行第一列)
//比如常见的:select count(*) as c from XXX where ...
public function getOne($sql){
$result = $this->query($sql);
$rec = mysql_fetch_row($result);//返回下标为数字的数组,且下标一定是0,1,2, 3.....
//如果没有数据,返回false
if($result === false){
return false;
}
return $rec[0];    //该数组的第一项。

}
}

 

./template/.htaccess

Deny from All

./template/match_list_v.html

<!-- 模板文件,利用HTML代码展示数据 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>比赛列表</title>
</head>
<body>

<table>
<tr>
<th>球队一</th><th>比分</th><th>球队二</th><th>时间</th>
</tr>
<?php foreach($match_list as $row) : ?>
<tr>
<td><?php echo $row[\'t1_name\'];?></td>
<td><?php echo $row[\'t1_score\'];?>:<?php echo $row[\'t2_score\'];?></td>
<td><?php echo $row[\'t2_name\'];?></td>
<td><?php echo date(\'Y-m-d H:i\', $row[\'m_time\']);?></td>
</tr>
<?php endForeach;?>
</table>    
</body>
</html>

 

 

以上是关于php MVC的主要内容,如果未能解决你的问题,请参考以下文章

超级有用的9个PHP代码片段

PHP必用代码片段

PHP代码-psysh调试代码片段工具

超实用的php代码片段

比较有用的php代码片段

php Yoast SEO规范输出的代码片段