分页查询 zjcxc [原作]
关键字 分页
出处
/*--用存储过程实现的分页程序 显示指定表、视图、查询结果的第X页
对于表中主键或标识列的情况,直接从原表取数查询,其它情况使用临时表的方法
如果视图或查询结果中有主键,不推荐此方法--*//*--调用示例
exec p_show '地区资料' exec p_show '地区资料',5,3,'地区编号,地区名称,助记码','地区编号'
--*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_show]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_show]
GOCREATE Proc p_show
@QueryStr nvarchar(4000), --表名、视图名、查询语句
@PageSize int=10, --每页的大小(行数)
@PageCurrent int=1, --要显示的页
@FdShow nvarchar (4000)='', --要显示的字段列表,如果查询结果有标识字段,需要指定此值,且不包含标识字段
@FdOrder nvarchar (1000)='' --排序字段列表
as
declare @FdName nvarchar(250) --表中的主键或表、临时表中的标识列名
,@Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号
,@Obj_ID int --对象ID
--表中有复合主键的处理
declare @strfd nvarchar(2000) --复合主键列表
,@strjoin nvarchar(4000) --连接字段
,@strwhere nvarchar(2000) --查询条件
select @Obj_ID=object_id(@QueryStr)
,@FdShow=case isnull(@FdShow,'') when '' then ' *' else ' '+@FdShow end
,@FdOrder=case isnull(@FdOrder,'') when '' then '' else ' order by '+@FdOrder end
,@QueryStr=case when @Obj_ID is not null then ' '+@QueryStr else ' ('+@QueryStr+') a' end--如果显示第一页,可以直接用top来完成
if @PageCurrent=1
begin
select @Id1=cast(@PageSize as varchar(20))
exec('select top '+@Id1+@FdShow+' from '+@QueryStr+@FdOrder)
return
end--如果是表,则检查表中是否有标识更或主键
if @Obj_ID is not null and objectproperty(@Obj_ID,'IsTable')=1
begin
select @Id1=cast(@PageSize as varchar(20))
,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20)) select @FdName=name from syscolumns where id=@Obj_ID and status=0x80
if @@rowcount=0 --如果表中无标识列,则检查表中是否有主键
begin
if not exists(select 1 from sysobjects where parent_obj=@Obj_ID and xtype='PK')
goto lbusetemp --如果表中无主键,则用临时表处理 select @FdName=name from syscolumns where id=@Obj_ID and colid in(
select colid from sysindexkeys where @Obj_ID=id and indid in(
select indid from sysindexes where @Obj_ID=id and name in(
select name from sysobjects where xtype='PK' and parent_obj=@Obj_ID
)))
if @@rowcount>1 --检查表中的主键是否为复合主键
begin
select @strfd='',@strjoin='',@strwhere=''
select @strfd=@strfd+',['+name+']'
,@strjoin=@strjoin+' and a.['+name+']=b.['+name+']'
,@strwhere=@strwhere+' and b.['+name+'] is null'
from syscolumns where id=@Obj_ID and colid in(
select colid from sysindexkeys where @Obj_ID=id and indid in(
select indid from sysindexes where @Obj_ID=id and name in(
select name from sysobjects where xtype='PK' and parent_obj=@Obj_ID
)))
select @strfd=substring(@strfd,2,2000)
,@strjoin=substring(@strjoin,5,4000)
,@strwhere=substring(@strwhere,5,4000)
goto lbusepk
end
end
end
else
goto lbusetemp/*--使用标识列或主键为单一字段的处理方法--*/
lbuseidentity:
exec('select top '+@Id1+@FdShow+' from '+@QueryStr
+' where '+@FdName+' not in(select top '
+@Id2+' '+@FdName+' from '+@QueryStr+@FdOrder
+')'+@FdOrder
)
return/*--表中有复合主键的处理方法--*/
lbusepk:
exec('select '+@FdShow+' from(select top '+@Id1+' a.* from
(select top 100 percent * from '+@QueryStr+@FdOrder+') a
left join (select top '+@Id2+' '+@strfd+'
from '+@QueryStr+@FdOrder+') b on '+@strjoin+'
where '+@strwhere+') a'
)
return/*--用临时表处理的方法--*/
lbusetemp:
select @FdName='[ID_'+cast(newid() as varchar(40))+']'
,@Id1=cast(@PageSize*(@PageCurrent-1) as varchar(20))
,@Id2=cast(@PageSize*@PageCurrent-1 as varchar(20))exec('select '+@FdName+'=identity(int,0,1),'+@FdShow+'
into #tb from'+@QueryStr+@FdOrder+'
select '+@FdShow+' from #tb where '+@FdName+' between '
+@Id1+' and '+@Id2
)GO
关键字 分页
出处
/*--用存储过程实现的分页程序 显示指定表、视图、查询结果的第X页
对于表中主键或标识列的情况,直接从原表取数查询,其它情况使用临时表的方法
如果视图或查询结果中有主键,不推荐此方法--*//*--调用示例
exec p_show '地区资料' exec p_show '地区资料',5,3,'地区编号,地区名称,助记码','地区编号'
--*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_show]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_show]
GOCREATE Proc p_show
@QueryStr nvarchar(4000), --表名、视图名、查询语句
@PageSize int=10, --每页的大小(行数)
@PageCurrent int=1, --要显示的页
@FdShow nvarchar (4000)='', --要显示的字段列表,如果查询结果有标识字段,需要指定此值,且不包含标识字段
@FdOrder nvarchar (1000)='' --排序字段列表
as
declare @FdName nvarchar(250) --表中的主键或表、临时表中的标识列名
,@Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号
,@Obj_ID int --对象ID
--表中有复合主键的处理
declare @strfd nvarchar(2000) --复合主键列表
,@strjoin nvarchar(4000) --连接字段
,@strwhere nvarchar(2000) --查询条件
select @Obj_ID=object_id(@QueryStr)
,@FdShow=case isnull(@FdShow,'') when '' then ' *' else ' '+@FdShow end
,@FdOrder=case isnull(@FdOrder,'') when '' then '' else ' order by '+@FdOrder end
,@QueryStr=case when @Obj_ID is not null then ' '+@QueryStr else ' ('+@QueryStr+') a' end--如果显示第一页,可以直接用top来完成
if @PageCurrent=1
begin
select @Id1=cast(@PageSize as varchar(20))
exec('select top '+@Id1+@FdShow+' from '+@QueryStr+@FdOrder)
return
end--如果是表,则检查表中是否有标识更或主键
if @Obj_ID is not null and objectproperty(@Obj_ID,'IsTable')=1
begin
select @Id1=cast(@PageSize as varchar(20))
,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20)) select @FdName=name from syscolumns where id=@Obj_ID and status=0x80
if @@rowcount=0 --如果表中无标识列,则检查表中是否有主键
begin
if not exists(select 1 from sysobjects where parent_obj=@Obj_ID and xtype='PK')
goto lbusetemp --如果表中无主键,则用临时表处理 select @FdName=name from syscolumns where id=@Obj_ID and colid in(
select colid from sysindexkeys where @Obj_ID=id and indid in(
select indid from sysindexes where @Obj_ID=id and name in(
select name from sysobjects where xtype='PK' and parent_obj=@Obj_ID
)))
if @@rowcount>1 --检查表中的主键是否为复合主键
begin
select @strfd='',@strjoin='',@strwhere=''
select @strfd=@strfd+',['+name+']'
,@strjoin=@strjoin+' and a.['+name+']=b.['+name+']'
,@strwhere=@strwhere+' and b.['+name+'] is null'
from syscolumns where id=@Obj_ID and colid in(
select colid from sysindexkeys where @Obj_ID=id and indid in(
select indid from sysindexes where @Obj_ID=id and name in(
select name from sysobjects where xtype='PK' and parent_obj=@Obj_ID
)))
select @strfd=substring(@strfd,2,2000)
,@strjoin=substring(@strjoin,5,4000)
,@strwhere=substring(@strwhere,5,4000)
goto lbusepk
end
end
end
else
goto lbusetemp/*--使用标识列或主键为单一字段的处理方法--*/
lbuseidentity:
exec('select top '+@Id1+@FdShow+' from '+@QueryStr
+' where '+@FdName+' not in(select top '
+@Id2+' '+@FdName+' from '+@QueryStr+@FdOrder
+')'+@FdOrder
)
return/*--表中有复合主键的处理方法--*/
lbusepk:
exec('select '+@FdShow+' from(select top '+@Id1+' a.* from
(select top 100 percent * from '+@QueryStr+@FdOrder+') a
left join (select top '+@Id2+' '+@strfd+'
from '+@QueryStr+@FdOrder+') b on '+@strjoin+'
where '+@strwhere+') a'
)
return/*--用临时表处理的方法--*/
lbusetemp:
select @FdName='[ID_'+cast(newid() as varchar(40))+']'
,@Id1=cast(@PageSize*(@PageCurrent-1) as varchar(20))
,@Id2=cast(@PageSize*@PageCurrent-1 as varchar(20))exec('select '+@FdName+'=identity(int,0,1),'+@FdShow+'
into #tb from'+@QueryStr+@FdOrder+'
select '+@FdShow+' from #tb where '+@FdName+' between '
+@Id1+' and '+@Id2
)GO
函数:Pagination($total,$per)
功能:分页
参数:$total 总数,$per 每页显示数
备注:Programmed By Surfchen,http://yubeinet.com
******************************************/
function Pagination($total,$per)
{
$n=$total/$per;
$page_num=ceil($n);
if ($page_num==1)
{
return false;
}
$url=basename($_SERVER['PHP_SELF']);
$query_array=explode("&",$_SERVER['argv'][0]);
foreach ($query_array as $key => $value)
{
if (strstr($value,"page="))
{
unset($query_array[$key]);
}
}
$query_string=implode("&",$query_array);
for ($page=1;$page<=$page_num;$page++)
{
if ($_GET['page']==$page)
{
$pages.=" [{$page}]";
continue;
}
if (empty($_GET['page']) and $page==1)
{
$pages.=" [{$page}]";
continue;
}
$pages.=" <a href=\"{$url}?{$query_string}&page={$page}\">$page</a> ";
}
$pages.="<br />";
return $pages;
}
'+++++++++++++++++++++++++++++++++++++
'◆模块名称: 公共翻页模块
'◆文 件 名: TurnPage.asp
'◆传入参数: Rs_tmp (记录集), PageSize (每页显示的记录条数)
'◆输 出: 记录集翻页显示功能
'◆设 计: JM
'◆调用方法:
'<!--#include file="turnpage.asp"--> 引用该文件
'host = "127.0.0.1"
'id = "username"
'pwd = "password"
'db = "database"
'cnstr = "Provider=SQLOLEDB.1;User ID="& id &";Password="& pwd &";Data Source="& host &";Initial Catalog="& db &";Persist Security Info=True;Connect Timeout=15"
'set conn = Server.CreateObject("Adodb.Connection")
'conn.open cnstr
'sql ="select * from tablename order by id desc" '定义要分页显示的结果集
'set RS = Server.CreateObject("Adodb.RecordSet")
'Rs.open sql, conn, 1, 1
'
'Dim RowCount
'RowCount = n '每页显示的记录条数 n >= 1
'iRowCount = 0 '用于计算页内编号,Do While循环条件计数
'Call TurnPage(Rs,RowCount,PageNo) '显示翻页文字
'
'要显示的表头,如:<tr><td>记录号</td>....</tr>
'
'Do While Not RS.EOF and iRowCount < RowCount '此处RS与上面建立的RS名称要一致
'iRowCount = iRowCount + 1 '用于计算页内编号
'RecNo = (PageNo - 1) * RowCount + iRowCount 'RecNo 为总记录编号
'要显示的表内容,如:<tr><td><%=RecNo%></td>.... </tr>
'rs.movenext
'loop
'+++++++++++++++++++++++++++++++++++++
%>
<% Sub TurnPageCommonText(TotalPage,PageNo,RecordCount,FileName) %>
<div align="center"><table border=0 width=666 style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0" height="50"><tr><td width="262" align=center>总页数:<font color=#ff3333><%=TotalPage%></font>页 当前第<font color=#ff3333><%=PageNo%></font>页 总计<font color=#ff3333><%=RecordCount%></font>条记录</td><td width="225" align="right"><div align="center">
<%If RecordCount = 0 or TotalPage = 1 Then%>首页|前页|后页|末页
<%Else%>
<%If (PageNo - 1) <> 0 Then %>|<a href="<%=fileName%>?PageNo=1"> 首页 </a>|<%Else%>| <font color="#808080">首页</font> |<%End If%>
<%If PageNo - 1 = 0 Then%> <font color="#808080">前页</font> |<%Else%><a href="<%=fileName%>?PageNo=<%=PageNo-1%>"> 前页 </a>|<%End If%>
<%If PageNo+1 > TotalPage Then%> <font color="#808080">后页</font> |<%Else%><a href="<%=fileName%>?PageNo=<%=PageNo+1%>"> 后页 </a>|<%End If%>
<%If (PageNo - TotalPage) <> 0 Then %><a href="<%=fileName%>?PageNo=<%=TotalPage%>"> 末页 </a>|<%Else%> <font color="#808080">末页</font> |<%End If%>
<%End If%></div></td><td width=212 align=center>
<!--webbot BOT="GeneratedScript" PREVIEW=" " startspan --><script Language="JavaScript" Type="text/javascript"><!--
function FrontPage_Form1_Validator(theForm)
{ var checkOK = "0123456789-";
var checkStr = theForm.PageNo.value;
var allValid = true;
var validGroups = true;
var decPoints = 0;
var allNum = "";
for (i = 0; i < checkStr.length; i++)
{
ch = checkStr.charAt(i);
for (j = 0; j < checkOK.length; j++)
if (ch == checkOK.charAt(j))
break;
if (j == checkOK.length)
{
allValid = false;
break;
}
allNum += ch;
}
if (!allValid)
{
alert("在 页码 域中,只能输入 数字 字符。");
theForm.PageNo.focus();
return (false);
} var chkVal = allNum;
var prsVal = parseInt(allNum);
if (chkVal != "" && !(prsVal >= 1))
{
alert("请在 页码 域中输入值 大于或等于 1。");
theForm.PageNo.focus();
return (false);
}
return (true);
}
//--></script><!--webbot BOT="GeneratedScript" endspan --><form name="FrontPage_Form1" method="post" action="" onsubmit="return FrontPage_Form1_Validator(this)" language="JavaScript">
转到第
<!--webbot bot="Validation" s-display-name="页码" s-data-type="Integer" s-number-separators="x" s-validation-constraint="Greater than or equal to" s-validation-value="1" -->
<input type=text name=PageNo size="<%=len(cstr(TotalPage))+1%>" <%If TotalPage = 1 Then%> readonly disabled<%End If%>>页
<input type="submit" name="Submit" value="Go" <% If TotalPage = 1 Then%>disabled<%End If%>>
</td>
</form></tr></table></div>
<%End Sub%>
<%'---------------------------------------------------%>
<% Sub TurnPage(ByRef Rs_tmp,PageSize,o_PageNo)
'ByRef表示该参数按引用传递 Rs_tmp 记录集 ; PageSize 每页显示的记录条数;返回三个数值给TurnPageBottom使用
Dim TotalPage '总页数
Dim PageNo '当前显示的是第几页
Dim RecordCount '总记录条数
Rs_tmp.PageSize = PageSize
RecordCount = Rs_tmp.RecordCount
TotalPage = INT(RecordCount / PageSize * -1)*-1
PageNo = Request.QueryString ("PageNo") '直接输入页数跳转;
If Request.Form("PageNo")<>"" Then PageNo = Request.Form("PageNo")
If PageNo = "" then PageNo = 1 '如果没有选择第几页,则默认显示第一页;
If (PageNo - TotalPage)>0 then PageNo = 1 '如果提交的页码大于总页数则回到第一页
If RecordCount <> 0 then
Rs_tmp.AbsolutePage = PageNo
End If
'获取当前文件名,使得每次翻页都在当前页面进行;
Dim fileName,postion
fileName = Request.ServerVariables("script_name")
postion = InstrRev(fileName,"/")+1
fileName = Mid(fileName,postion)
Call TurnPageCommonText(TotalPage,PageNo,RecordCount,FileName)
o_PageNo = PageNo
End Sub%>
<%'---------------------------------------------------%>
用户提交搜索条件后,提交的页面依然是search.php.想要把搜索的结果分页显示出来,可是我只能点第一个分页,点第二页就不行了,能说下这是怎么回事吗?
用MYSQL的LIMIT进行查询限制
用我那个函数进行分页
require("config.php");
require("./include/db_mysql.php");
require("./include/global.php");
$db=new db_mysql;
$db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0);
if(!$_POST[searchmember]) {?>
<br>
<br><form method='post' action='fenye.php' ecnctype=multipart/form-data>
<table cellspacing="0" cellpadding="0" border="0" width="80%" align="center">
<tr><td bgcolor="#89959b">
<table border="0" cellspacing="1" cellpadding="4" width="100%"><tr><td class="header" colspan="2">搜索您要编辑的用户</td></tr>
<tr><td bgcolor="#EDEDED">所在用户组:</td>
<td align="right" bgcolor="#F5F5F5">
<select name="userstatus">
<option value="未激活">未激活</option>
<?php
$result=$db->select("select * from usergroup where 1=1");
while($arr=mysql_fetch_array($result)){
echo "<option value=\"$arr[status]\">".$arr[status]."</option>";
}
?>
</select></td></tr>
<tr><td bgcolor="#EDEDED">姓名包含:</td>
<td align="right" bgcolor="#F5F5F5"><input type="text" name="username" size="40"></td></tr><tr><td bgcolor="#EDEDED">借书证号包含:</td>
<td align="right" bgcolor="#F5F5F5"><input type="text" name="usercard" size="40"></td></tr><tr><td bgcolor="#EDEDED">所在班级:</td>
<td align="right" bgcolor="#F5F5F5"><input type="text" name="userclass" size="40"></td></tr>
</table></td></tr></table><br><center>
<input type="submit" name="searchmember" value="搜索用户">
</center></form>
<?php
}else{ if( isset($_GET['page']) ){
$page = intval( $_GET['page'] );
}
else{
$page = 1;
}
$sql="user_status='$_POST[userstatus]'";
if($_POST[userclass]){
$sql=$sql." and user_class like '%$_POST[userclass]%' ";
}
if($_POST[username]) {
$sql=$sql." and user_name like '%$_POST[username]%'";
}
if($_POST[usercard]) {
$sql=$sql." and user_card like '%$_POST[usercard]%'";
} $queryString=$sql;
$sql = "select * from userinfo where $queryString ";
$per=5;
$total=@mysql_num_rows($db->select($sql));
$sql = $sql."limit ". ($page-1)*$per .", $per";
$result=mysql_query($sql);
while($arr=mysql_fetch_array($result)){
echo $arr[user_name];
echo "<br>";
}echo Pagination($total,$per);
}
?>
为什么分页的结果显示出来了,但是点第二页的时候就显示最开始的fenye.php的内容?
我的查询和显示都是在fenye.php
小弟跪求解决方法,请大哥们帮忙看下或者调试下吧,我的qq:23385424,
require("config.php");
require("./include/db_mysql.php");
require("./include/global.php");
$db=new db_mysql;
$db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0);
session_start();
if(empty($_POST['searchmember']) and empty($_SESSION['searchmember'])) {?>
<br>
<br><form method='post' action='fenye.php' ecnctype=multipart/form-data>
<table cellspacing="0" cellpadding="0" border="0" width="80%" align="center">
<tr><td bgcolor="#89959b">
<table border="0" cellspacing="1" cellpadding="4" width="100%"><tr><td class="header" colspan="2">搜索您要编辑的用户</td></tr>
<tr><td bgcolor="#EDEDED">所在用户组:</td>
<td align="right" bgcolor="#F5F5F5">
<select name="userstatus">
<option value="未激活">未激活</option>
<?php
$result=$db->select("select * from usergroup where 1=1");
while($arr=mysql_fetch_array($result)){
echo "<option value=\"$arr[status]\">".$arr[status]."</option>";
}
?>
</select></td></tr>
<tr><td bgcolor="#EDEDED">姓名包含:</td>
<td align="right" bgcolor="#F5F5F5"><input type="text" name="username" size="40"></td></tr><tr><td bgcolor="#EDEDED">借书证号包含:</td>
<td align="right" bgcolor="#F5F5F5"><input type="text" name="usercard" size="40"></td></tr><tr><td bgcolor="#EDEDED">所在班级:</td>
<td align="right" bgcolor="#F5F5F5"><input type="text" name="userclass" size="40"></td></tr>
</table></td></tr></table><br><center>
<input type="submit" name="searchmember" value="搜索用户">
</center></form>
<?php
}else {
$sql="user_status='$_POST[userstatus]'";//不知道你这句有什么用
if (!empty($_POST['searchmember'])
{
$_SESSION['searchmember']=$_POST['searchmember'];
if($_POST['userclass']){
$_SESSION['userclass']=$_POST['userclass'];
$sql=$sql." and user_class like '%$_POST[userclass]%' ";
}
if($_POST['username']) {
$_SESSION['username']=$_POST['username'];
$sql=$sql." and user_name like '%$_POST[username]%'";
}
if($_POST['usercard']) {
$_SESSION['usercard']=$_POST['usercard'];
$sql=$sql." and user_card like '%$_POST[usercard]%'";
}
}
else
{
if($_SESSION['userclass']){
$sql=$sql." and user_class like '%$_POST[userclass]%' ";
}
if($_SESSION['username']) {
$sql=$sql." and user_name like '%$_POST[username]%'";
}
if($_SESSION['usercard']) {
$sql=$sql." and user_card like '%$_POST[usercard]%'";
}
}if( isset($_GET['page']) ){
$page = intval( $_GET['page'] );
}
else{
$page = 1;
}$queryString=$sql;$sql = "select * from userinfo where $queryString ";
$per=5;
$total=@mysql_num_rows($db->select($sql));
$sql = $sql."limit ". ($page-1)*$per .", $per";
$result=mysql_query($sql);
while($arr=mysql_fetch_array($result)){echo $arr[user_name];
echo "<br>";
}echo Pagination($total,$per);
}
?>
require("config.php");
require("./include/db_mysql.php");
require("./include/global.php");
$db=new db_mysql;
$db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0);
session_start();
if(empty($_POST['searchmember']) and empty($_SESSION['searchmember'])) {?>
<br>
<br><form method='post' action='fenye.php' ecnctype=multipart/form-data>
<table cellspacing="0" cellpadding="0" border="0" width="80%" align="center">
<tr><td bgcolor="#89959b">
<table border="0" cellspacing="1" cellpadding="4" width="100%"><tr><td class="header" colspan="2">搜索您要编辑的用户</td></tr>
<tr><td bgcolor="#EDEDED">所在用户组:</td>
<td align="right" bgcolor="#F5F5F5">
<select name="userstatus">
<option value="未激活">未激活</option>
<?php
$result=$db->select("select * from usergroup where 1=1");
while($arr=mysql_fetch_array($result)){
echo "<option value=\"$arr[status]\">".$arr[status]."</option>";
}
?>
</select></td></tr>
<tr><td bgcolor="#EDEDED">姓名包含:</td>
<td align="right" bgcolor="#F5F5F5"><input type="text" name="username" size="40"></td></tr><tr><td bgcolor="#EDEDED">借书证号包含:</td>
<td align="right" bgcolor="#F5F5F5"><input type="text" name="usercard" size="40"></td></tr><tr><td bgcolor="#EDEDED">所在班级:</td>
<td align="right" bgcolor="#F5F5F5"><input type="text" name="userclass" size="40"></td></tr>
</table></td></tr></table><br><center>
<input type="submit" name="searchmember" value="搜索用户">
</center></form>
<?php
}else {
$sql="user_status='$_POST[userstatus]'";//不知道你这句有什么用
if (!empty($_POST['searchmember'])
{
$_SESSION['searchmember']=$_POST['searchmember'];
if($_POST['userclass']){
$_SESSION['userclass']=$_POST['userclass'];
$sql=$sql." and user_class like '%$_POST[userclass]%' ";
}
if($_POST['username']) {
$_SESSION['username']=$_POST['username'];
$sql=$sql." and user_name like '%$_POST[username]%'";
}
if($_POST['usercard']) {
$_SESSION['usercard']=$_POST['usercard'];
$sql=$sql." and user_card like '%$_POST[usercard]%'";
}
}
else
{
if($_SESSION['userclass']){
$sql=$sql." and user_class like '%$_SESSION[userclass]%' ";
}
if($_SESSION['username']) {
$sql=$sql." and user_name like '%$_SESSION[username]%'";
}
if($_SESSION['usercard']) {
$sql=$sql." and user_card like '%$_SESSION[usercard]%'";
}
}if( isset($_GET['page']) ){
$page = intval( $_GET['page'] );
}
else{
$page = 1;
}$queryString=$sql;$sql = "select * from userinfo where $queryString ";
$per=5;
$total=@mysql_num_rows($db->select($sql));
$sql = $sql."limit ". ($page-1)*$per .", $per";
$result=mysql_query($sql);
while($arr=mysql_fetch_array($result)){echo $arr['user_name'];
echo "<br>";
}echo Pagination($total,$per);
}
?>
但是
我试了下出现这个错误
Parse error: parse error, unexpected '{' in H:\tsg\test3.php on line 46
if (!empty($_POST['searchmember'])
{
就是这里,但是我仔细的看了下,没发现有什么地方不对啊!太感谢您了!
虽然我还没有解决这个问题
改为
if (!empty($_POST['searchmember']))
还是不行啊,
http://gun.x117.net/tsg/fenye.php这个页面就是结果,但是点第二页不能出来东西啊
/*
********************************************************************
* Editor : EditPlus+ 2.11 *
******************************************************************** +------------------------------------------------------------------+
| PHP Version 4 |
+------------------------------------------------------------------+
| Copyright (C) 2004-2005 All Right Reseved Pc Rookie's |
+------------------------------------------------------------------+
| Notices: |
| If you found any error in the source code. Then I'll hope you s-|
|end Bug email to us. So we'll thank you very much. |
| |
| |
| |
+------------------------------------------------------------------+
| Website : http://www.5down6.net |
| Author : Pc Rookie's |
| Contact Email : [email protected] |
| LastModify : 2004/11/12 |
+------------------------------------------------------------------+
+------------------------------------------------------------------+
| FileName : DB.php |
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| Function : Database independent query interface |
+------------------------------------------------------------------+
*/class DB
{
var $Host = ""; //数据库主机
var $Database = ""; //数据库
var $User = ""; //用户名
var $Password = ""; //密码 var $Auto_Free = 0; //设置为1程序结束会执行mysql_free_result()
var $Debug = 1; //设置为0不显示调试信息
var $Halt_On_Err = "yes";/*设置为"yes"终止错误并显示信息;
设置为"no"忽略错误;
设置为"report"忽略错误,但是会报告错误.
*/
var $PConnect = 0; //设置为1数据库将使用mysql_pconnect持久连接
var $linkID = 0; //链接标识
var $queryID = 0; //查询结果标识 var $queryRow = 0; //SQL影响的行 //数据库链接方法
/*
返回值:
链接资源标识
*/
function DB($Host = "", $User = "", $Password = "", $Database = "")
{
//检查各项参数是否为空
if(!($this -> Host == "") && !($this -> User == "") && !($this -> Database== ""))
{
//不为空!
$Host = $this -> Host;
$User = $this -> User;
$Password = $this -> Password;
$Database = $this -> Database;
}
else
{
//为空!子类定义的参数不完整
die(SUB_CLASS_PARAMETER_IS_NOT_FULL);
}
//成功链接到数据库否
if($this -> linkID == 0)
{
//尚未链接到数据库!链接方式选择持久链接还是普通链接
if($this -> PConnect)
{
//持久链接
$this -> linkID = @mysql_pconnect($Host, $User, $Password);
}
else
{
//普通链接
$this -> linkID = @mysql_connect($Host, $User, $Password);
}
//成功链接到数据库否
if(!$this -> linkID)
{
//链接失败!输出错误信息
DB::mysql_err_msg();
}
else
{
//链接服务器成功!打开数据库失败否
if(!@mysql_select_db($this -> Database))
{
//数据库不存在则建立
if(!@mysql_query("create database ".$this -> Database));
{
//打开数据库失败!输出错误信息
DB::mysql_err_msg();
}
}
}
}
//返回成功的链接标识
return $this -> linkID;
} //SQL语句执行方法
/*
返回值:
SQL语句影响的总行数
SQL对任何行没产生影响则返回字符串
*/
function query($SQL = "")
{
//SQL语句为空否
if($SQL == "")
//为空!SQL语句为空
die(SQL_ERR_MSG_SQL_IS_EMPTY);
else
{
//不为空!执行SQL并将结果标识赋给$queryID
$this -> queryID = @mysql_query($SQL);
//SQL执行成功否
if(!$this -> queryID)
{
//失败!输出错误信息
DB::mysql_err_msg();
}
else
{
//成功!是SELECT语句否
if(eregi("select",$SQL))
{
//是(SELECT)
$this -> queryRow = @mysql_num_rows($this -> queryID);
}
else
{
//不是(是INSERT、DELETE、UPDATE)
$this -> queryRow = @mysql_affected_rows();
}
//响应SQL语句的记录数为0否
if(!($this -> queryRow))
//返回无记录响应提示信息
return $this -> queryRow = NOT_ANY_REC;
}
}
} //获取查询操作结果集
/*
返回值:
数组Key为数据库字段名的二维数组
*/
function rs($seek)
{
//查询结果记录集为0否
if($this -> queryRow)
{
//结果不为0;有符合条件记录
//按行生成记录结果集
@mysql_data_seek($this->queryID,$seek);
$result = mysql_fetch_object($this -> queryID);
//按照查询结果记录集的字段总数
for($j = 0; $j < mysql_num_fields($this -> queryID); $j++)
{
//依次获取字段名存入数组
$fields = mysql_field_name($this -> queryID, $j);
//按照[Key] => [Fields]、[Value] => [Value]赋值
$rs[$fields] = $result -> $fields;
}
//返回数组
return $rs;
}
}}
//获取分页参数的方法
/*
返回值:
数组(SQL影响记录数, 定义每页显示记录数, 当前页, 总页数, 每页开始标记, 每页结束标记)
使用:list函数获[推荐]
list($total_rec, $page_size, $page, $total_page, $page_start, $page_end) = $obj -> splitPage($page_size, $page); 直接获取[不推荐]
*/
function splitPage($page_size = 15,$page = 1)
{
//判断当前页面为第一页否
$page ? $page = $page : $page = 1;
//判断总记录数超过一页否
if($page_size > $this -> queryRow)
{
//记录不多于一页,设置总页数
$total_page = 1;
//当前页起始标记值
$page_start = 0;
//当前页结束标记值
$page_end = $this -> queryRow;
}
else
{
//记录总数多于一页,计算总页数
$total_page = ceil($this -> queryRow/$page_size);
//当前页起始标记值
$page_start = $page_size*($page-1);
//当前页结束标记值
$page_end = $page_size*$page;
//当前页为末页否
if($page_end > $this -> queryRow)
//为末页,更改当前页结束标记值为总记录数
$page_end = $this -> queryRow;
}
//定位数据库指针
@mysql_data_seek($this -> queryID, $page_end);
//返回数组
return $split = array($this -> queryRow, $page_size, $page, $total_page, $page_start, $page_end);
} //释放资源方法
function free()
{
@mysql_free_result($this ->queryID);
$this -> queryID = 0;
} //错误处理方法
function mysql_err_msg()
{
//获取错误代码
$this -> errno = @mysql_errno();
//获取错误信息
$this -> error = @mysql_error(); //输出错误代码、信息
$this -> print_mysql_error();
} //错误信息输出方法[返回字符串]
function print_mysql_error()
{
if($this -> Debug)
{
switch($this -> Halt_On_Err)
{
case("yes"):
//终止程序执行并输出错误代码、信息
die($this -> errno.":".$this -> error);
break;
case("no"):
break;
default:
//输出错误代码、信息
echo $this -> errno.":".$this -> error;
break;
}
}
}
?>
<?php
include("DB.inc");
class soft extends DB
{
//Declare your MySQL Server Parameter
var $Host = "127.0.0.1"; #Host
var $Database = "www"; #Database
var $User = "mysql"; #User
var $Password = ""; #Password var $Debug = 0; #No Display Debug Information
} $db = new soft;//截取指定字符串长度(不会将汉字截开)!
function fixlenstr($str,$len)
{
$str = (string)$str;
$len = (int)$len;
$strlen = strlen($str);
if($len>$strlen) $len = $strlen;
$i = 0;
$fixlen = 0;
while($i<$len)
{
$chr = $str[$i];
$i++;
if(ord($chr)<0x80) $fixlen++;
elseif($i<$len)
{
$i++;
$fixlen += 2;
}
} return $len>=$strlen ? substr($str,0,$fixlen) : substr($str,0,$fixlen)."...";
}
//首页分类最新更新10条
function getNewUpdate10($scid)
{
global $db;
$sql = "SELECT ID, Name FROM down_final_class,down_info WHERE down_final_class.SCID=$scid AND down_info.FCID=down_final_class.FCID ORDER BY ID DESC"; $db -> query($sql); if($db->queryRow)
{
$db -> query($sql);
$page_size = 10;
$page = 1; list($total_rec, $page_size, $page, $total_page, $page_start, $page_end) = $db -> splitPage($page_size, $page); for($i = $page_start; $i < $page_end; $i++)
{
$rs = $db -> rs($i);
print("<li><a href=\"detail.php?id=$rs[ID]\" title=\"$rs[Name]\">".fixlenstr($rs[Name],27)."</a></li>");
} if($db -> queryRow >= $page_size)
print("<li class=\"more\"><a href=\"list.php?scid=$scid\">更多...</a></li>");
}
else
{
print("<li>目前该类尚无任何资源!</li>");
}
}
?>
不然你干脆用GET的方式传递参数好了...
下面就是使用SESSION的分页实例http://www.yubeinet.com/mobile/search.xhtml.php
<?php
if (! mysql_connect('localhost', 'root', '')) {
die('Can NOT connect to MySQL Server');
} elseif (! mysql_select_db('test')) {
die('Can NOT select Database "test" ');
}// ==========================================
// 函数声明
// ==========================================
function paginate($query, $keyword, $pageno) {
if (! $result = mysql_query($query)) {
die('SQL ERROR!');
}
$rows_found = mysql_num_rows($result); // 一共有多少条符合条件的记录
$rows = 5; // 每页显示 5 条
$pages = ceil($rows_found / $rows); // 总页数(总记录数 / 每页记录数,向后取整数)
if (! isset($pageno)) {
$pageno = 1;
}
$offset = $pageno * $rows - $rows; // 当前页的首记录偏移量 // 需要由函数返回的变量
$paginate['query'] = $query.' limit '.$offset.','.$rows; // 对当前页应显示记录的查询
$paginate['rows_found'] = $rows_found;
$paginate['pageno'] = $pageno;
$paginate['pages'] = $pages;
$paginate['pagenoList'] = '';
for ($i=1; $i<=$pages; $i++) {
if ($pageno == $i) {
$paginate['pagenoList'] .= ' '.$i.' ';
} else {
$paginate['pagenoList'] .= ' <a href="index.php?keyword='.$keyword.'&pageno='.$i.'">'.$i.'</a> ';
}
} // 返回变量
return $paginate;
}// ==========================================
// 处理查询表单的提交行为
// ==========================================
if ($keyword) {
$query = 'select * from test where XM like "%'.$keyword.'%"'; // 检索符合条件的记录
$paginate = paginate($query, $keyword, $pageno);
}// ==========================================
// HTML
// ==========================================
?>
<form method="get" action="index.php">
<input type="text" name="keyword" value="<?php echo $keyword; ?>">
<input type="submit" name="submit" value="search">
</form><p>
<?php
if ($paginate['rows_found'] && $paginate['pageno']) {
echo '找到'.$paginate['rows_found'].'条,当前页为第'.$paginate['pageno'].'页';
}
?>
</p><ul id="queryResultList">
<?php
if ($result = mysql_query($paginate['query'])) {
while ($row = mysql_fetch_array($result)) {
echo '<li>'.$row['XM'].'</li>';
}
}
?>
</ul><div id="pagenoList"><?php echo $paginate['pagenoList']?></div>