一个分页的问题:不能分页查询

m573556796 2016-06-08 12:22:23
代码写的比较乱 如果不想看代码只看我表述也行 然后提交解决的办法就行
代码是这样的 就是类似百度的一个搜索页 道理也是百度搜索这样的 有一个搜索框
下面是一个div显示查询结果 比如我搜索PHP 然后就去表里面的num字段下查找PHP的内容 查询的所有结果以分页的形式展示出来
就是第一页 第二页…… 现在的问题是这个查询结果是根据用户每次提交时$_POST['num']来查询数据库的
如果每页显示5条数据 现在查询出来3页数据 每次查询可以显示数据和分页信息 但是每次点击分页时就会报错 比如点击第二页时就是提示num未定义
因为点击第二页时没有提交的$_POST['num']数据 只有一个post过来的page=2 所以会报错
现在的问题就是只能查询第一页的数据 点第二页就会报错 知道问题出在哪里就是不知道怎么改 用户在点击第二页时希望之前查询出来的数据不要消失 这个应该怎么办呢?这样说不知道大家能不能看懂啊


<div id="show">
<?php
header('content-type:text/html;charset=utf-8;');
include 'function.php';
if (isset($_POST['num'])||isset($_GET['page'])) {
$pdo=new PDO("mysql:host=localhost;dbname=t1","root","");
session_start();
$_SESSION['num']=$_POST['num'];
$stmt3=$pdo->prepare("select * from table1 where num=?");
$stmt3->execute(array($_POST['num']));
$res3=$stmt3->fetchall();
$rows=count($res3);
$pagesize=5;
if($rows==0){
$pagenum=1;
}else{
$pagenum=ceil($rows/$pagesize);
}
if(isset($_GET['page'])){
$page=$_GET['page'];
if(empty($page)||$page<0||!is_numeric($page)) {
$page=1;
}else{
$page=intval($page);
}
}else{
$page=1;
}
if($page>$pagenum){
$page=$pagenum;
}
$startnum = ($page - 1)*$pagesize;
$display_page=5;
$query = "SELECT * FROM qq where num=? LIMIT $startnum,$pagesize";
$stmt=$pdo->prepare("$query");
//$stmt=$pdo->prepare("select * from table1 where num=?");
$stmt->execute(array($_POST['num']));
$res=$stmt->fetchall(PDO::FETCH_ASSOC);
$v = current($res);
if($res){
foreach($res as $v){
//echo '<h3><span>'.$v['num'].'</span></h3>' ;
echo '<h4>'.$v['name'].'</h4>';
}
}else{
echo "无数据";
}

}
?>
</div>
<div id="page">
<?php
if(isset($_POST['num'])||isset($_GET['page'])){
fenye();
}
?>
</div>

...全文
216 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
傲雪星枫 2016-06-08
  • 打赏
  • 举报
回复
因为你点第一页,第二页时,用的是GET方法传递,而不是POST方法。 所以红色部分出问题 $query = "SELECT * FROM qq where num=? LIMIT $startnum,$pagesize"; $stmt=$pdo->prepare("$query"); //$stmt=$pdo->prepare("select * from table1 where num=?"); $stmt->execute(array($_POST['num'])); 然后fenye方法要把num和page传入去 分页的url要加上这两个参数:?page=xxx&num=xxx 这样改试试

<div id="show">
       <?php
       header('content-type:text/html;charset=utf-8;');
       include 'function.php';
       $num = isset($_REQUEST['num'])? $_REQUEST['num'] : 0;
       $page = isset($_REQUEST['page'])? $_REQUEST['page'] : 1;

        $pdo=new PDO("mysql:host=localhost;dbname=t1","root","");
        session_start();
        $_SESSION['num']=$num;
        $stmt3=$pdo->prepare("select * from table1 where num=?");
        $stmt3->execute(array($num));
        $res3=$stmt3->fetchall();
        $rows=count($res3);
        $pagesize=5;
        if($rows==0){
            $pagenum=1;
        }else{
            $pagenum=ceil($rows/$pagesize);
        }
        if($page){
            if(empty($page)||$page<0||!is_numeric($page)) {
                $page=1;
            }else{
                $page=intval($page);
            } 
        }else{
            $page=1;
        }
        if($page>$pagenum){
            $page=$pagenum;
        }
        $startnum = ($page - 1)*$pagesize;
        $display_page=5;
        $query = "SELECT * FROM qq where num=? LIMIT $startnum,$pagesize";
        $stmt=$pdo->prepare("$query");
        //$stmt=$pdo->prepare("select * from table1 where num=?");
        $stmt->execute($num);
        $res=$stmt->fetchall(PDO::FETCH_ASSOC);
        $v = current($res);
        if($res){
            foreach($res as $v){
                //echo '<h3><span>'.$v['num'].'</span></h3>' ;
                echo '<h4>'.$v['name'].'</h4>';
            }
        }else{
         echo "无数据";
        }
       ?>
     </div>
     <div id="page">
        <?php
         if($num || $page){
           fenye($num, $page);
         }
       ?>
     </div>
xuzuning 2016-06-08
  • 打赏
  • 举报
回复
你的 num 是 post 提交的,从第二页起就没有 post 提交了,自然也就没有了 num
m573556796 2016-06-08
  • 打赏
  • 举报
回复
哈哈可以了 我先好好看看你的代码
引用 9 楼 fdipzone 的回复:
改这样

<?php
function fenye($num){
global $page,$pagenum,$shoupage,$pageoffset;
echo "<div >";
echo "<ul id='ul2'>";
echo '<li>'.$page.'/'.$pagenum.'页|</li>';
   if($page==1){
             echo '<li>首页|</li>';
             echo '<li>上一页|</li>';
   }else{
     echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'">首页</a>|</li>';
             echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'?'.($page-1).'&num='.$num.'">上一页</a>|</li>';
   }
   $shoupage=5;
       $pageoffset=($shoupage-1)/2;
       $start=1;
       $end=$pagenum;
   if($pagenum>$shoupage){
        if($page>$pageoffset){
        $start=$page-$pageoffset;
        $end=$pagenum>$page+$pageoffset?$page+$pageoffset:$pagenum;
        }else{
        $start=1;
        $end=$pagenum>$shoupage?$shoupage:$pagenum;
        }
        if($page+$pageoffset>$pagenum){
        $start=$start-($page+$pageoffset-$end);
        }
       }
   echo '<div>';
       echo '<ul id="ul1">';
       for($i=$start;$i<=$end;$i++){
        echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'?page='.$i.'&num='.$num.'">'.($i).'</a></li>';
       }
       echo '</ul>';
           echo '</div>';
   if($page==$pagenum){
    echo '<li>|下一页|</li>';
    echo '<li>尾页|</li>';
   }else{
    echo '<li>|<a href="'.$_SERVER["SCRIPT_NAME"].'?page='.($page+1).'&num='.$num.'">下一页</a>|</li>';
    echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'?page='.$pagenum.'&num='.$num.'">尾页</a>|</li>';
   }
echo '</ul>';
    echo '</div>';
    
};
?>
然后调用改这样 <div id="page"> <?php if($num || $page){ fenye($num); } ?> </div>
傲雪星枫 2016-06-08
  • 打赏
  • 举报
回复
改这样

<?php
function fenye($num){
global $page,$pagenum,$shoupage,$pageoffset;
echo "<div >";
echo "<ul id='ul2'>";
echo '<li>'.$page.'/'.$pagenum.'页|</li>';
   if($page==1){
             echo '<li>首页|</li>';
             echo '<li>上一页|</li>';
   }else{
     echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'">首页</a>|</li>';
             echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'?'.($page-1).'&num='.$num.'">上一页</a>|</li>';
   }
   $shoupage=5;
       $pageoffset=($shoupage-1)/2;
       $start=1;
       $end=$pagenum;
   if($pagenum>$shoupage){
        if($page>$pageoffset){
        $start=$page-$pageoffset;
        $end=$pagenum>$page+$pageoffset?$page+$pageoffset:$pagenum;
        }else{
        $start=1;
        $end=$pagenum>$shoupage?$shoupage:$pagenum;
        }
        if($page+$pageoffset>$pagenum){
        $start=$start-($page+$pageoffset-$end);
        }
       }
   echo '<div>';
       echo '<ul id="ul1">';
       for($i=$start;$i<=$end;$i++){
        echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'?page='.$i.'&num='.$num.'">'.($i).'</a></li>';
       }
       echo '</ul>';
           echo '</div>';
   if($page==$pagenum){
    echo '<li>|下一页|</li>';
    echo '<li>尾页|</li>';
   }else{
    echo '<li>|<a href="'.$_SERVER["SCRIPT_NAME"].'?page='.($page+1).'&num='.$num.'">下一页</a>|</li>';
    echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'?page='.$pagenum.'&num='.$num.'">尾页</a>|</li>';
   }
echo '</ul>';
    echo '</div>';
    
};
?>
然后调用改这样 <div id="page"> <?php if($num || $page){ fenye($num); } ?> </div>
m573556796 2016-06-08
  • 打赏
  • 举报
回复
把原来这句话 echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'?page='.$i.'">'.($i).'</a></li>'; 改成了这样echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'?page='.$i.'.'&num='.$num">'.($i).'</a></li>';这样改对吗 但是还是提示我拼接错误 为什么?Parse error: syntax error, unexpected '=', expecting ',' or ';' in D:\wamp\www\function.php on line 33
引用 7 楼 xuzuning 的回复:
在链接中加入 num=$num
xuzuning 2016-06-08
  • 打赏
  • 举报
回复
在链接中加入 num=$num
m573556796 2016-06-08
  • 打赏
  • 举报
回复
这个那个分页函数的代码 <?php function fenye(){ global $page,$pagenum,$shoupage,$pageoffset; echo "<div >"; echo "<ul id='ul2'>"; echo '<li>'.$page.'/'.$pagenum.'页|</li>'; if($page==1){ echo '<li>首页|</li>'; echo '<li>上一页|</li>'; }else{ echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'">首页</a>|</li>'; echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'?'.($page-1).'">上一页</a>|</li>'; } $shoupage=5; $pageoffset=($shoupage-1)/2; $start=1; $end=$pagenum; if($pagenum>$shoupage){ if($page>$pageoffset){ $start=$page-$pageoffset; $end=$pagenum>$page+$pageoffset?$page+$pageoffset:$pagenum; }else{ $start=1; $end=$pagenum>$shoupage?$shoupage:$pagenum; } if($page+$pageoffset>$pagenum){ $start=$start-($page+$pageoffset-$end); } } echo '<div>'; echo '<ul id="ul1">'; for($i=$start;$i<=$end;$i++){ echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'?page='.$i.'">'.($i).'</a></li>'; } echo '</ul>'; echo '</div>'; if($page==$pagenum){ echo '<li>|下一页|</li>'; echo '<li>尾页|</li>'; }else{ echo '<li>|<a href="'.$_SERVER["SCRIPT_NAME"].'?page='.($page+1).'">下一页</a>|</li>'; echo '<li><a href="'.$_SERVER["SCRIPT_NAME"].'?page='.$pagenum.'">尾页</a>|</li>'; } echo '</ul>'; echo '</div>'; }; ?>
m573556796 2016-06-08
  • 打赏
  • 举报
回复
就是啊 这个问题怎么解决呢?
引用 1 楼 xuzuning 的回复:
你的 num 是 post 提交的,从第二页起就没有 post 提交了,自然也就没有了 num
m573556796 2016-06-08
  • 打赏
  • 举报
回复
还是不行 只是现在不报错了 点击第几页后还是什么都不显示内容
引用 2 楼 fdipzone 的回复:
因为你点第一页,第二页时,用的是GET方]法传递,而不是POST方法。 所以红色部分出问题 $query = "SELECT * FROM qq where num=? LIMIT $startnum,$pagesize"; $stmt=$pdo->prepare("$query"); //$stmt=$pdo->prepare("select * from table1 where num=?"); $stmt->execute(array($_POST['num'])); 然后fenye方法要把num和page传入去 分页的url要加上这两个参数:?page=xxx&num=xxx 这样改试试

<div id="show">
       <?php
       header('content-type:text/html;charset=utf-8;');
       include 'function.php';
       $num = isset($_REQUEST['num'])? $_REQUEST['num'] : 0;
       $page = isset($_REQUEST['page'])? $_REQUEST['page'] : 1;

        $pdo=new PDO("mysql:host=localhost;dbname=t1","root","");
        session_start();
        $_SESSION['num']=$num;
        $stmt3=$pdo->prepare("select * from table1 where num=?");
        $stmt3->execute(array($num));
        $res3=$stmt3->fetchall();
        $rows=count($res3);
        $pagesize=5;
        if($rows==0){
            $pagenum=1;
        }else{
            $pagenum=ceil($rows/$pagesize);
        }
        if($page){
            if(empty($page)||$page<0||!is_numeric($page)) {
                $page=1;
            }else{
                $page=intval($page);
            } 
        }else{
            $page=1;
        }
        if($page>$pagenum){
            $page=$pagenum;
        }
        $startnum = ($page - 1)*$pagesize;
        $display_page=5;
        $query = "SELECT * FROM qq where num=? LIMIT $startnum,$pagesize";
        $stmt=$pdo->prepare("$query");
        //$stmt=$pdo->prepare("select * from table1 where num=?");
        $stmt->execute($num);
        $res=$stmt->fetchall(PDO::FETCH_ASSOC);
        $v = current($res);
        if($res){
            foreach($res as $v){
                //echo '<h3><span>'.$v['num'].'</span></h3>' ;
                echo '<h4>'.$v['name'].'</h4>';
            }
        }else{
         echo "无数据";
        }
       ?>
     </div>
     <div id="page">
        <?php
         if($num || $page){
           fenye($num, $page);
         }
       ?>
     </div>
lanshs 2016-06-08
  • 打赏
  • 举报
回复
你说像百度那样子,你就看看百度的下一页链接。搜索词都是在地址参数上的,用GET就行

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧