0

我有一个查询和循环,根据 id 显示产品。在这种情况下,子类别 ID。代码如下:

<div id="categoryproducts">

  <?php
    $productsGet = mssql_query("SELECT * FROM Products WHERE SubCatID = ".$_GET['scid']."");
    while ($echoProds = mssql_fetch_array($productsGet)) {
                            ?>
    <div class="productbox">
       <div class="productboximg">
         <a href="product.php?pid=<?php echo $echoProds['ProductID']; ?>&cid=<?php echo $_GET['cid']; ?>"><img src="<?php echo $echoProds['ProdThumb']; ?>" height="58" width="70" alt="" /></a>
       </div>
    <div class="productboxdtl">
       <h3><a href="product.php?pid=<?php echo $echoProds['ProductID']; ?>&cid=<?php echo $_GET['cid']; ?>"><?php echo $echoProds['Title']; ?></a></h3>
       <p><?php echo $echoProds['Synopsis']; ?></p>
    </div>
      <div class="productboxprc">
        Price &nbsp; <strong>&pound;<?php echo $echoProds['Price']; ?></strong>
      </div>
    <div class="productboxmore">
       <a href="product.php?pid=<?php echo $echoProds['ProductID']; ?>&cid=<?php echo $_GET['cid']; ?>"></a>
    </div>
   </div>
   <?php
    }
   ?>
   <div id="shoplistpagesbot" class="shoplistpages">
    Results Pages: 1 <a href="productlist.php">2</a> [<a href="productlist.php?scid=<?php echo $_GET['scid']; ?>&cid=<?php echo $_GET['cid']; ?>" class="a1">Next &raquo;</a>]
   </div>

我不确定如何在每页显示一定数量的产品,如图所示,有一种在页面之间进行更改的机制,我需要以某种方式编写代码,在一定数量的产品之后,例如 5 个,其余部分显示在下一个页。

谁能建议如何做到这一点?或者指出我应该研究哪些功能的正确方向。

抱歉,如果不是很清楚,我是 PHP 新手。我使用的数据库是 MS SQL 不是 MySQL

4

2 回答 2

0
$pagenumber = $_GET['pagenumber'];
$recordsperpage = 30;
$first = ($pagenumber*$recordperpage)-$recordperpage;
$last = $pagenumber*$recordsperpage;
$productsGet = mysql_query("SELECT * FROM Products WHERE SubCatID = '".$_GET['scid']."' LIMIT $first,$last");

将其放在页面顶部并在链接中传递 GET 参数,例如 browse.php?pagenumber=1;

您可以通过将记录集中的总行数除以 $recordsperpage 变量来计算页数。

然后只需使用一个简单的 for 循环来输出导航链接,例如:

for($i = 1; $i <= $totalpages; $i++) {
echo "<a href='browse.php?pagenumber=$i'>$i</a>";
}

其中 $totalpages 是将记录集中的总行数除以 $recordsperpage 变量的结果。

希望这可以帮助

这是针对 MS SQL 的:

SELECT TOP 10 *
FROM (SELECT TOP 20 * FROM products ORDER BY ID) as T
ORDER BY ID DESC

这里基本上是从前 20 名中以相反的顺序选择前 10 名记录。因此,您将获得记录集中的第二个 10。

将 10 替换为每页的记录数,将 20 替换为上面的 $last 变量。

希望这可以清除它

于 2012-11-28T12:16:57.043 回答
0

取决于您使用的 MSSQL 版本。

我不是 MSSQL 的用户,但显然 SQL Server 2000 使用该TOP命令,而 SQL Server 2005 使用该BETWEEN命令。谷歌搜索应该为您提供几个教程,但我假设您使用的是 2005 版本。

要返回页码上的项目$page_number,一般算法是:

// The most common way to specify which page to display is a GET variable. There
// are others ways and if you'd prefer them, just set $page_number to get the
// number from there instead. Don't forget to filter all data from the GET array
// as a user may try to insert harmful data, such as XSS attacks.
$page_number = $_GET['page'];
$scid = $_GET['scid'];
// Calculate the range of items to display.
$min = $page_number * $items_per_page;
$max = $min + $items_per_page;
$sql = "SELECT * FROM Products WHERE SubCatID = \"{$scid}\" BETWEEN {$min} AND {$max}";

要获取剩余的项目数,您需要一个单独的数据库查询来返回项目总数。

$sql = "SELECT COUNT(*) FROM Products WHERE SubCatID = \"{$scid}\"";
// Using the same $max as before as it is the number of items on the page plus
// total items on previous pages, but we'll redefine it here just in case.
$max = ($page_number * $items_per_page) + $items_per_page;
// Assume that $total_rows is the number returned from executing the count query.
$remaining_items = $total_rows - $max;

现在生成所有其他页面的链接。

$current_page = $_GET['page'];
$total_pages = $total_rows / $items_per_page;
if($current_page != 1) {
    $previous = $current_page - 1;
    echo "<a href=\"example.com/your/script.php?page={$previous}\" title=\"Previous Page\">Previous</a>";
}
for($i = 1; $i <= $total_pages; $i++) {
    echo "<a href=\"example.com/your/script.php?page={$i}\" title=\"Page {$i}\">{$i}</a>";
}
if($current_page != $total_pages) {
    $next = $current_page + 1;
    echo "<a href=\"example.com/your/script.php?page={$next}\" title=\"Next Page\">Next</a>";
}
于 2012-11-28T12:27:57.310 回答