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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM