<?php
require_once('init.php');
if(!empty($_POST)){
//这里接收news_add.php传过来的数据
$data = $_POST;
//这个值有默认值,所以判断一下
//传值就使用传过来的值,空值就使用默认值0
$data['sort'] = !empty($_POST['sort'])?intval($_POST['sort']):0;
//修改功能,接收html页面传过来的id
//并进行判断。如果id大于0,就是修改,否则就是添加
// 如果执行成功,会通过下面的execute函数返回1,到news_category_add.html页面,进行添加操作
$id = $_POST['id'];
if($id > 0){
$ret = update($data, 'news_category', "id=$id");
}else{
//接收到上面传递过来的值之后,用sql语句将数据写入表中
unset($data['id']);
//把下面这个sql语句封装成一个函数 insert函数,
//因为增加表名不能每次写一遍,这里用news_category写死了
//$sql = "insert into news_category(".implode(',', array_keys($data)).") values ('".implode("','",array_values($data))."')";
//函数的参数是页面传过来的用户添加的数据(表名)和表名在数据库中的字段
$ret = insert($data, 'news_category');
}
//因为是异步操作,所以查询完了之后不能直接跳转页面,需要进行判定
//然后在news_category_add.html页面接收值
if($ret !== false){
echo 1;
}else{
echo 0;
}
}else{
//修改功能:
//通过GET方法获取news_category.html带过来的id(这个ID在搜索框中)
$id = $_GET['id'];
//逻辑:如果获取到的ID大于0,表示有id,那么就是修改
//然后用数据库查询函数查出这个id
//然后用smarty把这个查到的值传递给
//else是做添加时默认选项功能
//else后面是把嵌入的news_category_add.html页面的显示和排序的默认值0和1设置默认值
//这样在添加的时候,就只需要填写名称了,有需要才填显示隐藏和排序
if($id > 0){
$row = get_row("select * from news_category where id=$id limit 1");
}else{
$row = ['is_show'=>1, 'sort'=>0];
}
$smarty->assign('row', $row);
$smarty->display($tpl_name);
}
?>
<?php
require_once('init.php');
if( !empty($_POST)){
$data = $_POST;
//之前的php中显示的时间格式是年月日时分秒,但是数据库中写的格式是int
//需要用strtotime转换为时间戳格式,否则会报错
$data['publish_time'] = strtotime($data['publish_time']);
//在添加之前,还要先把添加时间加进来 时间字段 = 当前时间戳
$data['add_time'] = time();
//上传需要修改图片,但是修改新闻列表不需要该图片
//所以要判断是否需要修改图片,就判断是否上传了文件
//上传了文件就调用upload()函数
//还有上传的页面有可能出错,所以也要先对这种情况进行判定,
if(!empty($_FILE['file'])){
$result = upload('file');
if($result['error']==1){
echo $result['message'];//在上传页面,已经写了打印上传是否成功的信息,这里直接调用
die;
}
//如果成功就把缩略图路径放到data里面
$data['thumb'] = $result['url'];
}
//unset()函数用于销毁给定的变量。
//这个name是news_add.html的提交按钮的name
//这样除了file里的值没有,其他的都传过来了
unset($data['file']);
//然后,跟前面一样,如果data里的ID大于0就是修改,否则就是添加
if($data['id'] > 0){
$ret = update($data, 'news', "id={$data['id']}");
}else{
//添加需要把id删掉,因为id是自增长的
unset($data['id']);
//添加的sql语句:
// implode 把数组元素组合为字符串
// array_keys 返回包含数组中所有键名的一个新数组
// $sql = "insert into news ("..")";这是一个整体,两个点的前后都是字符串,中间是变量
// ")"就是一个括号
//在这里还不能直接执行,会报错
//因为sql中的时间字段,数据库中写的是int类型
//但是实际显示的是2019-10-10 16:20:52这样的类型
//所以需要在这个if之前用 strtotime 函数把时间类型转换为时间戳
//$sql = "insert into news (".implode(',',array_keys($data)).") values ('".implode ("','", array_values($data))."')";
//之前封装了添加的函数,这里就不写语句了,下面直接调用
$ret = insert($data, 'news');
}
if($ret !== false){
echo 1;
}else{
echo '操作失败';
}
}else{
//修改功能:
//通过GET方法获取news_category.html带过来的id(这个ID在搜索框中)
$id = $_GET['id'];
//逻辑:如果获取到的ID大于0,表示有id,那么就是查询
//然后用数据库查询函数查出这个id
//然后用smarty把这个查到的值传递news_add.html
//else是做添加时默认选项功能
//else后面是把嵌入的news_add.html页面的显示时间默认值
//这样在添加的时候,如果没有给时间,就给一个默认当前时间
//
if($id > 0){
$row = get_row("select * from news where id=$id limit 1");
}else{
// mt_rand() 使用 Mersenne Twister 算法返回随机整数。
//不给参数是0-21亿
$row = ['publish_time'=>date('Y-m-d H:i:s'), 'read_num'=>mt_rand(0, 1000)];
}
// 分类栏目先写名字和id就够用了,所以查询写id和name就够了
//根据sort进行排序,如果sort一样,再根据id进行降序排列
//然后把这个变量分配到news_add.html
$category = get_all("select id, name from news_category order by sort, id desc");
$smarty->assign('row', $row);
$smarty->assign('category', $category);
$smarty->display($tpl_name);
}
?>
//这是用户添加新闻分类(banner部分的title)的函数,用于创建数据库字段,并把用户上传的数据写入数据库
function insert($data, $tableName){
$sql = "insert into $tableName (".implode(',', array_keys($data)).") values ('".implode("','",array_values($data))."')";
return execute($sql);
}
//上面这个函数是添加新闻分类,这个函数是修改新闻分类名称和id;
function update($data, $tableName, $where){
//先判断where条件是不是为空,才能继续下去
//$where就是数据库里的字段,要改哪一个,$where就是哪一个
if(empty($where)){
die('修改要有条件');
}
/*
这行只能修改id,通过在db.php页面写一个修改分类名称的函数,然后在这里添加sql语句
$sql = "update news_category set name='$name', is_show='$is_show', sort='$sort' where id='$id'";
*/
/*下面要写的这行代码功能是修改新闻分类的名称和修改id(上面的那一行sql只能修改id)
逻辑是拿到之前的分类信息
这个分类信息拿过来是一个索引数组,类似这样:
[
'id' => 3,
'name' => '娱乐新闻',
'is_show' => 1;
'sort' => 10;
]
然后用foreach循环遍历这个数组,逐个修改这个数组的value
*/
$sql = "update $tableName set ";
foreach($data as $k=>$v){
$sql .= $k."='".$v."',";
}
$sql = rtrim($sql, ',');//去掉右边的逗号,去掉两边是trim();
//使用封装好的操作函数库的查询函数调用它,将上面的数据库语言作为参数传给函数
$sql .= " where $where";
return execute($sql);
}
网友评论