流光鸟大哥,这个东西你知道吗,
我再把原来那个问题发下。
比如说数据库中有21条,每页为10条,那么就分成3页,url为:
http://127.0.0.1/new3.php?pagenum=1
http://127.0.0.1/new3.php?pagenum=2
http://127.0.0.1/new3.php?pagenum=3
但是做其他模糊查询的时候,出现了错误,我把执行的sql语句“$strSQL="SELECT *  from rkgl";”换成其他获取参数之后进行判断的SQL语句之后第一次提交后显示的http://127.0.0.1/new3.php是正确的分页,但按下下一页就变成了执行“$strSQL="SELECT *  from rkgl";”的
http://127.0.0.1/new3.php?pagenum=2的分页内容。再按上一页就成了最先的那个http://127.0.0.1/new3.php?pagenum=1再也回不了第二次的分页了,而,直接改“$strSQL="SELECT *  from rkgl”为“$strSQL="SELECT *  from rkgl where 单价<100”却可以出现正确的结果。感觉是参数丢失了。
程序是:
<?PHP
$conn=mssql_connect("localhost","sa","1" )  or die("Could not connect: " );
mssql_Select_db("njc2",$conn);
$binAddedWhere=false;
$strSQL="SELECT 入库编号,品名,单价,数量,采购人,入库经手人  from rkgl";
if ($_POST['cgr']!="")
   {if(!$binAddedWhere)
 {$strSQL=$strSQL." where ";
 $binAddedWhere=true;}
 $strSQL=$strSQL." 采购人 LIKE '%{$_POST['cgr']}%'";
  }
......
.....类似的查询语句
..$result = mssql_query($strSQL);
$total = mssql_num_rows($result);
$pagesize=10;
if (($total%$pagesize)!=0) 
$totalpage=intval($total/$pagesize)+1; 
else 
$totalpage=intval($total/$pagesize); 
if (empty($_GET['pagenum'])){
 $_GET['pagenum']=1; }
  if($total!=0){ 
           mssql_data_seek($result,(($_GET['pagenum']-1)*$pagesize)); 
                      } 
                 $i=1; 
 ?>
<table border="0" > 
<?PHP
while($row=mssql_fetch_row($result)) 
   {?>
      <tr> 
        <td><?=$row[0];?></td> 
        <td><?=$row[1];?></td> 
        <td><?=$row[2];?></td> 
        <td><?=$row[3];?></td> 
<td><?=$row[4];?></td> 
       <td><a href="play.php?id=<?=$row[0];?>"><?=$row[3];?></a></td>
     </tr>
 <? $i++; 
     if ($i>$pagesize) 
    break; 
     else 
      continue; 
         }
    ?>
    <b>第<?=$_GET['pagenum'];?>页,共<?=$totalpage;?>页.......共<?=$total;?>条记录
</table><br/>
<?PHP
  echo "<a href=".$_SERVER['PHP_SELF']."?pagenum=1>首页</a> ";
  if ($_GET['pagenum']>1){
  $temp_current=$_GET['pagenum']-1;
  echo "<a href=".$_SERVER['PHP_SELF']."?pagenum=".$temp_current.">上一页</a> "; }
  if ($_GET['pagenum']<$totalpage){
  $temp_current=$_GET['pagenum']+1;
  echo "<a href=".$_SERVER['PHP_SELF']."?pagenum=".$temp_current.">下一页</a> "; }
  echo "<a href=".$_SERVER['PHP_SELF']."?pagenum=".$totalpage.">尾页</a> ";
?>就是这样的一个程序
我用echo "$strSQL";查到开始分页的$strSQL的值为SELECT 入库编号,品名,单价,数量,采购人,入库经手人 from rkgl where 单价 >1000 and 数量 >1000 ORDER BY 入库编号 
但点下一页echo "$strSQL";的值就成了SELECT 入库编号,品名,单价,数量,采购人,入库经手人 from rkgl 发生了传值丢失的问题?,不知道是怎么回事啊,大家帮帮忙把。  

解决方案 »

  1.   


    $fileself="base.php?var1=$var1&var2=$var2";
    //var1 var2 为要传递的参数$strSQL="SELECT 入库编号,品名,单价,数量,采购人,入库经手人  from rkgl where 入库编号>0";if ($var1!="")
       {
    $strSQL.="and 字段1='$var1'";
      }if ($var2!="")
       {
    $strSQL.="and 字段2='$var2'";
      }...........<b>第<?=$_GET['pagenum'];?>页,共<?=$totalpage;?>页.......共<?=$total;?>条记录
    </table><br/>
    <?PHP
      echo "<a href=".$fileself."&pagenum=1>首页</a> ";
      if ($_GET['pagenum']>1){
      $temp_current=$_GET['pagenum']-1;
      echo "<a href=".$fileself."&pagenum=".$temp_current.">上一页</a> "; }
      if ($_GET['pagenum']<$totalpage){
      $temp_current=$_GET['pagenum']+1;
      echo "<a href=".$fileself."&pagenum=".$temp_current.">下一页</a> "; }
      echo "<a href=".$fileself."&pagenum=".$totalpage.">尾页</a> 
      

  2.   

    关键在这里出错,
    “因为$_SERVER['PHP_SELF']只能得到“base.php?p1=$p1&p2=p2"你后面又用
    echo "<a href=".$_SERVER['PHP_SELF']."?pagenum=".$totalpage.">尾页</a> ";
    也就是讲你在参数的传递的时候出现了二个"?"
    即base.php?p1=$p1&p2=p2?pagenum=....所以出错,后面的应改为&
      

  3.   

    查询条件写如SESSION~~
    $_SESSION['cgr']=$_POST['cgr'];分页函数给你一个~~~
    /******************************************
    函数:Pagination($total,$per)
    功能:分页
    参数:$total 总记录数 $per 每页显示数
    备注: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.="&nbsp;[{$page}]";
    continue;
    }
    if (empty($_GET['page']) and $page==1)
    {
    $pages.="&nbsp;[{$page}]";
    continue;
    }
    $pages.="&nbsp;<a href=\"{$url}?{$query_string}&amp;page={$page}\">$page</a>  ";
    }
    $pages.="<br />";
    return $pages;
    }
      

  4.   

    汗,断了半天网,终于能上了,
    改了之后,点submit
    然后出现几个问题,
    1.本来上一页,下一页的超联接,变成了
    1000&pagenum=1>首页 1000&pagenum=2>下一页 1000&pagenum=2>尾页 
    而联接地址变成了:http://127.0.0.1/new6.php?单价
    我查询的是单价>1000的记录,感觉>号丢失了。
    1000&pagenum=1>则直接显示在屏幕上了而, echo $fileself输出的$fileself为:new6.php?单价>1000& 
    这个没错,
    url此时为..\new6.php
    按下一页,url为http://127.0.0.1/new6.php?单价
    出来的是select * from TABLENAME  分页的第二页,也就是说参数全丢了,
    echo 一下$fileself 出来的是:http://127.0.0.1/new6.php?
    参数也全丢了。
    不服气:自己打入http://127.0.0.1/new6.php?单价<1000
    或者http://127.0.0.1/new6.php?入库编号=5
    出来的是全选分页的第一页。就是说,没有用。大家再帮帮忙把,这个东西怎么这么难弄哦。
     <?PHP
    $conn=mssql_connect("localhost","sa","1" )  or die("Could not connect: " );
    mssql_Select_db("njc2",$conn);
    $binAddedWhere=false;
    $fileself="new6.php";
    $strSQL="SELECT 入库编号,品名,单价,数量,采购人,入库经手人  from rkgl";
    if ($_POST['cgr']!="")
       {if(!$binAddedWhere)
     {$strSQL=$strSQL." where ";
     $fileself=$fileself."?";
     $binAddedWhere=true;}
     $strSQL=$strSQL." 采购人 LIKE '%{$_POST['cgr']}%'";
     $fileself=$fileself."采购人={$_POST['cgr']}";
      }
      .....类似查询:

    if(!$binAddedWhere) 
     {
     $fileself=$fileself."?";
     $binAddedWhere=true;
     }
     else
     {$fileself=$fileself."&";
     
     }
    $result = mssql_query($strSQL);
    $total = mssql_num_rows($result);
    $pagesize=10;
    if (($total%$pagesize)!=0) 
    $totalpage=intval($total/$pagesize)+1; 
    else 
    $totalpage=intval($total/$pagesize); 
    if (empty($_GET['pagenum'])){
     $_GET['pagenum']=1; }
      if($total!=0){ 
               mssql_data_seek($result,(($_GET['pagenum']-1)*$pagesize)); 
                          } 
                     $i=1; 
     ?>
    <table border="0" > 
    <?PHP
    while($row=mssql_fetch_row($result)) 
       {?>
          <tr> 
            <td><?=$row[0];?></td> 
            <td><?=$row[1];?></td> 
            <td><?=$row[2];?></td> 
            <td><?=$row[3];?></td> 
    <td><?=$row[4];?></td> 
    <td><?=$row[5];?></td>
           <td><a href="play.php?id=<?=$row[0];?>"><?=$row[3];?></a></td>
         </tr>
     <? $i++; 
         if ($i>$pagesize) 
        break; 
         else 
          continue; 
             }
        ?>
        <b>第<?=$_GET['pagenum'];?>页,共<?=$totalpage;?>页.......共<?=$total;?>条记录
    </table><br/>
    <?PHP
       echo "<a href=".$fileself."pagenum=1>首页</a> ";
      if ($_GET['pagenum']>1){
      $temp_current=$_GET['pagenum']-1;
     echo "<a href=".$fileself."pagenum=".$temp_current.">上一页</a> "; }
      if ($_GET['pagenum']<$totalpage){
      $temp_current=$_GET['pagenum']+1;
     echo "<a href=".$fileself."pagenum=".$temp_current.">下一页</a> "; }
     echo "<a href=".$fileself."pagenum=".$totalpage.">尾页</a> ";
      echo "$strSQL<BR\n>";
      echo"$fileself"
    ?>  
      

  5.   

    总是感觉参数在第一页有用,到第二页就丢失了。而且url上的变量名是怎么设的我还不太清楚,是不是要跟数据库里面的字段一样或者是跟文本框的名字一样。请大家指教。汗,因为是mssql分页,所以这方面的教程很少,希望大家多提携新人了。
      

  6.   

    hahawen(变态的大龄青年) ( ) 老大说两句话啊。
      

  7.   

    你这个问题最好结合js来做。可以把页面导航用js来提交,这样就可以轻松传递查询的参数了ps:不知道你能不能懂-_-!
      

  8.   

    $strSQL=$strSQL." 采购人 LIKE '%{$_POST['cgr']}%'";
     $fileself=$fileself."采购人={$_POST['cgr']}";
    $_POST 改为$_GET
      

  9.   

    一。比如:js函数可写成
        function vPage(page){
            document.page.page.value=page;
            document.page.submit();        
         }二。相应的上一页下一页的连接就可以写成
        <a onclick="vPage(3)">上一页</a>三。相应的隐藏表单就可以根据需要些,把查询条件都写到hidden里
      

  10.   

    $strSQL=$strSQL." 采购人 LIKE '%{$_POST['cgr']}%'";
     $fileself=$fileself."采购人={$_POST['cgr']}";
    $_POST 改为$_GET
    ------------------------------
    这位太搞笑了,呵呵,不过谢谢进来了。
      

  11.   

    你这个问题最好结合js来做。可以把页面导航用js来提交,这样就可以轻松传递查询的参数了ps:不知道你能不能懂-_-!
    ----------------------------------
    大哥说的是,我还是菜鸟啊,这个还不太懂。
      

  12.   

    感觉冲浪大哥的把查询条件写入session可能有用,我先试试,大家再帮我想想,怎么让他参数不丢失呢,还有我的这个问题大家帮我看看:
    点submit
    .本来上一页,下一页的超联接,变成了
    1000&pagenum=1>首页 1000&pagenum=2>下一页 1000&pagenum=2>尾页 
    而点这个“1000&pagenum=1>首页”的 联接地址,出来的url是:http://127.0.0.1/new6.php?单价
    页面是select * from tablename 的第二页。那个单价>1000的>丢掉了,大家看看是不是我下面这句话有语法错误啊。具体的程序在上面了。。
     echo "<a href=".$fileself."pagenum=".$temp_current.">上一页</a> "; 
      

  13.   

    session_start();
    if (!empty($_POST['keyword']))//提交的时候注册一个SESSION,留着分页的时候用
    {
    $_SESSION['keyword']=$_POST['keyword'];
    $keyword=$_POST['keyword'];
    }
    elseif (!empty($_SESSION['keyword']))//如果SESSION不为空,则把SESSION的关键词和查询类型写入变量
    {
    $keyword=$_SESSION['keyword'];
    }
      

  14.   

    楼主,不是我说你,你的代码很难读呀。
    指出你两个问题。
    1、页面中又是_GET,又是 _POST 是不行的,要知道通过页号的连接过来以后,你的_POST根本取不到值。上面有个兄弟已经指出了来了。3、我没有用过mssql_data_seek,但是我感觉你用的有错误。看文档说的是这个函数是移动row 指针,并没有控制大小的成分在里面,所以你输出的时候肯定要加上循环才是。无论你用什么数据库,用标准的SQL肯定没有问题。
      

  15.   

    其实这个问题很简单,而你却把他弄复杂了。
    1、你是想通过url参数来传递查询条件的。其实用session保存查询条件来的要简单些,但不是非要这样不可
    2、首先,查询条件的提交表单不要用post方式的,而用get方式的,这样无论是第一页还是后续页的处理方式都是一样的
    3、当然表单也可以用post方式的,但在提交后要先做$_GET=$_POST;处理。以后就与后续页的处理没有什么不同了
    4、生成的导航连接的url部分要用引号括起
    这样的写法 echo "<a href=".$fileself."pagenum=".$temp_current.">上一页</a> "; 
    产生的html代码是这样的
    <a href=http://127.0.0.1/new6.php?pagenum=单价>1000&pagenum=1>首页</a> 
    单价后面的>将被解释成a标记的结束,显然是不对的
    只有这样才不会错:
    <a href='http://127.0.0.1/new6.php?pagenum=单价>1000&pagenum=1'>首页</a>
    所以程序要写成
    echo "<a href='".$fileself."pagenum=".$temp_current."'>首页</a> "; 
      

  16.   

    谢谢aomeng(冰雪六月) ,谢谢唠叨大,唠叨大,我爱你!!!!!!
    aomeng(冰雪六月)那个查询可以这么用的,你用过就知道了,第一个地方多谢提醒了,谢谢拉。
      

  17.   

    To:littlejc2(半半)
       Tryecho "<a href=".$fileself."pagenum=1>首页</a> ";
      if ($_GET['pagenum']>1){
      $temp_current=$_GET['pagenum']-1;
     echo "<a href=".$fileself."pagenum=".$temp_current.">上一页</a> "; }
      if ($_GET['pagenum']<$totalpage){
      $temp_current=$_GET['pagenum']+1;
     echo "<a href=".$fileself."pagenum=".$temp_current.">下一页</a> "; }
     echo "<a href=".$fileself."pagenum=".$totalpage.">尾页</a> ";===>echo "<a href=".$fileself."?pagenum=1>首页</a> ";
      if ($_GET['pagenum']>1){
      $temp_current=$_GET['pagenum']-1;
     echo "<a href=".$fileself."?pagenum=".$temp_current.">上一页</a> "; }
      if ($_GET['pagenum']<$totalpage){
      $temp_current=$_GET['pagenum']+1;
     echo "<a href=".$fileself."?pagenum=".$temp_current.">下一页</a> "; }
     echo "<a href=".$fileself."?pagenum=".$totalpage.">尾页</a> ";
    用URL来传递参数的话,URL与第一个变量间以"?"链接。而变量间(带多个变量的时候)用"&"链接。
      

  18.   

    TOsolo_php(晕)  
    兄弟,用你上次那个程序能实现url参数传递分页吗,能不能弄个简单的模糊查询分页演示一下,我现在在搞session存储分页,不过希望把url传参也弄明白一下
    谢拉!!!
      

  19.   

    楼主!
    还是我帮你写一个吧。
    <?php 
    //在查询表单中放一个 hidden 类型的 submitflag
    $pagesize = 20;
    if(isset($_POST["submitflag"])){ //得到搜索关键字
    $searchkey = $_POST["key"];
    $page = 1;
    }else{
    $page = $_GET["key"];
    $serchkey = $_GET["key"];
    }
    $querysql = "select * from dbname where field like '%$serchkey%' ";
    $result = mysql_query($querysql);
    $total = mysql_num_rows($result);
    $query = sprintf("%s Limit %s,'%%s%'",$querysql, $page*$pagesize,$pagesize);
    if($total>$pagesize){
        while($page*$pagesize<$total){
    printf("<a href='page=%s&key=%s'>%s</a>",$page,$key,$page);
    $page++;
    }
    }
    /*
    数据处理
    */
    ?>我没有测试过,基本原理是这样的。
      

  20.   

    url 传参数是通过 $_GET["keyname"] 取的。
    比如 test.php?a=1 取的a的值就是 $_GET["a"];
      

  21.   

    $pagesize = 20;
    if(isset($_POST["submitflag"])){ //得到搜索关键字
    $searchkey = $_POST["key"];
    $page = 1;
    }else{
    $page = $_GET["key"];*********
    $serchkey = $_GET["key"];这句有点疑问,是不是说我的查询关键字是一个人名,最后打出的page就是人名了》
    比如test.php?page=人名