首页 > 解决方案 > 在php中对列表进行分页

问题描述

我有这个 php 代码,它使用用户 ID 从数据库中获取图像,然后以列表形式显示所有图像。我试图对图像进行分页,每页限制为 5 个项目。但代码只显示第一页,没有指向其他页面的链接。这是我的php代码

<?php
        include 'connect.php';


            $Category = " ";
            $query = "SELECT Img_dir, Caption, Category FROM images WHERE Category = '". $_REQUEST['Category'] ."' AND user_id = '". $_SESSION['user_id'] ."' LIMIT 0,5";


            $result = mysqli_query($conn,$query);


            while ($row=mysqli_fetch_array($result)){
                $image = $row["Img_dir"];
                $Caption= $row["Caption"];
                $Category = $row["Category"];
                    echo "<dl>";

                    echo "<dd>$Category &nbsp&nbsp <img src='base64_encode($image)' />&nbsp&nbsp $Caption<dd>";

                    echo "</dl>";
                    }
            //number of total pages available
            $results_per_page = 10;

            $number_of_results = mysqli_num_rows($result);

            echo $number_of_pages = ceil($number_of_results / $results_per_page);
            echo "<br>"; echo "<br>";
            for($r=1;$r<=$number_of_pages;$r++)
            {
                ?><a href="dashboard.php?page=<?php echo $r;?>" style="text-decoration:none"><?php echo $r." "; ?></a><?php 
            }
?>

标签: phphtmlcss

解决方案


你可以试试这个:

更改您的查询(使用准备语句):

$query = "SELECT Img_dir, Category FROM images WHERE user_id = ? AND Category = ? ";

至于你的数据结构。

$results = [];
while ($row = $result->fetch_assoc()){
       $key = $row['Category'];
       if(!isset($results[$key]))  $results[$key] = [];

       $results[$key][] = $row['Img_dir '];  //['Category' => [Img_dir,Img_dir, ...]]
}

还有你的 HTML。我会使用描述列表,或者dl因为它有一个不错的标题位置:

  foreach($results as $Category => $image){
        echo "<dl>";
        echo "<dt>$Category</dt>";
        foreach($data as $row){
           echo "<dd><img src='base64_encode($image)' /><dd>";
        }
        echo "</dl>";
  }

未经测试。

订单可能会很古怪,所以你可以使用ksort它。简单地

  ksort($results); 

foreach循环之前。

干杯。


推荐阅读