PHP面向对象留言板(二)前后端分离,Model实现了实体类与表绑定
来源:互联网 发布:反向代理服务器nginx 编辑:程序博客网 时间:2024/05/03 20:34
- 实现了实体类的自动加载,只需在model实例化时传入一个实体类名,即可实现实体类与数据库表的绑定
- 使用对象容器,在查询出结果集之后,直接生成对象并放入对象容器
- 取实体类数据时,会返回一个对象容器,遍历转换成对象数组并进行json编码,打印到页面就成了API
- 界面使用css绘制按钮,输入框
- 使用数据库配置文件
- 前后端分离
- model中不应该定义数据库相关的变量和操作
code:
https://code.csdn.net/u012995856/oop_liuyanban/tree/master
效果:
源码目录结构:
Model.php
<?php/** *模型类,介于实体类与数据库表之间的存在,是拥有数据的实体类集合 * */require 'DB.php';class Model{ private $obj; private static $entity_name; private $db; private $container; //构造方法 //根据实例化Model时的传入参数 //自动加载实体类,并实例化 function __construct($entity){ $this->entity_name = $entity;//暂存实体类类名 $this->db = new DB; set_include_path('./');//设置自动加载目录 spl_autoload_register();//自动加载 $this->obj = new $entity;//实例化实体类 } //根据模型自动查询数据,将结果集对象化到容器,返回对象容器 public function get_all(){ $sql = 'select * from '.$this->entity_name; $result = $this->db->query($sql); $container = new SplObjectStorage();//实例化对象容器 while ($entity_obj = $result->fetch_object()) { $container->attach($entity_obj); } return $container; }}
DB.conf.php
<?php//定义数据库配置 define('HOST', 'localhost');define('PORT', '3306');define('USER', 'root');define('PASSWORD', '123456');define('DB_NAME', 'liuyanban');
DB.php
<?php/** *数据库类 *提供基础的数据库操作 */require 'DB.conf.php';class DB{ //定义数据库变量 private static $host = HOST; private static $port = PORT; private static $db_name = DB_NAME; private static $user_name = USER; private static $user_password = PASSWORD; private $mysqli; private $result; //构造方法,用于实例化数据库对象时创建一个数据库连接 function __construct(){ $this->mysqli = new mysqli( HOST, USER, PASSWORD, DB_NAME ); if ($this->mysqli->connect_error) { die('database connect error!'); } //析构方法,用于实例销毁时关闭数据库连接 function __desstruct(){ $this->mysqli->close(); $this->result->close(); } //设置编码集 $this->mysqli->query('set names utf8'); } //查询方法 public function query($sql){ $this->result = $this->mysqli->query($sql); return $this->result; } // public function get_one($table,$key,$value){ } public function get_some(){ }public function get_all_objs($value=''){ # code...}public function get_all_arr($value=''){ # code...} //根据单个条件进行查询 public function get_all_by_condition($value=''){ # code... } //根据符合条件进行查询 public function get_all_by_conditions($value=''){ # code... }}
getdata.php
<?phprequire 'Model.php';/** *获取留言板数据,类似于Controller * */$model = new Model('liuyanban');$container = $model->get_all();$arr = array();$container->rewind();while ($container->valid()) { $arr[] = $container->current(); $container->next();}//var_dump($arr);echo json_encode($arr);
LiuYanBan.php
<?php/** * */class liuyanban{ //成员变量 //对应数据库表的字段 private static $lyb_id; private static $lyb_title; private static $lyb_content; private static $lyb_author; private static $lyb_time; private static $lyb_authoremail; private static $lyb_pass; //构造方法 function __construct(){ //echo '创建了一个留言板<br>'; }}
index.html
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>留言板</title> <link rel="stylesheet" href="index.css" media="screen" title="no title" charset="utf-8"> <script src="http://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script> </head> <body><div class="lyb"> <h1>留言板 </h1><div class="lyb-add"> <input name="name" /><button type="button" name="button">留言</button></div><br><br><div class="lyb-list" id="lyb-list"></div></div> </body> <script type="text/javascript"> $(function(){ $.get("http://localhost/liuyanban/getlybdata.php",function(data,status) { // var lyb = $.parsejson(data); var objs = eval(data); var content = '<table>'; $.each(objs,function(i,item) { content += '<tr><th>'+item.lyb_title+' '+item.lyb_author+'<br><br>'+item.lyb_content+'<br>'+item.lyb_authoremail+'<br><br><hr></th></tr>'; }); content+='</table>'; $('#lyb-list').html(content); }); } ); </script></html>
index.css
.lyb .lyb-add button{ background-color: #4CAF50; /* Green */ border: none; color: white; padding: 5px 20px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; border-radius: 8px;}.lyb .lyb-add input{ background: #fff; border: 1px solid #000; padding: 5px; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px;}.lyb{ text-align: center;}.lyb .lyb-list table{ text-align: center; margin:auto;}
liuyanban.sql
-- phpMyAdmin SQL Dump-- version phpStudy 2014-- http://www.phpmyadmin.net---- 主机: localhost-- 生成日期: 2016 广08 朿22 旿20:54-- 服务器版本: 5.5.47-- PHP 版本: 5.5.30SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";SET time_zone = "+00:00";/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;---- 数据库: `liuyanban`---- ------------------------------------------------------------ 表的结构 `liuyanban`--CREATE TABLE IF NOT EXISTS `liuyanban` ( `lyb_id` varchar(255) NOT NULL, `lyb_title` varchar(255) NOT NULL, `lyb_content` varchar(255) NOT NULL, `lyb_author` varchar(50) NOT NULL, `lyb_time` varchar(255) NOT NULL, `lyb_authoremail` varchar(50) NOT NULL, `lyb_pass` int(11) NOT NULL, UNIQUE KEY `lyb_id` (`lyb_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;---- 转存表中的数据 `liuyanban`--INSERT INTO `liuyanban` (`lyb_id`, `lyb_title`, `lyb_content`, `lyb_author`, `lyb_time`, `lyb_authoremail`, `lyb_pass`) VALUES('c4ca4238a0b923820dcc509a6f75849b', '我的第一条留言', '留言的内容', 'pangPython', '12333112', 'pangpython@qq.com', 0),('c81e728d9d4c2f636f067f89cc14862c', 'php面向对象留言板', '这是一个面向对象的留言板程序。。。。', 'pangPython', '8987879456', 'pangPython@qq.com', 1);/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
前端可以使用一些框架,或者jquery 的数据表格json数据绑定更方便
1 0
- PHP面向对象留言板(二)前后端分离,Model实现了实体类与表绑定
- 前后端分离(二)
- (精)前后端分离的思考与实践(二)
- 前后端分离的思考与实践(二)
- 前后端分离的思考与实践(二)
- (精)前后端分离的思考与实践(二)
- 前后端分离的思考与实践(二)
- 前后端分离的思考与实践(二)
- 前后端分离(二)
- 前后端分离的探索(二)
- MVC与前后端分离
- 前后端分离(一)
- 前后端分离(三)
- 前后端分离了,然后呢?
- 前后端分离了,然后呢?
- 前后端分离了,然后呢?
- 【胖张】Nginx 实现前后端分离部署(简单)
- 前后端分离的思考与实践(一)
- 常见的WEB安全漏洞
- C51和MDK-ARM共存方法(uVision5)
- 引用
- 真云,假云,傻傻分不清楚?!
- 处理svn可能产生的错误
- PHP面向对象留言板(二)前后端分离,Model实现了实体类与表绑定
- Jquery-UI学习笔记(选项卡tabs)学习(转)
- mac终端Login Incorrect问题
- java中final和static的区别
- Gerrit 使用规范
- 【常见错误】Installation error: INSTALL_FAILED_VERSION_DOWNGRA错误
- 内网情况下ubantu终端http代理
- 关于基本勾股数规律的探讨总结与例题!
- 环信SDK使用过程中问题