2011-03-14 8 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

厳密に言えば、ユーザーが範囲外の値を手動で入力することを防ぐことはできません。
だから、私は気にしないだろう。

ちょうどあなたが、2ページ目のデータを照会する場合、結果が空の場合、最初のページに行くこと

+1

これはすばらしいユーザーエクスペリエンスを実現します。素晴らしいアドバイス。 –

0

彼に空白のページが表示されます。

0

各リクエストごとに、行のcount()を1ページあたりの数で割り、それを最も近い整数に丸めます。

これにより、合計ページ数が表示されます。各リクエストの前に、リクエストページが最後のページに< =であることを確認します。あなたは一例として使用することができます

相続人は、いくつかの便利な機能:

 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; 
} 

あなたはもちろん、リダイレクトを行うのではなく、透過的にそれを行うことができますが、それは始まり追いつくのがやや難しい

関連する問題