当前位置: 首页 > 知识库问答 >
问题:

分页-在没有mysql_result的情况下从0开始计数(显示错误)

艾安和
2023-03-14

我正在努力将我的MySQL结果分页到每页10个。到目前为止,我已经能够计算有多少结果在列,计算将有多少页,如果有10个结果/页,显示页数,还添加链接到每页(例如:第1页,第2页,第3页,第4页...)

目前,所有38个结果都显示在一页上。当我点击页码,我被带到正确的链接,但与38个结果的内容是相同的。我知道我需要把38个结果分成四页。这就是我被困住的地方:

要查找页数,我有一个变量:

$pages = ceil($items_number / $per_page )

然而,在我看到的多个教程中:

$pages = ceil(mysql_results($items_number,0) / $per_page )

允许数据计数从0开始。当我尝试时,我得到了一个错误

Fatal error: Call to undefined function mysql_results()

所以我不能选择从0开始计算结果(使用mysql_result)并将它们每页分成10个。

我如何绕过mysql_result并能够为每个页码显示适当的数据/项目数?

这里有一个链接,上面是可点击的页码:http://test.ishabagha.com/classic_cars/pag_test.php

代码

<?php
require_once("./includes/database_connection.php");

    error_reporting(E_ALL);
    ini_set('display_errors', 1);

    $page = "";

    $per_page = 10;
    $query = "SELECT productCode, productName, productLine, productScale, productVendor, productDescription, buyPrice FROM products WHERE `productLine` = 'Classic Cars'";
                $result = mysqli_query($dbc, $query)
                or die(mysqli_error($dbc));

    $query_count = "SELECT count(productLine) FROM products WHERE productLine = 'Classic Cars'";
    $items = mysqli_query($dbc, $query_count)
                or die(mysqli_error($dbc));
    $row = mysqli_fetch_row($items);

    $items_number = $row[0];

    $pages = ceil($items_number / $per_page )


?>

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <title>Home</title>
    <link type="text/css" rel="stylesheet" href="classic_cars.css" />
</head>

<body>
    <?php
        require_once("./includes/navigation.php");
    ?>

    <?php

    for($number = 1; $number <= $pages; $number++) {
        echo "<a href='?page=$number'>$number</a>";
                }

        while ($row = mysqli_fetch_array($result)) { 
            $product_code = $row['productCode'];
            $product_name = $row['productName'];
            $product_line = $row['productLine'];
            $product_vendor = $row['productVendor'];
            $product_description = $row['productDescription'];
            $buy_price = $row['buyPrice'];

                echo "<tr>
                <td><p>$product_name</p></td>
                </tr>";

        } // end while ($row = mysqli_fetch_array($result))

    ?>

    <?php
        require_once("./includes/footer.php");
    ?>      
</body>
</html>

共有1个答案

阙庆
2023-03-14
  • 这意味着您将不推荐使用的mysql_*API与mysqli_*混合使用。您应该在项目中只使用一个API,我建议您只使用mysqli_*
  • 您在ceil($items_number/$per_page)
  • 中忘记了
  • 显示所有结果,因为您没有在$query
  • 中对查询设置 限制
  • 为此,您应该知道当前在分页中的页面

首先获取总行数(替换上一行):

$items_number = mysqli_num_rows($items);

让我们使用$_get[“page”]确定当前的页面。如果在URL中没有找到页面,则要显示的默认页面是第一个。

将其放在$pages=ceil($items_number/$per_page);之后

if (isset($_GET['page']) && is_numeric($_GET['page'])) { /* IF PAGE NUMBER IS VALID */
  $currentpage = (int) $_GET['page']; /* STORE THE CURRENT PAGE */
} else {
  $currentpage = 1; /* DEFAULT PAGE IS SET TO 1 */
} 

if ($currentpage > $pages) { /* IF CURRENT PAGE IS 2 OR MORE */
  $currentpage = $pages;
} 
if ($currentpage < 1) { /* IF CURRENT PAGE IS LESS THAN 1, WHICH WE SHOULD PREVENT */
  $currentpage = 1; /* DEFAULT PAGE IS SET TO 1 */
} 

$offset = ($currentpage - 1) * $per_page; /* SET AN OFFSET FOR YOUR QUERY LATER */

您的查询应该如下所示:

$query = "SELECT productCode, productName, productLine, productScale, productVendor, productDescription, buyPrice
          FROM products
          WHERE `productLine` = 'Classic Cars'
          LIMIT $offset, $per_page"; /* LIMITS THE NUMBER TO SHOW IN A PAGE */

但是我们应该将这个查询和执行移到上面给出的第一段代码之后。所以安排是:

$query_count = "SELECT productLine FROM products WHERE productLine = 'Classic Cars'";
$items = mysqli_query($dbc, $query_count) /* EXECUTE THE QUERY */
            or die(mysqli_error($dbc)); 
$items_number = mysqli_num_rows($items); /* GET THE NUMBER OF RESULTS */
$items_number = number_format($items_number); /* SECURE THE FORMAT THAT IT IS A NUMBER */

$per_page = 10; /* NUMBER OF ROWS TO SHOW PER PAGE */
$pages = ceil($items_number / $per_page );

/* THE CODE I HAD GIVEN THAT GETS THE CURRENT PAGE AND DEFINES THE $offset */

/* THEN THE QUERY THAT LIMITS THE NUMBER OF ROWS TO FETCH */

/* THEN YOU FETCH THE RESULT, AND THEN THE HTML */
 类似资料:
  • 问题内容: 构建通知时,如何发出没有声音的通知?我正在构建通知,我的用户不喜欢它发出声音的事实。 如何将其更改为无声/无声? 我如何显示通知: 我尝试在Google上进行搜索,但我得到的唯一结果是如何播放声音,而不是不播放声音… 编辑 在某些人看来,它可能是重复的,但是在我的我无法找到指定默认值的替代方法,而此新方法称为setDefaults 问题答案: 删除的行。它不会播放声音,但是如果需要,您

  • 问题内容: 我正在尝试在HTML页面上显示一些JavaScript变量。我第一次使用它,但是当调用该函数时,它用于覆盖当前页面。 在四处搜寻之后,普遍的共识是人们对此不太喜欢。还有哪些其他选择? 我找到了一个建议使用的页面,但该页面写于2005年。 问题答案: 几乎是要走的路。以下是使用它的几种方法: HTML JavaScript 如果您只想更新I 的一部分,通常只需要添加一个类似或类的空元素,

  • 我刚刚通过nodejs.org上的软件包安装了node和npm,每当我试图搜索或安装npm时,它都会抛出以下错误,除非我执行该命令。我觉得这是一个权限问题?我已经是管理员了。

  • 我试图在Java不使用外部库或HttpURLConnection类的情况下通过SSL Socket进行快速HTTP GET,并注意到结果因使用的HTTP服务器类型而异。 以下是主要的Java代码: 对于TrustedTrustManager代码: 不知何故,我可以访问几个lighttpd托管的网页,但这并没有扩展到谷歌和许多其他类型的服务器。 成功查询lighttpd自己主页的一个示例: 如果您知

  • 问题内容: 我在Android应用程序上使用Firebase,我知道如何使用EventListener从数据库中获取数据。到目前为止。 我的问题是:我有一个ReciclerView,它显示数据中的信息,但仅当我修改数据库时才显示。如果我关闭该应用程序然后再次打开,它什么也不会显示。然后,我进行一些修改,并将所有元素显示在容器中。 有什么方法可以加载数据而无需等待事件,而是手动获取? 先感谢您。 更

  • null 我看到过其他答案,提到了一个名为UCANAccess的Access数据库的JDBC驱动程序。如何设置Java项目以使用这种方法? (建议从Java使用Access数据库的更好方法的答案也是最受欢迎的。)