如何:使用mysql,ajax和linq实现基本的php分页

时间:2011-06-16 08:21:06

标签: php mysql linq paging

我试图使用php,ajax和(真正的踢球者)linq实现一个简单的mysql数据分页。 php有一个linq实现,名为phplinq

我已经能够在没有linq部分的情况下实现分页,相关代码如下:(分成几个文件)

  1. pagination.php,一切都在这里开始。

                          使用Jquery,Ajax,PHP进行分页

         <script type="text/javascript"
    
         

    SRC = “JS / jquery1_5_2_min.js” &GT;                                                                                                           

  2. load_data.php,数据全部被拉的文件

        $query_pag_data = "SELECT id as msg_id,name as message from student LIMIT $start, $per_page";
        $result_pag_data = mysql_query($query_pag_data) or die('MySql Error' . mysql_error());
        $msg = "";
        while ($row = mysql_fetch_array($result_pag_data)) {
            $htmlmsg=htmlentities($row['message']);
            $msg .= "<li><b>" . $row['msg_id'] . "</b> " . $htmlmsg . "</li>";
        }
        $msg = "<div class='data'><ul>" . $msg . "</ul></div>"; // Content for Data
    
        /* --------------------------------------------- */
        $query_pag_num = "SELECT COUNT(*) AS count FROM student";
        $result_pag_num = mysql_query($query_pag_num);
        $row = mysql_fetch_array($result_pag_num);
        $count = $row['count'];
        $no_of_paginations = ceil($count / $per_page);
    
        /* ---------------Calculating the starting and endign values for the loop----------------------------------- */
        if ($cur_page >= 7) {
            $start_loop = $cur_page - 3;
            if ($no_of_paginations > $cur_page + 3)
                $end_loop = $cur_page + 3;
            else if ($cur_page <= $no_of_paginations && $cur_page > $no_of_paginations - 6) {
                $start_loop = $no_of_paginations - 6;
                $end_loop = $no_of_paginations;
            } else {
                $end_loop = $no_of_paginations;
            }
        } else {
            $start_loop = 1;
            if ($no_of_paginations > 7)
                $end_loop = 7;
            else
                $end_loop = $no_of_paginations;
        }
        /* ----------------------------------------------------------------------------------------------------------- */
        $msg .= "<div class='pagination'><ul>";
    
        // FOR ENABLING THE FIRST BUTTON
        if ($first_btn && $cur_page > 1) {
            $msg .= "<li p='1' class='active'>First</li>";
        } else if ($first_btn) {
            $msg .= "<li p='1' class='inactive'>First</li>";
        }
    
        // FOR ENABLING THE PREVIOUS BUTTON
        if ($previous_btn && $cur_page > 1) {
            $pre = $cur_page - 1;
            $msg .= "<li p='$pre' class='active'>Previous</li>";
        } else if ($previous_btn) {
            $msg .= "<li class='inactive'>Previous</li>";
        }
        for ($i = $start_loop; $i <= $end_loop; $i++) {
    
            if ($cur_page == $i)
                $msg .= "<li p='$i' style='color:#fff;background-color:#006699;' class='active'>{$i}</li>";
            else
                $msg .= "<li p='$i' class='active'>{$i}</li>";
        }
    
        // TO ENABLE THE NEXT BUTTON
        if ($next_btn && $cur_page < $no_of_paginations) {
            $nex = $cur_page + 1;
            $msg .= "<li p='$nex' class='active'>Next</li>";
        } else if ($next_btn) {
            $msg .= "<li class='inactive'>Next</li>";
        }
    
        // TO ENABLE THE END BUTTON
        if ($last_btn && $cur_page < $no_of_paginations) {
            $msg .= "<li p='$no_of_paginations' class='active'>Last</li>";
        } else if ($last_btn) {
            $msg .= "<li p='$no_of_paginations' class='inactive'>Last</li>";
        }
        $goto = "<input type='text' class='goto' size='1' style='margin-top:-1px;margin-left:60px;'/><input type='button' id='go_btn' class='go_button' value='Go'/>";
        $total_string = "<span class='total' a='$no_of_paginations'>Page <b>" . $cur_page . "</b> of <b>$no_of_paginations</b></span>";
        $msg = $msg . "</ul>" . $goto . $total_string . "</div>";  // Content for pagination
        echo $msg;
    }
    
  3. dbconnect.php,包含登录内容

  4. paginator.js,带有javascript函数的文件。

    (文档)$。就绪(函数(){     function loading_show(){         $( '#装载')HTML( “”)淡入( '快')。;     }     function loading_hide(){         $( '#装载')淡出( '快')。     }
        function loadData(page){         loading_show();
            $就         ({             类型:“POST”,             url:“load_data.php”,             数据:“page =”+页面,             成功:功能(msg)             {                 $(“#container”)。ajaxComplete(函数(事件,请求,设置)                 {                     loading_hide();                     $( “#集装箱”)HTML(MSG);                 });             }         });     }     loadData(1); //首次加载页面加载默认结果     $('#container .pagination li.active')。live('click',function(){         var page = $(this).attr('p');         loadData(页);

    });           
    $('#go_btn').live('click',function(){
        var page = parseInt($('.goto').val());
        var no_of_pages = parseInt($('.total').attr('a'));
        if(page != 0 && page <= no_of_pages){
            loadData(page);
        }
        else{
            alert('Enter a PAGE between 1 and '+no_of_pages);
            $('.goto').val("").focus();
            return false;            
        }
    });
    

    });

  5. 最后,table.css,带有一些基本样式的文件。

    body{
        width: 800px;
        margin: 0 auto;
        padding: 0;
    }
    #loading{
        width: 100%;
        position: absolute;
        top: 100px;
        left: 100px;
        margin-top:200px;
    }
    #container .pagination ul li.inactive,
    #container .pagination ul li.inactive:hover{
        background-color:#ededed;
        color:#bababa;
        border:1px solid #bababa;
        cursor: default;
    }
    #container .data ul li{
        list-style: none;
        font-family: verdana;
        margin: 5px 0 5px 0;
        color: #000;
        font-size: 13px;
    }
    
    #container .pagination{
        width: 800px;
        height: 25px;
    }
    #container .pagination ul li{
        list-style: none;
        float: left;
        border: 1px solid #006699;
        padding: 2px 6px 2px 6px;
        margin: 0 3px 0 3px;
        font-family: arial;
        font-size: 14px;
        color: #006699;
        font-weight: bold;
        background-color: #f2f2f2;
    }
    #container .pagination ul li:hover{
        color: #fff;
        background-color: #006699;
        cursor: pointer;
    }
    .go_button
    {
    background-color:#f2f2f2;border:1px solid #006699;color:#cc0000;padding:2px 6px 2px 6px;cursor:pointer;position:absolute;margin-top:-1px;
    }
    .total
    {
    float:right;font-family:arial;color:#999;
    }
    

    如果你要复制它,有一个css文件夹和一个js文件夹,我已经从谷歌下载了jquery 1.5.2。你可以替换

    <script type="text/javascript" src="js/jquery1_5_2_min.js"></script>
    

    在pagination.php中

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
    

    此外,正在使用的表是

    CREATE TABLE student    (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(150)
    );
    my
    
    这里的目标是摆脱文件中的所有直接mysql查询调用,无论我可以使用linq放在那里。我已经在.NET 4.0中广泛使用了linq,所以基本上我在这里尝试做的是抽象数据访问层,好像我使用.NET对象与数据接口而不是纯粹的mysql查询调用。

    这有意义吗?我的最终目标是能够用phplinq替换所有的mysql查询调用,并完全隔离数据访问代码。(如果linq是一种矫枉过正或不知何故不足,生病了)我不想在这里使用任何ORM,因为我要去大量自定义网格(在此示例中只有一个列表)和未来的数据访问层

    对PHP不熟练,所以请不要指导我阅读。我能接受和玩的东西会好得多的

1 个答案:

答案 0 :(得分:0)

嗯,我猜你在从数据库中提取记录时遇到了问题..我已经在php分页工作了很多,并且相信我的php可以更好地使用mySQL查询而不是LINQ ..你可以查看关于LINQ Paging的博客帖子{ {3}}。它使用ASP.net,但我很确定你可以得到至少和想法做你的工作..每当我用LINQ寻呼我通常使用这个查询

(from ac in dc.students where StudentIDs.Contains(ac.Ids) select ac).Skip((PageNumber - 1) * NumberOfRecordsInPage).Take(NumberOfRecordsInPage)

希望有所帮助:)