PHP面向对象留言板(三)模拟客户端传来的JSON格式的数据写入数据库
code:https://code.csdn.net/u012995856/oop_liuyanban/tree/master
效果图:
本打算是前端ajax提交json格式数据,调试了很长时间还没实现,就使用PHP模拟了前端提交的json数据.
json数据中id的key-value先用作存储对象的名字也就是对应的实体名即数据库表名.
计划model中提供通用的insert方法,解析json数据,自动由与数据库表字段对应的key写value,但是没实现
代码:
Model.php
<?php
/**
*模型类,介于实体类与数据库表之间的存在,是拥有数据的实体类集合
*
*/
require 'DB.php';
class Model
{
private $obj;
private $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;
}
//将一条数据写入数据库
public function _insert($obj_json_format){
//解析json
$temp = json_decode($obj_json_format);
//构建sql
$sql = 'insert into liuyanban values("'.$temp->lyb_id.'","'.$temp->lyb_title.'","'.$temp->lyb_content.'","'.$temp->lyb_author.'","'.$temp->lyb_time.'","'.$temp->lyb_authoremail.'",'.$temp->lyb_pass.')';
//返回数据库执行结果 true or false
return $this->db->query($sql);
}
}
add.php
<?php
require 'Model.php';
/**
*控制器
*接收json格式数据,
*调用Model
*/
//模拟客户端传来的JSON格式的数据
// id 处理前作为传递model对象的类名
//之后作为表id
$arr = array(
'lyb_id' => 'liuyanban',
'lyb_author' => 'py',
'lyb_title' => '留言数据',
'lyb_content' => '留言内容',
'lyb_time' => time(),
'lyb_authoremail' => 'pangPython@qq.com',
'lyb_pass' => 1
);
$lybjson = json_encode($arr);
//上面接收来自客户端的数据
$_obj = json_decode($lybjson);//解码json
$class_name = $_obj->lyb_id;//暂存表名
$_obj->lyb_id = md5(time());//使用md5+Unix时间戳作为每条记录的id
$model = new Model($class_name);
// var_dump($_obj->lyb_id);
//
if ($model->_insert(json_encode($_obj))) {
echo '留言写入成功!';
}else {
echo '留言写入失败!';
}
//echo $model->_insert(json_encode($_obj));
// print_r($_obj);