2012-10-31 144 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