2011-03-14 51 views
0

如果你知道你有2個數據庫項目,並且你的分頁每頁有5個。如果用戶請求一個頁面,你怎麼知道該頁面是否存在?我試圖讓它有人請求一個頁面,並且該頁面上沒有項目,默認爲頁面1.所以,如果我要求頁面2,它應該默認爲頁面1.我認爲這將是一些數學,但不是很確定。如果你知道你有2個數據庫項目,每頁5個。如果用戶請求一個頁面,你怎麼知道該頁面是否存在?

+0

你把你網站上的鏈接放到不應該存在的頁面上嗎? – dqhendricks

+0

不...但是,如果我去第2頁,沒有物品出現。所以我想讓它默認第1頁,如果該頁碼不存在。 – Keverw

+2

除非您使用標題重定向,否則此練習可能會使書籤,鏈接共享和搜索引擎索引失效。 – dqhendricks

回答

1
$requestedPage = (int)$_GET['page']; 

if (ceil($numResults/$perPage) < $requestedPage) { 
    $requestedPage = 1; 
} 
0

嚴格來說,您不能阻止用戶手動輸入超出範圍的值。
所以,作爲你,我只是不在乎。

只是告訴他一個空白頁

+1

這將使神話般的用戶體驗。神奇的建議。 –

0

當查詢第二頁數據,如果結果爲空時進入第一頁。

0

對於每個請求,您將count()除以每頁的數字並將其四捨五入到最接近的整數。

這會給你總頁數。在每次請求之前,檢查請求頁面是否爲< =最後一頁。

下面有一些有用的功能,你可以作爲一個例子使用:

 private function countRecords() { 
      $this->recordCount = count($this->data); 
      return; 
    } 

    private function calcPages() { 
      $this->totalPages = ceil($this->recordCount/$this->perPage); 
      return; 
    } 

    private function checkCurrent() { 
      $this->currentPage = ($this->currentPage > $this->totalPages ? 
              $this->totalPages : 
              $this->currentPage); 
      $this->currentPage = ($this->currentPage < 1 ? 1 : $this->currentPage); 
      return; 
    } 

    private function calcOffset() { 
      $this->offset = ($this->currentPage - 1) * $this->perPage; 
    } 
0

一個天真的實現是簡單地檢查數據庫是否返回任何行。你沒有提到你的數據庫服務器或框架的接口,所以我不能給你任何實際的代碼,但粗:

if(num_rows($query) == 0 && $page != 1) { 
    redirect_to_page_one() && return; 
} 

當然你也可以做到透明,而不是做一個重定向,但啓動有點難以遵循。

相關問題