首页 文章

通过分页传递$ _GET(或$ _POST)变量(SESSION不工作)

提问于
浏览
1

我知道这是一个常见问题,因为我在决定发布之前已经搜索了答案,但我似乎无法找到解决方案 .

问题:我有一个分页脚本(PHP)用于我的搜索结果 . 显然很常见,第一页结果显示正常,然后在转到第2,3页等时失败 .

当点击进入第2,3页等时,我在搜索中使用的每个变量都会收到“未知索引”错误 .

所以我从表单中获取这些变量:

$_SESSION['var1']= $_GET['var1'];
$_SESSION['var2']= $_GET['var2'];
$_SESSION['var3']= $_GET['var3'];

注意事项:我的 Headers 中已经开始了一个会话;我正在使用$ _GET,因为如果用户“退回”,我宁愿没有“重新提交”警告;所有变量都被清理干净(只是代码中没有显示,因为它已经足够长了);我必须使用带有WHILE循环的$ _GET变量,因为它们计算每个结果的距离,年龄等 .

我的分页脚本:

$limit = 4; 

$query = "SELECT COUNT(*) as num FROM $tableName";
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages['num'];

$stages = 3;
$page = mysql_escape_string(isset($_GET['page'])) ? (int)$_GET['page'] : 1;
if($page) {
  $start = ($page - 1) * $limit; 
} else {
  $start = 0;   
}   

// Get page data
$query1 = "SELECT * FROM $tableName ORDER BY joindate DESC LIMIT $start, $limit";
$result = mysql_query($query1);

// Initial page num setup
if ($page == 0){$page = 1;}
$prev = $page - 1;  
$next = $page + 1;                          
$lastpage = ceil($total_pages/$limit);      
$LastPagem1 = $lastpage - 1;                    

$paginate = '';
if($lastpage > 1) {
$paginate .= "<div class = 'hp1col'><div class='paginate'>";
$pagetotal = $total_pages.' Results';

// Previous
if ($page > 1){
$paginate.= "<a href='$targetpage?page=$prev'>Previous</a>";
} else {
$paginate.= "<span class='disabled'>previous</span>";}

// Pages    
if ($lastpage < 7 + ($stages * 2))  // Not enough pages to breaking it up
{   
for ($counter = 1; $counter <= $lastpage; $counter++)
{
if ($counter == $page){
$paginate.= "<span class='current'>$counter</span>";
}else{ $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}                 
}
}

// Next
if ($page < $counter - 1){ 
$paginate.= "<a href='$targetpage?page=$next'>Next</a>";
} else {
$paginate.= "<span class='disabled'>Next</span>";
}
$paginate.= "</div></div>";     
}

while($row = mysql_fetch_array($result))
{
if (($part1 >= $_SESSION['var1']) AND  ($part2 <= $_SESSION['var2']) AND ($part3 <= $_SESSION['var3'])) {
echo 
"[Results]  
}
}
echo $paginate;

我尝试在这个if语句中启动一个新的会话,但它没有帮助:

if ($page > 1){
$paginate.= "<a href='$targetpage?page=$prev'>Previous</a>";
} else {
$paginate.= "<span class='disabled'>previous</span>";}

我希望有人能帮帮忙 . 我为这个问题中的代码板块道歉,但我认为最好只是把所有东西放进去,希望有人能够提供帮助 .

谢谢

1 回答

  • 3

    因此,您需要将这些查询参数传递到下一页 . 如果您的页面需要 $_GET['var1'] 但您在URL中没有 ?var1=foo ,那么它显然不起作用 . 处理此问题的最简单方法是http_build_query

    printf('<a href="%s?%s">Next</a>',
           $targetpage,
           http_build_query(array('page' => 2) + $_GET));
    

    这将保留 $_GET 中的所有当前值,并为其添加 page=2 参数 . 根据您的情况需要进行修改 .

相关问题