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

问题描述 投票:0回答:1

我正在尝试使用 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">

  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函数的文件。

    $(文档).ready(函数(){ 函数loading_show(){ $('#loading').html("").fadeIn('fast'); } 函数loading_hide(){ $('#loading').fadeOut('快'); }
    函数加载数据(页面){ 加载_显示();
    $.ajax ({ 类型:“帖子”, url: "load_data.php", 数据:“页=”+页, 成功:函数(消息) { $("#container").ajaxComplete(函数(事件、请求、设置) { 加载隐藏(); $("#container").html(msg); }); } }); } 加载数据(1); // 第一次页面加载默认结果 $('#container .pagination li.active').live('click',function(){ var page = $(this).attr('p'); 加载数据(页面);

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

    });

最后是 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 不太精通,所以请不要引导我去广泛阅读。我可以拿起并玩的东西会更好

php mysql linq pagination
1个回答
0
投票

好吧,我猜你在从数据库中获取记录时遇到了问题。我在 php 分页方面工作了很多,相信我,php 在 mySQL 查询上比 LINQ 工作得更好。你可以在这里查看关于 LINQ 分页的博客文章。它使用 ASP.net,但我很确定您至少可以获得完成工作的想法。每当我使用 LINQ 进行分页时,我通常会使用此查询

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

希望有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.