我有以下代码,这是更大的应用程序中分页的基础。但是,它不起作用,因为虽然我应该从url获取pg的值,但pg永远不会高于2.出于某种原因,next = pg + 1;似乎总是将pg视为1,无论在url上传递什么。与上一个问题类似。我假设我压倒从GET获得的值,但我不确定在哪里。
问题似乎在于我如何计算$ max和限制,而不是0,10,10,10传递。另外,$ max之前的ifcode似乎没有成功阻止pg为0。
<?php
if (isset($_GET["pg"])) {
$pg = $_GET["pg"];
} else $pg = 1;
$con = mysql_connect("localhost","","");
if(!$con) {
die('Connection failed because of' .mysql_error());
}
mysql_select_db("ebay",$con);
if ($pg < 1) {
$pg = 1;
} elseif ($pg > $last) {
$pg = $last;
}
$table = 'AUCTIONS';
$page_rows = 10;
$max = ' limit ' .($pg - 1) * $page_rows .', ' .$page_rows;
$rows = getRowsByArticleSearch($query, $table, $max);
$rowcount = count($rows);
echo $rowcount;
$last = ceil($rowcount/$page_rows);
$page_rows = 10;
$rowcount = 2;
// Would normally obtain the number of rows returned, but database stuff is snipped for brevity
$last = ceil($rowcount/$page_rows);
if ($pg < 1) {
$pg = 1;
} elseif ($pg > $last) {
$pg = $last;
}
$self = htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'utf-8');
echo " <a href='$self?pg=1'> <<-First</a> ";
$previous = $pg-1;
echo " <a href='$self?pg=$previous'> <-Previous</a> ";
echo "---------------------------";
$next = $pg+1;
echo " <a href='$self?pg=$next'>Next -></a> ";
echo " <a href='$self?pg=$last'>Last ->></a> ";
答案 0 :(得分:1)
这是你的问题:
$last = ceil($rowcount/$page_rows);
将$ last设置为1,然后你有:
if ($pg > $last) {
$pg = $last;
}
编辑:我想知道你的意思是,而不是:
$last = ceil($page_rows/$rowcount);
再次编辑:根据Cassy的回答,你可能真的只需要为这些变量设置正确的值:
$page_rows = 10;
$rowcount = 2;
答案 1 :(得分:1)
代码是正确的,但数据错误。
当你有
时$page_rows = 10;
$rowcount = 2;
实际上意味着,您在页面上显示2行,每行显示10行。这使它总共1页。
将其更改为
$page_rows = 10;
$rowcount = 200;
瞧,瞧,你会得到你的分页。
答案 2 :(得分:0)
基于现在修订的问题:
$rowcount = count($rows);
自然会总是返回10,因为你限制了结果
... LIMIT 10;
但这可能有所帮助:
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
第一个查询仍将返回您的文章,而第二个查询将返回前一个选择在不使用LIMIT子句时可能拥有的行数。
希望有所帮助。