开发企业网站12 -- 新闻添加(带图片上传)

2020-02-08  本文已影响0人  潘肚饿兵哥哥

\color{rgba(254, 67, 101, .8)}{文件上传优化和新闻添加}

\color{rgba(254, 67, 101, .8)}{news\_category\_add.php代码}

<?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);
    }
    
?>

\color{rgba(254, 67, 101, .8)}{news\_add.php代码}

<?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);
    }
    
?>

\color{rgba(254, 67, 101, .8)}{db.php函数}


    //这是用户添加新闻分类(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);
    }
上一篇下一篇

猜你喜欢

热点阅读