PHP 如何实现网站的搜索和分页功能

爱站 02-19 30 0条评论
55Link友情链接交易平台
摘要: 要实现搜索功能,需要在前端页面提供一个搜索框,用户在搜索框中输入关键词并提交。后端PHP代码需要接收这个关键词,并根据这个关键词在数据库中进行查询,将查询结果返回给前端页面显示。可...

要实现搜索功能,需要在前端页面提供一个搜索框,用户在搜索框中输入关键词并提交。后端PHP代码需要接收这个关键词,并根据这个关键词在数据库中进行查询,将查询结果返回给前端页面显示。可以使用MySQL的LIKE语句进行模糊查询,比如 SELECT * FROM articles WHERE title LIKE '%$keyword%'

为避免在一个页面上显示大量数据,我们通常需要将数据分页显示。可以在前端页面提供上一页和下一页的链接,用户点击时带上当前页码传递给后端。后端PHP代码可以根据页码计算出需要显示的数据范围,并从数据库中查询出相应的数据返回给前端页面。比如使用SQL的LIMIT语句进行分页查询, SELECT * FROM articles LIMIT $start, $pageSize

通常情况下,搜索和分页功能会结合使用。比如在一个文章列表页面,用户可以输入关键词进行搜索,页面上会显示分页导航,用户可以切换页码查看更多搜索结果。后端PHP代码需要接收搜索关键词和页码两个参数,根据这两个参数从数据库中查询出相应的数据并返回给前端页面。


用PHP实现分页显示要求实现和图片一样的功能

希望你能用得上!<?php function page($page,$total,$phpfile,$pagesize=10,$pagelen=7){ $pagecode = ’’;//定义变量,存放分页生成的HTML $page = intval($page);//避免非数字页码 $total = intval($total);//保证总记录数值类型正确 if(!$total) return array();//总记录数为零返回空数组 $pages = ceil($total/$pagesize);//计算总分页 //处理页码合法性 if($page<1) $page = 1; if($page>$pages) $page = $pages; //计算查询偏移量 $offset = $pagesize*($page-1); //页码范围计算 $init = 1;//起始页码数 $max = $pages;//结束页码数 $pagelen = ($pagelen%2)?$pagelen:$pagelen+1;//页码个数 $pageoffset = ($pagelen-1)/2;//页码个数左右偏移量 //生成html $pagecode=’<div>’; $pagecode.=<span>$page/$pages</span>;//第几页,共几页 //如果是第一页,则不显示第一页和上一页的连接 if($page!=1){ $pagecode.=<a href=\{$phpfile}?page=1\><<</a>;//第一页 $pagecode.=<a href=\{$phpfile}?page=.($page-1).\><</a>;//上一页 } //分页数大于页码个数时可以偏移 if($pages>$pagelen){ //如果当前页小于等于左偏移 if($page<=$pageoffset){ $init=1; $max = $pagelen; }else{//如果当前页大于左偏移 //如果当前页码右偏移超出最大分页数 if($page+$pageoffset>=$pages+1){ $init = $pages-$pagelen+1; }else{ //左右偏移都存在时的计算 $init = $page-$pageoffset; $max = $page+$pageoffset; } } } //生成html for($i=$init;$i<=$max;$i++){ if($i==$page){ $pagecode.=’<span>’.$i.’</span>’; } else { $pagecode.=<a href=\{$phpfile}?page={$i}\>$i</a>; } } if($page!=$pages){ $pagecode.=<a href=\{$phpfile}?page=.($page+1).\>></a>;//下一页 $pagecode.=<a href=\{$phpfile}?page={$pages}\>>></a>;//最后一页 } $pagecode.=’</div>’; return array(’pagecode’=>$pagecode,’sqllimit’=>’ limit ’.$offset.’,’.$pagesize); } ?> 函数参数: $page 当前$_GET获得的页码 $total 总记录数 $phpfile 页码连接文件名 $pagesize 不用解释了吧 呵呵 $pagelen 最多显示几个页码 注意(奇数),对称嘛! 函数返回一个数组: pagecode 索引对应的内容是 生成的HTML 代码 sqllimit 索引对应的是sql limit 后缀 if($page<=$pageoffset){ $init=1; $max = $pagelen; }else{//如果当前页大于左偏移 //如果当前页码右偏移超出最大分页数 if($page+$pageoffset>=$pages+1){ $init = $pages-$pagelen+1; }else{ //左右偏移都存在时的计算 $init = $page-$pageoffset; $max = $page+$pageoffset; } } } //生成html for($i=$init;$i<=$max;$i++){ if($i==$page){ $pagecode.=’<span>’.$i.’</span>’; } else { $pagecode.=<a href=\{$phpfile}?page={$i}\>$i</a>; } } if($page!=$pages){ $pagecode.=<a href=\{$phpfile}?page=.($page+1).\>></a>;//下一页$pagecode.=<a href=\{$phpfile}?page={$pages}\>>></a>;//最后一页 } $pagecode.=<input type=\text\ size=\3\ onkeydown=\if(==13) {=’{$phpfile}?page=’+; return false;}\ /></div>; return array(’pagecode’=>$pagecode,’sqllimit’=>’ limit ’.$offset.’,’.$pagesize); } ?>

php分页跳转

你这个太麻烦我给你推荐一个 <?phpclass page {var $page_name=page;var $next_page=>;//下一页var $pre_page=<;//上一页var $first_page=<<首页;//首页var $last_page=尾页>>;//尾页var $pre_bar=<<;//上一分页条var $next_bar=>>;//下一分页条var $format_left=;var $format_right=;var $page_webmode=;/*** private**/ var $pagebarnum=10;//控制记录条的个数。 var $totalpage=0;//总页数var $nowindex=1;//当前页var $url=;//url地址头var $offset=0;/*** c*****tructor构造函数** @param array $array[total],$array[perpage],$array[nowindex],$array[url],$array[ajax]...*/function page($array){if(is_array($array)){ if(!array_key_exists(total,$array))$this->error(__FUNCTION__,need a param of total); $total=intval($array[total]); $perpage=(array_key_exists(perpage,$array))?intval($array[perpage]):10; $nowindex=(array_key_exists(nowindex,$array))?intval($array[nowindex]):; $url=(array_key_exists(url,$array))?$array[url]:;}else{ $total=$array; $perpage=10; $nowindex=; $url=;}if((!is_int($total))||($total<0))$this->error(__FUNCTION__,$total. is not a positive integer!);if((!is_int($perpage))||($perpage<=0))$this->error(__FUNCTION__,$perpage. is not a positive integer!);if(!empty($array[page_name]))$this->set(page_name,$array[page_name]);//设置pagename$this->_set_nowindex($nowindex);//设置当前页$this->_set_url($url);//设置链接地址$this->totalpage=ceil($total/$perpage);$this->total=$total;$this->offset=($this->nowindex-1)*$perpage;}/*** 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception** @param string $var* @param string $value*/function set($var,$value){if(in_array($var,get_object_vars($this))) $this->$var=$value;else { $this->error(__FUNCTION__,$var. does not belong to PB_Page!);}}/*** 获取显示下一页的代码* * @param string $style* @return string*/function next_page($style=,$nowindex_style=){if($this->nowindex<$this->totalpage){ return $this->_get_link($this->_get_url($this->nowindex+1),$this->next_page,$style);}return <span.$nowindex_style.>.$this->next_page.</span>;}/*** 获取显示“上一页”的代码** @param string $style* @return string*/function pre_page($style=,$nowindex_style=){if($this->nowindex>1){ return $this->_get_link($this->_get_url($this->nowindex-1),$this->pre_page,$style);}return <span.$nowindex_style.>.$this->pre_page.</span>;}/*** 获取显示“首页”的代码** @return string*/function first_page($style=,$nowindex_style=){if($this->nowindex==1){return <span.$nowindex_style.>.$this->first_page.</span>;}return $this->_get_link($this->_get_url(1),$this->first_page,$style);}/*** 获取显示“尾页”的代码** @return string*/function last_page($style=,$nowindex_style=){if($this->nowindex==$this->totalpage){return <span.$nowindex_style.>.$this->last_page.</span>;}return $this->_get_link($this->_get_url($this->totalpage),$this->last_page,$style);}function nowbar($style=,$nowindex_style=){$plus=ceil($this->pagebarnum/2);if($this->pagebarnum-$plus+$this->nowindex>$this->totalpage)$plus=($this->pagebarnum-$this->totalpage+$this->nowindex);$begin=$this->nowindex-$plus+1;$begin=($begin>=1)?$begin:1;$return=;for($i=$begin;$i<$begin+$this->pagebarnum;$i++){ if($i<=$this->totalpage){if($i!=$this->nowindex)$return.=$this->_get_text($this->_get_link($this->_get_url($i),$i,$style));else $return.=$this->_get_text(<span.$nowindex_style.>.$i.</span>); }else{break; } $return.=\n;}unset($begin);return $return;}/*** 获取显示跳转按钮的代码** @return string*/function select(){$return=<select.$this->url.\+*****[] >;for($i=1;$i<=$this->totalpage;$i++){ if($i==$this->nowindex){$return.=<option value=.$i. selected>.$i.</option>; }else{$return.=<option value=.$i.>.$i.</option>; }}unset($i);$return.=</select>;return $return;}/*** 获取mysql 语句中limit需要的值** @return string*/function offset(){return $this->offset;}/*** 控制分页显示风格(你可以增加相应的风格)** @param int $mode* @return string*/function show($mode=1,$style=,$nowindex_style=){switch ($mode){ case 1:$this->next_page=下一页;$this->pre_page=上一页;$this->first_page=首页;$this->last_page=尾页;return $this->first_page($style,$nowindex_style). .$this->pre_page($style,$nowindex_style). .$this->next_page($style,$nowindex_style). .$this->last_page($style,$nowindex_style). (当前第<span>.$this->nowindex.</span>页 共<span>.$this->totalpage.</span>页 <span>.$this->total.</span>条记录);break; case 2:$this->next_page=下一页;$this->pre_page=上一页;$this->first_page=首页;$this->last_page=尾页;return $this->first_page($style,$nowindex_style). .$this->pre_page($style,$nowindex_style). .$this->next_page($style,$nowindex_style). .$this->last_page($style,$nowindex_style). 第.$this->select().页 (当前第<span>.$this->nowindex.</span>页 共<span>.$this->totalpage.</span>页 <span>.$this->total.</span>条记录);break; case 3:$this->next_page=下一页;$this->pre_page=上一页;$this->first_page=首页;$this->last_page=尾页;return $this->pre_page($style,$nowindex_style). .$this->nowbar($style,$nowindex_style). .$this->next_page($style,$nowindex_style). (当前第<span>.$this->nowindex.</span>页 共<span>.$this->totalpage.</span>页 <span>.$this->total.</span>条记录);break; case 4:$this->next_page=下一页;$this->pre_page=上一页;return $this->pre_page($style,$nowindex_style). .$this->nowbar($style,$nowindex_style). .$this->next_page($style,$nowindex_style). 第.$this->select().页 (当前第<span>.$this->nowindex.</span>页 共<span>.$this->totalpage.</span>页 <span>.$this->total.</span>条记录);break; case 5: $this->next_page=>;$this->pre_page=<; $this->first_page=<<;$this->last_page=>>;return $this->first_page($style,$nowindex_style). .$this->pre_page($style,$nowindex_style). .$this->nowbar($style,$nowindex_style). .$this->next_page($style,$nowindex_style). .$this->last_page($style,$nowindex_style). (当前第<span>.$this->nowindex.</span>页 共<span>.$this->totalpage.</span>页 <span>.$this->total.</span>条记录);break;case 6: $pagehtml=<div>; if($this->nowindex>1) { $pagehtml.=<span class=\pagenum-l\><a href=\{$this->_get_url($this->nowindex-1)}\><img src=\images/page_\ /></a></span>;}else{$pagehtml.=<span class=\pagenum-l\><img src=\images/page_\ /></span>;} $pagehtml.=<span class=\pagenum-c\>; $pagehtml.=<table><tr>;$plus=ceil($this->pagebarnum/2);if($this->pagebarnum-$plus+$this->nowindex>$this->totalpage)$plus=($this->pagebarnum-$this->totalpage+$this->nowindex);$begin=$this->nowindex-$plus+1;$begin=($begin>=1)?$begin:1;for($i=$begin;$i<$begin+$this->pagebarnum;$i++){ if($i<=$this->totalpage){if($i!=$this->nowindex)$pagehtml.=<td> <a href=\{$this->_get_url($i)}\>{$i}</a> </td>; else $pagehtml.=<td> {$i} </td>; }else{break; } $pagehtml.=\n;}unset($begin);$pagehtml.=</tr></table>; $pagehtml.=</span>; if($this->nowindex<$this->totalpage){$pagehtml.=<span class=\pagenum-r\><a href=\{$this->_get_url($this->nowindex+1)}\><img src=\images/page_\ /></a></span>; }else{ $pagehtml.=<span class=\pagenum-r\><img src=\images/page_\ /></span>;}$pagehtml.=</div>;return $pagehtml; break;}}/*----------------private function (私有方法)-----------------------------------------------------------*//*** 设置url头地址* @param: String $url* @return boolean*/function _set_url($url=){if($this->page_webmode!=php&&$url!=){$this->url=$url;}else{if(!empty($url)){//手动设置 $this->url=$url.((stristr($url,?))?&:?).$this->page_name.=;}else{//自动获取 if(empty($_SERVER[QUERY_STRING])){ //不存在QUERY_STRING时$this->url=$_SERVER[REQUEST_URI].?.$this->page_name.=; }else{ //if(stristr($_SERVER[QUERY_STRING],$this->page_name.=)){//地址存在页面参数 $this->url=str_replace($this->page_name.=.$this->nowindex,,$_SERVER[REQUEST_URI]); $last=$this->url[strlen($this->url)-1]; if($last==?||$last==&){ $this->url.=$this->page_name.=; }else{ $this->url.=&.$this->page_name.=; }}else{// $this->url=$_SERVER[REQUEST_URI].&.$this->page_name.=;}//end if }//end if}//end if}}/*** 设置当前页面**/function _set_nowindex($nowindex){if(empty($nowindex)){ //系统获取 if(isset($_GET[$this->page_name])){$this->nowindex=intval($_GET[$this->page_name]); }}else{//手动设置 $this->nowindex=intval($nowindex);}}/*** 为指定的页面返回地址值** @param int $pageno* @return string $url*/function _get_url($pageno=1){if($this->page_webmode==php||$this->page_webmode==){return $this->url.$pageno;}else{return $this->url.(($pageno==1)?:_.$pageno)...$this->page_webmode;}}/*** 获取分页显示文字,比如说默认情况下_get_text(<a href=>1</a>)将返回[<a href=>1</a>]** @param String $str* @return string $url*/ function _get_text($str){return $this->format_left.$str.$this->format_right;}/** * 获取链接地址*/function _get_link($url,$text,$style=){$style=(empty($style))?:class=.$style.; return <a .$style. href=.$url.>.$text.</a>;}/** * 出错处理方式*/function error($function,$errormsg){ die(Error in file <b>.__FILE__.</b> ,Function <b>.$function.()</b> :.$errormsg);}}?>调用方法:<?include();$queryrow = $DB->query(SELECT * FROM article where article_sortid=$cls and type=1 ORDER BY article_id DESC);$rows=$DB->num_rows($queryrow);$total=$rows;$pagesize=15;$currentRow = empty($_GET[page]) ? 0 : ($_GET[page]-1)* $pagesize;$queryId = $DB->query(SELECT * FROM article where article_sortid=$cls and type=1 ORDER BY article_id DESC limit $currentRow,$pagesize);$iiii=1;while ($a_array=$DB->fetch_array($queryId)) {?> <table border=0 cellspacing=0 cellpadding=0><tr><td> </td><td align=center> <?php if($iiii>10) {echo $iiii; } else {echo 0.$iiii; } ?></td><td><a href=?id=<?=$a_array[article_id]?>><?=$a_array[article_title]?></a></td><td><?=$a_array[article_hits]?></td><td><?=substr($a_array[article_addtime],0,10)?></td> </tr></table><?php$iiii++;}if ($iiii==1) echo 抱歉,没有搜索到任何信息。 ;?> <table border=0 cellspacing=0 cellpadding=0><tr><td align=center valign=top><table border=0 align=center cellpadding=0 cellspacing=0><tr><td align=center></td><td align=center></td></tr><tr><td colspan=2 align=center valign=bottom><?php$page=new page(array(total=>$total,perpage=>$pagesize));$pagehtml=$page->show(6,page,curr);echo $pagehtml;?> 这个是调用方法$pagehtml=$page->show(6,page,curr); 看到这个没有 里面是6 我调用的是6这种方法显示的里面可以选择0 ,1, 2, 3, 4, 5, 6, 六中方法分页显示不同具体的你可以试试 我目前用6的比较多点呵呵

php 多条件搜索后如何分页 - 技术问答

$sql =\\SELECT * FROM table \;if(isset($_POST[\val\])){? ?? ???$sql.=\WHERE field=\_real_escape_string($_POST[\val\]).;}......就这样最后加上$sql.\LIMIT \.$start.\, \. $length; 就OK了判断时,有那个值就联进来,没有,就拉倒;没什么难的嘛;和普通分页一样

文章版权及转载声明:

作者:爱站本文地址:http://www.awz.cc/post/13407.html发布于 02-19
文章转载或复制请以超链接形式并注明出处爱网站

赞(0