2012-10-31 108 views
1

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

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

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

所以我$ _GET这些变量从我的形式:

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

注意要点: 一个Session已经在我的头开始;我使用$ _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

请更清楚地定义*问题*。 “搜索结果不工作在第二页”是*不是一个普遍已知的问题... – deceze

+0

对不起,现在将修改。花了这么久格式化代码我忘了我没有提到错误:) – Dan

+0

请注意,“LIMIT XXX OFFSET YYY”子句意味着MySQL仍然需要计算整个结果集。相反,如果joindate被编入索引,请考虑使用'WHERE joindate <= <先前页面上的最后加入日期> LIMIT XXX''。 – KyleWpppd

回答

3

所以你需要将这些查询参数传递到下一页。如果您的网页预计存在$_GET['var1'],但网址中没有?var1=foo,则显然不起作用。处理这种情况最简单的方法是http_build_query

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

这会保留所有的当前值$_GET并增加了一个page=2参数给它。根据需要修改您的案例。

+0

谢谢你。我应该在哪里放置? – Dan

+0

无论你创建到其他页面的任何链接。这个例子输出*“下一个”*链接。但它更多的是一个例子。了解它的功能,然后应用于您的代码。 – deceze

+0

deceze - 谢谢,我已经这样使用它:$ nextpage = http_build_query(array(“page”=> 2)+ $ _GET);然后在“下一步”链接中使用该变量。你能告诉我如何使用它以前? => 2应该适用于所有递增的页面,但下降的情况如何? – Dan