【问题标题】:Small Issue PHP Pagination Mathematics Help小问题 PHP 分页数学帮助
【发布时间】:2010-08-06 19:03:02
【问题描述】:

我的 PHP 分页有一个小问题,我有 6 条记录,一次显示 2 条,当我单击下一步时,它显示 2 到 4 条记录,效果很好,但要显示 4 到 6 条记录,这是行不通的。我不确定我做错了什么。有人有想法么 ?问题与要显示的下一条记录的计算有关

<?php
$per_page = 2;
$start = $_GET['start'];
$query = mysql_query("SELECT * FROM Directory");
$record_count = mysql_num_rows($query);
$record_count = round($record_count / $per_page);

if(!$start) {
    $start = 0;
}

$query = mysql_query("SELECT * FROM Directory LIMIT $start,$per_page") or     die(mysql_error());
$row = mysql_num_rows($query);
// Output Records here

// Setup next and previous button variables
$prev = $start - $per_page;
$next = $start + $per_page;

echo '<p> <h4>';
if($prev < 0) {
    echo 'Previous';
} else {
    echo '<a href="directory.php?start='.$prev.'>Previous</a>';
}

echo ' ' . $start . ' of ' . $record_count;

if($next < $record_count) {
    echo ' <a href="directory.php?start='.$next.'>Next</a>';
} else {
    echo ' Next';
}
echo '</h4> </p>';
?>

【问题讨论】:

  • 您可以在gebsbo.limewebs.com/directory/directory.php 上测试发生了什么,因为我的解释能力不是那么好
  • 执行第 4-6 行时会发生什么?导航到的 URL 是什么?
  • 当我执行第 4-6 行时,它不允许我进入下一组也是最后一组记录
  • @Gebbo,如果问题已解决,请点赞并接受答案。
  • $start 应该是 $start = intval($_GET['start']); 并且 $record_count 应该来自 SELECT count(*) FROM Directory 查询

标签: php mysql pagination


【解决方案1】:

看起来是格式问题。当我查看 URL http://gebsbo.limewebs.com/directory/directory.php?start=1 的来源时,我看到了:

<br /><p> <h4>Previous 1 of 4 <a href="directory.php?start=3>Next</a></h4> </p> </body>

您的 href 属性似乎缺少引号。

在你的代码中,你想要:

echo '<a href="directory.php?start='.$prev.'">Previous</a>';

echo ' <a href="directory.php?start='.$next.'">Next</a>';

【讨论】:

  • 谢谢,我还把 Next 按钮的代码也改成了 if($next
  • 是我想说的,但是如果我将要显示的记录数更改为 6 中的 3 则不会出现下一个按钮,我将尝试 if($next - 1
  • 将下一个代码更新为 if(!($st​​art >= $record_count - $page_per)) { echo ' 下一个'; } else { echo '下一个';所以它现在在一定程度上起作用了
【解决方案2】:

使用此代码进行计算:

$num = 10; // number of items on page
$p = $_GET['page']; // the var that comes from url (for ex: htttp://..../xxx.php?page=3)
$r = mysql_query(" select * from your_table ");

$posts=mysql_num_rows($r); // total posts
$total=(($posts-1)/$num)+1; // toatal pages
$total=intval($total);
$p=intval($p);
if(empty($p) or $p<0 or !isset($p)) $p=1;
if($p>$total) $p=$total;
$start=$p*$num-$num;

// here print the html for pagination (for ex: htttp://...../xxx.php?page=1 .. 2 ...3 .... and so on ...) you can make a for() here

$r = mysql_query(" select * from your_table limit ".$start.", ".$num);
while (....) {
.....
}

【讨论】:

    猜你喜欢
    • 2011-01-10
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多