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

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

作者: 潘肚饿兵哥哥 | 来源:发表于2020-02-08 16:01 被阅读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);
        }
    

    相关文章

      网友评论

          本文标题:开发企业网站12 -- 新闻添加(带图片上传)

          本文链接:https://www.haomeiwen.com/subject/huwonctx.html