2012-07-24 87 views
0

我有一個通過$ _ POST傳遞給我的搜索結果頁面,並存儲在一個變量名爲$項的值。然後,該變量在MySQL查詢中運行,以顯示搜索結果,如果有超過15個結果,我有一個分頁php腳本,將結果分成幾頁。PHP分頁失去在其他頁面變量

的第一頁是巨大的,結果的正確數量被發現和打印的頁數是可用的。如果我回顯該變量,則會在其中存儲正確的值。但是,如果我選擇查看下一批結果並刷新頁面的所有行(如果查詢只是SELECT *,而沒有參數)並且變量現在爲空

這裏是我的代碼(這是一個有點長,對不起,我打算把它的大吸盤遠在另一個頁面,包括它一旦它的正常工作)

<?php 
$tbl_name="accounts"; 
$adjacents = 3; 


if (isset($_POST['basic_search_submit'])){ 
$term = $_POST['item'];} 

$query = "SELECT COUNT(*) as num FROM accounts LEFT JOIN accounts_cstm ON accounts.id = accounts_cstm.id_c WHERE accounts.name LIKE '%$term%' ORDER BY accounts.name"; 
$total_pages = mysql_fetch_array(mysql_query($query)); 
$total_pages = $total_pages[num]; 

    $targetpage = "search_results_play.php";  
$limit = 15;         
$page = $_GET['page']; 
if($page) 
    $start = ($page - 1) * $limit;   
else 
    $start = 0;        
    $sql = "SELECT * FROM accounts LEFT JOIN accounts_cstm ON accounts.id = accounts_cstm.id_c WHERE accounts.name LIKE '%$term%' ORDER BY accounts.name LIMIT $start, $limit"; 
$result = mysql_query($sql); 
if ($page == 0) $page = 1;     
$prev = $page - 1;       
$next = $page + 1;       
$lastpage = ceil($total_pages/$limit);  
$lpm1 = $lastpage - 1;      
$pagination = ""; 

if($lastpage > 1) 
{ 
    $pagination .= "<div class=\"pagination\">"; 
      if ($page > 1) 
     $pagination.= "<a href=\"$targetpage?page=$prev\">&#60; &#60; previous</a>"; 
    else 
     $pagination.= "<span class=\"disabled\">&#60; &#60; previous</span>"; 

      if ($lastpage < 7 + ($adjacents * 2)) 
    { 
     for ($counter = 1; $counter <= $lastpage; $counter++) 
     { 
      if ($counter == $page) 
       $pagination.= "<span class=\"current\">$counter</span>"; 
      else 
       $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";     
     } 
    } 
    elseif($lastpage > 5 + ($adjacents * 2)) //enough pages to hide some 
    { 
        if($page < 1 + ($adjacents * 2))   
     { 
      for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) 
      { 
       if ($counter == $page) 
        $pagination.= "<span class=\"current\">$counter</span>"; 
       else 
        $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";     
      } 
      $pagination.= "..."; 
      $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>"; 
      $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";  
     } 
        elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) 
     { 
      $pagination.= "<a href=\"$targetpage?page=1\">1</a>"; 
      $pagination.= "<a href=\"$targetpage?page=2\">2</a>"; 
      $pagination.= "..."; 
      for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) 
      { 
       if ($counter == $page) 
        $pagination.= "<span class=\"current\">$counter</span>"; 
       else 
        $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";     
      } 
      $pagination.= "..."; 
      $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>"; 
      $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";  
     } 

     else 
     { 
      $pagination.= "<a href=\"$targetpage?page=1\">1</a>"; 
      $pagination.= "<a href=\"$targetpage?page=2\">2</a>"; 
      $pagination.= "..."; 
      for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) 
      { 
       if ($counter == $page) 
        $pagination.= "<span class=\"current\">$counter</span>"; 
       else 
        $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";     
      } 
     } 
    } 


    if ($page < $counter - 1) 
     $pagination.= "<a href=\"$targetpage?page=$next\">next &#62; &#62;</a>"; 
    else 
     $pagination.= "<span class=\"disabled\">next &#62; &#62;</span>"; 
    $pagination.= "</div>\n";  
} 
?> 

    <? while ($row = mysql_fetch_array($result)){ 
//table displaying results 
} 
?> 
<?=$pagination?> 

任何幫助將不勝感激,謝謝

+0

您的代碼對SQL注入開放。首先,你應該停止使用不推薦使用的'mysql_query()'。 PHP強烈建議這樣做:http://php.net/manual/en/function.mysql-query.php您還需要了解什麼是SQL注入以及如何在使用數據庫查詢之前對輸入進行清理。 – David 2012-07-24 20:50:43

+0

請不要使用'mysql_ *'函數來編寫新代碼。他們不再維護,社區已經開始[棄用程序](http://goo.gl/KJveJ)。查看[*紅色框*](http://goo.gl/GPmFd)?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/3gqF9)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/vFWnC)。 – orourkek 2012-07-24 20:50:48

+0

您好,我不得不承認,我很新的PHP所以像SQL注入的條件是相當新的給我,並請求mysql_query()是什麼,我是在大學只教3個月前。我感謝你的意見,我會看看這些教程和文章。我會誠實的說,我沒有看到一個紅色的盒子? – tatty27 2012-07-24 21:14:08

回答

2

PHP中的變量不會在頁面中持續存在。除了其中一些當然,但經常$page$whatever將不會持續。您將加載一個頁面,並在其中添加一些變量,然後在頁面完全加載到瀏覽器中後,這些變量將消失。

建議您在腳本的頂部使用session_start(),在所有頁面中使用$_SESSION['variable']=...來存儲變量。這樣,他們將堅持跨頁面。

最簡單的解決辦法:

$page = $_GET['page']; 

替換該行與此:

$page = isset($_SESSION['page']) && is_numeric($_SESSION['page']) ? $_SESSION['page'] : 0; 
$_SESSION['page'] = $page; 

,並在每個腳本的頂部添加session_start()。如果你有一個共同的頭文件,或者帶有mysql認證數據的config.php,把它放在該文件的頂部。

+0

嗨,謝謝你,我唯一不明白的地方是上一頁搜索框中的值是否存儲在頁面會話中?我想將變量保存到一個會話中,但無法在腳本中調出它的位置? – tatty27 2012-07-24 21:08:15

+0

沒關係,我懷疑它,我把$ _SESSION ['term'] = $ _POST ['item'];在我開始會話後的頁面頂部,然後$ term = $ _SESSION ['term'];就在我查詢之前。工作過一次,謝謝! – tatty27 2012-07-24 21:17:12

+0

@ user1267224不客氣。您至少應該將這個答案作爲一個解決方案來投票或接受。 – 2012-07-24 22:10:33

0

另一種解決方案是使用GET請求搜索並獲得$_GET['term']的術語,並附加到生成的鏈接'&term='. $_GET['term']。這將很容易完成。使用$_SESSION['term']的主要缺點是,如果您將該頁面留給主頁,則此變量將保持設置狀態,直到會話過期並可能會遇到將來的麻煩。