我使用下面的代码执行“下一个”和“上一个”导航。它可以工作,但即使有一个条目,下一个按钮显示,当有超过20个条目时,一旦它们被提供,代码显示下一个和上一个。我怎样才能使下一个按钮只显示超过10个,如果没有更多的结果显示,我怎么不显示下一个和上一个按钮:
if (!isset($_GET['pg']) or !is_numeric($_GET['pg'])) {
$startrow = 0;
} else {
$startrow = (int)mysql_real_escape_string($_GET['pg']);
}
echo '<a id=pgnvg href=
"'.$_SERVER['PHP_SELF'].'?pg='.($startrow+20).'& q='.($what).'">Next</a>';
$prev = $startrow - 20;
//only print a "Previous" link if a "Next" was clicked
if ($prev >= 0)
echo '<a id=pgnvg2 href="'.$_SERVER['PHP_SELF'].'?pg='.$prev.'">Previous</a>';
答案 0 :(得分:4)
您需要检查实际返回的项目数量,例如:
if($itemAmount > 20) {
echo '<a id=pgnvg href=
"'.$_SERVER['PHP_SELF'].'?pg='.($startrow+20).'& q='.($what).'">Next</a>';
}
否则下一个按钮将始终显示
答案 1 :(得分:2)
假设您有一个变量$itemsCount
,其中包含记录集中的项目数。
如果您没有,可以使用
等查询进行计算count(*) FROM <wathever table or join> WHERE <list of conditions>
此外,我会使用一个名为ITEMS_ON_A_PAGE
的常量(希望你猜它的内容;)
define ('ITEMS_ON_A_PAGE',20); // put it where more appropriate
...
if (!isset($_GET['pg']) or !is_numeric($_GET['pg'])) {
$startrow = 0;
} else {
// no need to issue a mysql query, you need an integer from a numeric variable
$startrow = (int)$_GET['pg'];
}
$linkTemplate = '<a id="%s" href="?%s">%s</a>';
$nextPageFirstItem = $startrow + ITEMS_ON_A_PAGE;
$previousPageFirstItem = $startrow - ITEMS_ON_A_PAGE;
if ($itemsCount> $nextPageFirstItem) {
echo printf($linkTemplate,
'pgnvg',
http_build_query(array('pg'=>$nextPageFirstItem,'q'=>$what)),
'Next'
);
}
if ($previousPageFirstItem >= 0) {
echo printf($linkTemplate,
'pgnvg2',
http_build_query(array('pg'=>$previousPageFirstItem,'q'=>$what)),
'Previous'
);
}
此处有为您创建查询的http_build_query的参考
将有很大的空间来改进此代码,但作为一个起点,它就足够了;)
答案 2 :(得分:-2)
您可能实际上想要使用switch
语句。有时if
语句在你有太多的时候停止工作而且有太多的评价是真的。只需注意您希望break;
与不打破(不包括break;
)。