zoukankan      html  css  js  c++  java
  • table表格实现点击修改 PHP同步数据库 排序

    最近几天在做一个网站,牵扯到一个导航管理的功能!领导说不用作,可是由于自己自作主张,搞了1天的功能。领导说这个导航管理就是不用做!容易牵扯出好多问题来!估摸是客户小的原因!

    没办法就把我1天的劳动荒废了!在这里贴出来,一个是与大家交流, 第二,也是希望大家可以使劲拍砖,相信大家的拍砖可以使我更好的成长!我可以学到更多的知识!

    本人初级PHP鸟一只!希望各位多多指教!

    上代码!

    首先是HTML代码!主要实现了!table的一个表格,未添加任何CSS样式,因为做到这一步,要添加样式的时候,领导说不需要!就再没往下做!

    我直接拷贝的我做的数据,表格里面存的是数据!我用的CI框架做的!所以数据都是PHP代码段输出!$nav_array是从数据库取出来的导航数组

    <div>这里是导航管理界面</div>
    <form method="post">
        <table class="table" border="1" style="border-collapse: collapse">
            <thead><tr><th>顺序</th><th>导航名称</th><th>管理</th></tr></thead>
    
            <tbody>
            <?php foreach($nav_array as $key=>$value):?>
                <tr num="<?php echo $value['id']?>" navid="<?php echo $value['id'];?>">
                    <td><?php echo $value['sort']?></td>
                    <td><?php echo $value['nav_name']?></td>
    <!--                <td><button class="button" num="--><?php //echo $value['id']?><!--">修改</button></td>-->
                </tr>
            <?php endforeach ?>
    
            </tbody>
        </table>
    </form>

    jquery代码实现的点击变修改!主要的思路就是用empty抹掉原来表格中的数据,添加进去一段input

    这段input  html代码应该可以用for循环搞定!我懒的搞了!有兴趣的自己研究下吧!

     $('.table').on('click', '.button', function(){
    
            var num = $(this).attr('num');//当前点击事件的按钮flag
            var current_tr  = $('table').find('tr[num="'+ num +'"]');//当前点击事件的tr行
            var current_tds = $(current_tr).find('td');//当前点击事件的行所有td
            var navid = $(current_tr).attr('navid');//这个是导航的id 是主键
            //存储当前点击事件行中td的原值,用在下面的form 的html代码中显示
            var arr = [];
            for(var i = 0; i < current_tds.length; i++){
                arr[i] = $(current_tds).eq(i).text();
            }
            //要替换的html代码
            var td_html = '<td><input type="hidden" name="nav_id" value="'+ navid +'"><input type="text" name="sort" value="'+ arr[0] +'"></td><td><input type="text" name="nav_alter" value="'+ arr[1] +'"></td><td><input type="submit" name="" value="确定"></td>';
            $('.table').find('tr[num="'+ num +'"]').empty().append(td_html);
    
        });

    PHP代码,这里直接从我的代码拷贝过来了,不修改了!有缺点欢迎指正!懂的话,应该可以改成自己的代码

    index主要就是载入这个页面,用了CI的input类,post接收到数据,从数据库提取一级导航,然后验证post过来的数据是否存在于数据库中的数据中!

     public function index(){
            $nav_id    = $this->input->post('nav_id');   //导航ID
            $nav_name = $this->input->post('nav_alter');//修改的导航名
            $sort = $this->input->post('sort');          //排序num
            $data['nav_array'] = $this->m_nav_manage->getNav();//提取所有一级导航,从数据库
    
            //检查post过来的数据 是否已经存在于数据库中
            if( $nav_name || $sort) {
                if( !$this->check_nav_in_array( $nav_name, $data['nav_array'] ) || !$this->check_nav_in_array($sort, $data['nav_array'])) {
    
                    $this->m_nav_manage->up_data_nav($nav_name, $sort, $nav_id);
                    $data['nav_array'] = $this->m_nav_manage->getNav();
                    //重写数据库并且提取数据
    
                }
            }
    
            $this->load->view('nav_manage', $data);
        }
    
    
    
        /**检查nav是否存在于二维数组中
         * @param $nav     待搜索的值
         * @param $array   被搜索的二维数组
         * @return bool
         */
        private function check_nav_in_array($value, $array) {
            for( $i = 0; $i < count($array); $i++ ) {
                foreach( $array as $key=>$value ) {
                    if( in_array( $value, $array[$i] ) ) {
                        return TRUE;
                    }
                }
            }
        }

    另外有一段在model中的函数,主要用来update数据和并且将排序更改

    ,实现思路 ----主要是用传过来的sort,$navid是隐藏的input中提交过来的,$navname    三个变量都是post过来的数据

    这段实现的比较纠结!总之  $nav_a  取得的是这个nav的ID    $nav_b取得的是这个nav的sort

    功能实现了,我自己到现在还没别过劲来!~~留给自己慢慢思考吧!

    get_one() 生成的select语句   SELECT id FROM $this->table WHERE sort = $sort;  其他自己的研究吧!

        public function up_data_nav($navName, $sort, $navId) {
        $nav_a = $this->m_common->get_one('id', $this->table, array('sort'=>$sort));//要被改成$sort的nav的id
            $nav_b = $this->m_common->get_one('sort', $this->table, array('id'=>$navId));//正在修改的nav的sort
            //print_r($nav_a); print_r($nav_b); die();
            $nav_alter_array['nav_name'] = $navName;
            $nav_alter_array['sort'] = $sort;
            //print_r($nav_alter_array);die();
            $this->m_common->up_data($this->table, $nav_alter_array, array('id' => $navId) );
            $this->m_common->up_data($this->table, array('sort'=>$nav_b['sort']), array( 'id' => $nav_a['id'] ) );
        }
    /**
         * 获取单条数据
         * @param $table 表名
         * @param $where 条件数组
         * @param string $fields 查询的字段 默认是 '*'
         *
         * 返回一个数组
         */
        public function get_one($fields = '*', $table, $where ) {
            if($where != '') {
                return $this->db->select($fields)->from($table)->where($where)->get()->row_array();
            } else {
                return $this->db->select($fields)->from($table)->get()->row_array();
            }
        }
    
    
    
     
  • 相关阅读:
    ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
    POJ 1088 滑雪 DP
    UVA 11584 最短回文串划分 DP
    POJ 2531 Network Saboteur DFS+剪枝
    UVa 10739 String to Palindrome 字符串dp
    UVa 11151 Longest Palindrome 字符串dp
    UVa 10154 Weights and Measures dp 降维
    UVa 10271 Chopsticks dp
    UVa 10617 Again Palindrome 字符串dp
    UVa 10651 Pebble Solitaire 状态压缩 dp
  • 原文地址:https://www.cnblogs.com/itafter/p/4120005.html
Copyright © 2011-2022 走看看