关于PHP添加搜索和分页浏览功能

algorain

小结:

1. 分页后再做搜索

2. 这里对于url的拼接,以及模糊查询,搜索时候的显示添加,SQL语句的拼接

3. 对于页面传递过来的超级链接的变量,如果不存在就要设置,对于可能抛出异常的要加上@屏蔽错误

4. 对于查询一般用一些关键字来获取

5. 分页显示的limit条件要写好

6. 搜索时候的where条件

1. 搜索表单:

1
2
3
4
5
6
7
8
9
<!--- 搜索表单--->
    <form action="list3.php" method="get">
    标题:<input type="text" name="title" size="10" value="<?php echo @$_GET['title'];?>"/> 
    关键字:<input type="text" name="keywords" size="10" value="<?php echo @$_GET['keywords'];?>"/> 
    作者:<input type="text" name="author" size="10" value="<?php echo @$_GET['author'];?>"/> 
    <input type="submit" value="搜索"/>
    <input type="button" value="全部信息" onclick="window.location='list3.php'"/>
    </form>
<!---------------->

2. 分页封装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
    //=======================
    //封装搜索的信息
    //定义一个封装搜索条件的数组变量
    $wherelist=array();
    //定义一个封装搜索的url,用于放置到url后面作为参数
    $urllist=array();
    //判断新闻标题是否有值就封装搜索条件
    if(!empty($_GET['title'])){
    $wherelist[]="title like '%{$_GET['title']}%'";
    $urllist[]="title={$_GET['title']}";
    }
    //判断关键字是否有值就封装搜索条件
    if(!empty($_GET['keywords'])){
    $wherelist[]="keywords like '%{$_GET['keywords']}%'";
    $urllist[]="keywords={$_GET['keywords']}";
    }
    //判断作者是否有值就封装搜索条件
    if(!empty($_GET['author'])){
    $wherelist[]="author like '%{$_GET['author']}%'";
    $urllist[]="author={$_GET['author']}";
    }
    //组装搜索条件
    //将数组合并成字符串用implode();
    if(count($wherelist)>0){
    $where=" where ".implode(" and ",$wherelist);
    $url=@"&".implode("&",$urllist);
    }
    //echo @$where;
    //echo @$url;
    //=======================
    ?>

3. 分页处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
    //=====插入分页处理代码=====
    //1 定义分页的变量
    $page=isset($_GET['page'])?$_GET['page']:1;//当前页数,默认为1
    $pageSize=4;    //页大小
    $maxRows="";    //最大数据条数
    $maxPages="";    //最大页数
    //获取最大数据条数
    @$sql="select count(*) from news {$where}";
    $res=mysql_query($sql,$conn);
    $maxRows=mysql_result($res,0,0);//定位从结果集中获取总数据的条数,就是获取第一个单元格中的值
    //3 计算出最大页数
    $maxPages=ceil($maxRows/$pageSize);//进一取整获取最大页数,7/3;
    //4 判断页数是否越界,判断是否有效
    if($page>$maxPages){
    $page=$maxPages;
    //判断是否超出了最大页
    }
    if($page<1){
    $page=1;
    }
    //拼接$sql,限制每页显示的条数
    $limit=" limit ".(($page-1)*$pageSize).",{$pageSize}";
    //起始位置是当前页减1乘以每页显示的条数
    //==========分页封装结束==============
    @$sql="select * from news {$where} order by addtime desc {$limit}";
    //limit 0,3表示从第一条记录到第三条记录
    //将最新的新闻先显示出来
    $result=@mysql_query($sql,$conn);
    ?>

具体实例:新闻搜索和分页程序:

4. 搜索和分页功能

list3.php 完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
header("content-Type:text/html;charset=utf-8");
?>
<?php
    require("menu.php");
    require("dbconfig.php");
?>
<title>新闻信息管理系统</title>
<script>
function dodel(id){
    //判断是否要删除
    if(confirm("确定要删除吗?")){
    window.location="action.php?action=del&id="+id;
    }
}
</script>
<center>
    <h2>搜索和分页浏览新闻</h2>
    <!--- 搜索表单--->
    <form action="list3.php" method="get">
    标题:<input type="text" name="title" size="10" value="<?php echo @$_GET['title'];?>"/> 
    关键字:<input type="text" name="keywords" size="10" value="<?php echo @$_GET['keywords'];?>"/> 
    作者:<input type="text" name="author" size="10" value="<?php echo @$_GET['author'];?>"/> 
    <input type="submit" value="搜索"/>
    <input type="button" value="全部信息" onclick="window.location='list3.php'"/>
    </form>
    <!---------------->
    <table border="1" cellpadding="2" cellspacing="0">
    <tr><th>新闻id号</th><th>新闻标题</th><th>发布者</th>
    <th>关键字</th><th>添加时间</th><th>新闻内容</th><th>操作</th>
    </tr>
    <?php
    //=======================
    //封装搜索的信息
    //定义一个封装搜索条件的数组变量
    $wherelist=array();
    //定义一个封装搜索的url,用于放置到url后面作为参数
    $urllist=array();
    //判断新闻标题是否有值就封装搜索条件
    if(!empty($_GET['title'])){
    $wherelist[]="title like '%{$_GET['title']}%'";
    $urllist[]="title={$_GET['title']}";
    }
    //判断关键字是否有值就封装搜索条件
    if(!empty($_GET['keywords'])){
    $wherelist[]="keywords like '%{$_GET['keywords']}%'";
    $urllist[]="keywords={$_GET['keywords']}";
    }
    //判断作者是否有值就封装搜索条件
    if(!empty($_GET['author'])){
    $wherelist[]="author like '%{$_GET['author']}%'";
    $urllist[]="author={$_GET['author']}";
    }
    //组装搜索条件
    //将数组合并成字符串用implode();
    if(count($wherelist)>0){
    $where=" where ".implode(" and ",$wherelist);
    $url=@"&".implode("&",$urllist);
    }
    //echo @$where;
    //echo @$url;
    //=======================
    ?>
    <?php
    //=====插入分页处理代码=====
    //1 定义分页的变量
    $page=isset($_GET['page'])?$_GET['page']:1;//当前页数,默认为1
    $pageSize=4;    //页大小
    $maxRows="";    //最大数据条数
    $maxPages="";    //最大页数
    //获取最大数据条数
    @$sql="select count(*) from news {$where}";
    $res=mysql_query($sql,$conn);
    $maxRows=mysql_result($res,0,0);//定位从结果集中获取总数据的条数,就是获取第一个单元格中的值
    //3 计算出最大页数
    $maxPages=ceil($maxRows/$pageSize);//进一取整获取最大页数,7/3;
    //4 判断页数是否越界,判断是否有效
    if($page>$maxPages){
    $page=$maxPages;
    //判断是否超出了最大页
    }
    if($page<1){
    $page=1;
    }
    //拼接$sql,限制每页显示的条数
    $limit=" limit ".(($page-1)*$pageSize).",{$pageSize}";
    //起始位置是当前页减1乘以每页显示的条数
    //==========分页封装结束==============
    @$sql="select * from news {$where} order by addtime desc {$limit}";
    //limit 0,3表示从第一条记录到第三条记录
    //将最新的新闻先显示出来
    $result=@mysql_query($sql,$conn);
    while($row=@mysql_fetch_assoc($result)){
    echo "<tr>";
    echo "<td>{$row['id']}</td>";
    echo "<td>{$row['title']}</td>";
    echo "<td>{$row['author']}</td>";
    echo "<td>{$row['keywords']}</td>";
    echo "<td>".date("Y-m-d H:i:s",$row['addtime'])."</td>";
    echo "<td>{$row['content']}</td>";
    echo "<td><a href='javascript:dodel({$row['id']})'>删除</a>  <a href='edit.php?id={$row['id']}'>修改</a></td>";
    echo "</tr>";
    }
    //释放结果集
    @mysql_free_result($result);
    mysql_close($conn);
    ?>
    </table>
    <?php
    //显示当前页数值,上一页和下一页
    echo "<br/>";
    echo "当前页 {$page}/{$maxPages}页 共计:{$maxRows}条  ";?>
    <a href="list3.php?page=1<?php echo @$url;?>">首页</a>  
    <a href="list3.php?page=<?php echo ($page-1).@$url;?>">上一页</a>  
    <!--这里用分割符号分离出来添加页数--->
    <a href="list3.php?page=<?php echo ($page+1).@$url;?>">下一页</a>  
    <a href="list3.php?page=<?php echo $maxPages.@$url;?>">尾页</a> 
</center>
  • Title: 关于PHP添加搜索和分页浏览功能
  • Author: algorain
  • Created at: 2017-02-19 12:08:09
  • Updated at: 2023-05-14 21:39:50
  • Link: http://www.rain1024.com/2017/02/19/php-article59/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments