分页,搜索后保留搜索条件分页

本文详细介绍了如何在PHP中实现基本的分页功能及搜索功能,包括数据获取、分页显示、搜索条件保留等步骤,适用于初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先写一个简单的分页,供初学者参考:


首先呢,在项目根目录创建文件a.php , 复制以下内容<注意提前下载jquery库>

<pre name="code" class="php">header("content-type:text/html;charset=utf8");
// 创建一个数据源,若数据来自于mysql ,此处请改为mysql获取数据 注意limit使用  limit($offset, $length) $offset 为偏移量,从第几个开始(下标从0开始)   $length 是获取数据长度 此处获取结果为$arr.
$a = array(
    array("id" => 1, "name" => "qwe"),
    array("id" => 2, "name" => "fds"),
    array("id" => 3, "name" => "gre"),
    array("id" => 4, "name" => "cvb"),
    array("id" => 5, "name" => "grh"),
    array("id" => 6, "name" => "zxc"),
    array("id" => 7, "name" => "Zxz"),
    array("id" => 8, "name" => "fgf"),
);
// array_slice 数组截取 
$arr = array_slice($a, 0, 2);


?>
<input type="hidden" id="page" value="1"/>
<input type="hidden" id="page_total" value="<?php echo ceil(count($a)/2); ?>"/>
<table id="content" border="1">
    <tr><td>ID</td><td>name</td></tr>
    <?php foreach ($arr as $v) { ?>
    <tr>
        <td><?php echo $v['id']; ?></td>
        <td><?php echo $v['name']; ?></td>
    </tr>
    <?php } ?>
</table>
<span onclick="fun(1)" >首页</span>
<span onclick="fun(2)" >上一页</span>
<span onclick="fun(3)" >下一页</span>
<span onclick="fun(4)" >尾页</span>
<!--注意导入jquery库-->
<script src="jq.js" ></script>
<script type="text/javascript" >
    // $flag 是为了区分当前操作
    function fun (flag) {
        var pageobj = $("#page");
        var totalobj = $("#page_total");
        var contentobj = $("#content");
        var page = pageobj.val();
        var total = totalobj.val();
        // 当前操作后应该展示那一页的数据
        var now = 1;
        if (flag == 2) {
            now = (page-1)>0 ? (page-1) : 1;
        } else if (flag == 3) {
            now = (page*1+1)<total ? (page*1+1) : total;
        } else if (flag == 4) {
            now = total
        }
        // 根据当前操作后应该展示的数据
        $.ajax({
            url:"b.php",
            type:"get",
            data:"now=" + now,
            dataType:"json",
            success:function (o) {
                var str = "<tr><td>ID</td><td>name</td></tr>";
                for(a in o) {
                    str += "<tr><td>" + o[a].id + "</td><td>" + o[a].name + "</td></tr>"
                }
                contentobj.html(str);
                pageobj.val(now);
            }
        });
    }
</script>
 

再创建文件b.php, 复制以下内容

// 数据源
$a = array(
    array("id" => 1, "name" => "qwe"),
    array("id" => 2, "name" => "fds"),
    array("id" => 3, "name" => "gre"),
    array("id" => 4, "name" => "cvb"),
    array("id" => 5, "name" => "grh"),
    array("id" => 6, "name" => "zxc"),
    array("id" => 7, "name" => "Zxz"),
    array("id" => 8, "name" => "fgf"),
);

// 获取当前页面应该展示的数据
$page   = $_GET['now'] ? $_GET['now'] : 1;
$offset = ($page-1)*2;
$resurt = array_slice($a, $offset, 2);

// 返回数据 json
echo json_encode($resurt);

之后访问 http://yourDomainName/a.php,就可以看到所需要的效果了。


之后呢,我们需要搜索保留条件分页,其实只需要在原分页基础上对展示数据进行搜索处理,并且能够保证搜索条件保留,呢么我们的搜索分页也就完成了:

a.php

header("content-type:text/html;charset=utf8");
// 获取当前展示数据
$a = array(
    array("id" => 1, "name" => "qwe"),
    array("id" => 2, "name" => "fds"),
    array("id" => 3, "name" => "gre"),
    array("id" => 4, "name" => "cvb"),
    array("id" => 5, "name" => "grh"),
    array("id" => 6, "name" => "zxc"),
    array("id" => 7, "name" => "Zxz"),
    array("id" => 8, "name" => "fgf"),
    array("id" => 9, "name" => "fgf"),
    array("id" => 10, "name" => "fgf"),
    array("id" => 11, "name" => "fgf"),
);
$arr = array_slice($a, 0, 2);
?>
<input type="hidden" id="page" value="1"/>
<input type="hidden" id="page_total" value="<?php echo ceil(count($a)/2); ?>"/>
<input type="text" id="sear" />
<input type="button" value="search" onclick="fun(1)"/>
<table id="content" border="1">
    <tr><td>ID</td><td>name</td></tr>
    <?php foreach ($arr as $v) { ?>
    <tr>
        <td><?php echo $v['id']; ?></td>
        <td><?php echo $v['name']; ?></td>
    </tr>
    <?php } ?>
</table>
<span onclick="fun(1)" >首页</span>
<span onclick="fun(2)" >上一页</span>
<span onclick="fun(3)" >下一页</span>
<span onclick="fun(4)" >尾页</span>
<script src="jq.js" ></script>
<script type="text/javascript" >
    function fun (flag) {
        // 分页数据
        var pageobj = $("#page");
        var totalobj = $("#page_total");
        var contentobj = $("#content");
        var page = pageobj.val();
        var total = totalobj.val();
        var sear = $("#sear").val();

        // 获取操作后应当展示页数
        var now = 1;

        if (flag == 2) {
            now = (page-1)>0 ? (page-1) : 1;
        } else if (flag == 3) {
            now = (page*1+1)<total ? (page*1+1) : total;
        } else if (flag == 4) {
            now = total
        }
        $.ajax({
            url:"b.php",
            type:"get",
            data:"now=" + now + "&sear=" + sear,
            dataType:"json",
            success:function (o) {
                // 返回结果拼接字符串,替换
                var str = "<tr><td>ID</td><td>name</td></tr>";
                for(a in o['resurt']) {
                    str += "<tr><td>" + o['resurt'][a].id + "</td><td>" + o['resurt'][a].name + "</td></tr>"
                }

                contentobj.html(str);
                pageobj.val(now);
                totalobj.val(o['count']);
            }
        });
    }
</script>

b.php

$a = array(
    array("id" => 1, "name" => "qwe"),
    array("id" => 2, "name" => "fds"),
    array("id" => 3, "name" => "gre"),
    array("id" => 4, "name" => "cvb"),
    array("id" => 5, "name" => "grh"),
    array("id" => 6, "name" => "zxc"),
    array("id" => 7, "name" => "Zxz"),
    array("id" => 8, "name" => "fgf"),
    array("id" => 9, "name" => "fgf"),
    array("id" => 10, "name" => "fgf"),
    array("id" => 11, "name" => "fgf"),
);
// 获取数据
$page   = $_GET['now'] ? $_GET['now'] : 1;
$sear   = $_GET['sear'] ? $_GET['sear'] : "";

$b = $a;
// 搜索 此处应该改为数据库搜索,只是做一个模拟
if (!empty($sear)) {
    $b = array();
    foreach ($a as $k => $v) {
        if ($v['name'] == $sear) {
//            echo $v['id'];
            $b[] = $v;
        }
    }
}

$offset = ($page-1)*2;
$resurt = array_slice($b, $offset, 2);
$count = ceil(count($b)/2);

// 处理结果返回
echo json_encode(array('resurt' => $resurt, 'count' => $count));

浏览器刷新a.php,看到的就是你想要的结果了!!! 大笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值