2016-08-23 10 views
0

基本的に私は最後のページを取得しようとしています...そして時にはうまくいきますが、その後いくつかのデータが入力されて間違ったページを取得し、さらにデータが入力されたら右ページが表示されます$ rの部分とは何か関係があります。 それ以上のことがありますが、これは主要な部分です。私は間違った数学や関数を使っているだけだと思います。PHPページネーション最後のページを取得

$limit = 10; 
if($_GET['page'] == 0 OR $_GET['page'] == 1) { 
    $offset = 0; 
} else { 
    $offset = $limit * $_GET['page'] - $limit; 
} 
$next = $_GET['page'] + 1; 
$back = $_GET['page'] - 1; 

$stmt = $db->prepare("SELECT * FROM users"); 
$stmt->execute(); 
$count = $stmt->rowCount(); 

if($count < $limit) { 
    $last = 1; 
} 

$r = $count % $limit; 
if($r < 5) { 
    $last = ceil($count/$limit); 
} else { 
    if($r >= 5) { 
     $last = floor($count/$limit); 
    } 
} 

if($_GET['page'] == 0 or $_GET['page'] == 1) { 
    if (0 >= $last) { 
     $page = 0; 
    } 
    if (1 >= $last) { 
     $page = 1; 
    } 
} 
+0

ある場合しかし、あなたは1ページで尋ねる –

+0

は12の項目がでており、最後のページが2である、それは1であるかもしれない13デシベル最後のページであると言う作品言うことは考えて16物事を置くことはできません時には時にはうまくいきません。 –

+0

あなたのコードによるとそれは不可能です - だから手がかりはありません –

答えて

0

まず、あなたが混乱し、奇数のバグを越えつまずくいる理由はおそらくあるいくつかの非常に混乱したコードを、使用しています。たとえば、0 >= $last$last <= 0と同じもので、1 >= $last$last <= 1と同じものです。だから、基本的にはあなたのコードは...あなたはこの考えてみればちょうど$last <= 1ならば、$page常に1になることを意味し

if ($last <= 0) { 
    $page = 0; 
} 

if ($last <= 1) { 
    $page = 1; 
} 

を読み込みます。あなたの条件は-またはではないため、両方の条件が満たされます。これはほとんど意味をなさない。本当にすべての与えられた条件で 1以上以外ことが期待すべきではない$lastまた

$pageすなわちは常に1になります)、特に以来、floorまたはceil$lastにあなたのロジックはほとんど行いませんセンス。 $rの値に応じて、どちらか一方または両方を実際に実行する必要はありません。あなたはいつもいつもceilにしたいです。

10個以下で、1ページに10個まで入れることができれば、ちょうど1ページが必要であることがわかります。この問題は、あなたが11のものを持っているときに始まります。余分な1つのものがまだページあたり10の限界を超えているので、今は2ページが必要です。ですから、実際にこれについて考えるなら、必要なページ数はで常にceil($count/$limit)に一致するようになるということです。 決してフロアその番号になります。

ceil(16/10) == 2ですが、あなたのロジックによれば、floor(16/10)は実際には1です。ページあたりの上限が10

関連する問題