【问题标题】:PHP paging loop no visible linkPHP分页循环没有可见链接
【发布时间】:2020-07-10 10:47:30
【问题描述】:

晚上好,我正在尝试创建一个分页系统来显示每页一定数量的数据。一切正常,除了一点细节:没有可见的链接。

更准确地说:我的用户在他的个人页面上有 9 篇文章。考虑到我希望每页有 4 篇文章,我总共应该有 3 页(最后一页只有 1 篇文章)。 我的链接如下所示:http://127.0.0.1/projet3/mesannonces.php?page=1

当手动更改 URL 中的页面 (page=2 ..) 时,页面会准确显示应显示的内容。所以,我尝试创建一个循环来显示链接而不是使用 URL

     <?php  
     for($i=1;$i<=$pagesTotales;$i++)
     { echo '<a href="mesannonces.php?page='.$i.'">'.$i.'</a>' ; }

这个循环应该显示 3 个可点击的链接,但是,它只显示 1 个。考虑到手动设置下一页的 URL 会显示正确的页面,我想知道我可能做错了什么。

一切正常,除了只有第一页的链接应该显示为 3 时才可见

如果你觉得这有帮助,这里是整个页面的代码,在修剪不必要的代码后:

<?php
session_start();

$mesannonces=$_SESSION['id'];

//tentative de connexion à la base de donnée 
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=espace_membre;charset=utf8', 'root', '');
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage()); //message d'erreur au cas où la connexion échoue
}

////////////////////////////////////PAGING SYSTEM/////////////////////////////////////

if(isset($_GET['page']) AND !empty($_GET['page']) AND $_GET['page']>0)
{
  $_GET['page']=intval($_GET['page']); //pour qu'on ne puisse pas passer autre chose que des chiffres dans l'URL 
  $pageCourante=$_GET['page'];
}
else
{
  $pageCourante=1; // si l'URL est incomplète, on est redirigé vers la première page 
}


$articleParPage=5; // choisir le nombre d'annonce d'articles par page 
$depart=($pageCourante-1)*$articleParPage ;

 $articleTotalSQL=$bdd->prepare('SELECT * FROM articles WHERE fk_membres_id= ? ORDER BY date_publication DESC LIMIT '.$depart.','.$articleParPage.' ');
 $articleTotalSQL->execute(array($mesannonces));
$articleTotal=$articleTotalSQL->rowCount();
$pagesTotales=ceil($articleTotal/$articleParPage);
//////////////////////////////////////////////////////////////////////////////////////////////
if(isset($_SESSION['id']))
{   echo "ok"; 

}
else
{
  //echo "lol";
  header('location:connexion.php');
} 
?>

<html>

<head>
    <title>Profil de <?php echo $_SESSION['pseudo']?></title>    
    <meta charset='utf-8'>
</head>


<body>
   <div align="center">
         <h3>Tes annonces TROKI</h3>
        <br/>
         <?php 
            if (isset($_SESSION['id'])) 
            {
             ?>
            <h3>les annonces de <?php echo $_SESSION['pseudo']?> </h3>
          pseudo = <?php echo $_SESSION['pseudo']?> <br/>
            
             <?php 
            }
           ?>
  </div>
 <div align="center">
   <ul>
    <?php while($a=$articleTotalSQL->fetch()) { ?>
  
    <!-- this loop shows the articles from the database, everything works fine here-->
    <li>
       <img src="miniature/<?=$a['id']?>.jpg" width=50> <!-- la miniature de l'annonce-->
      <a href="annonce.php?id=<?= $a['id']?>"><?=$a['titre_article']?> <?php echo $a['wilaya']?> <?php echo $a['type_article']?> </a> <a href="modifierannonce.php?edit=<?= $a['id']?> ">     modifier une annonce </a><a href="supprimerannonce.php?=<?= $a['id']?>">      supprimer</a></li>




    <?php } ?>  
   </ul>
 </div>
   <!-- pour changer de page-->
   <div align="center"> 
          <?php  
     for($i=1;$i<=$pagesTotales;$i++) //this loop only shows 1 link instead of 3 
     { 
       echo '<a href="mesannonces.php?page='.$i.'">'.$i.'</a>' ; 
     }
?>
 </div>
</body>
</html>

【问题讨论】:

  • 警告:使用 PDO 时,您应该使用带有占位符值的 prepared statements,并将任何用户数据作为单独的参数提供。在此代码中,您可能有严重的SQL injection bugs。永远不要使用字符串插值或连接,而是使用prepared statements 并且永远不要将$_POST$_GET 或任何用户数据直接放在查询中。有关一般指导和建议,请参阅 PHP The Right Way
  • ????如果您刚刚开始使用 PHP 并想构建应用程序,我强烈建议您查看各种 development frameworks 看看是否能找到适合您风格的需要。它们有多种风格,从 Fat-Free Framework 之类的轻量级到 Laravel 之类的更全面。这些为您提供了具体的示例,以及如何编写代码和组织项目文件的指导。分页是一个已解决的问题。

标签: php mysql pdo pagination


【解决方案1】:

您的页面总数计算错误。您正在计算基于提取的行数,而不是在应用LIMIT 之前匹配的行数。如果你LIMIT 5,那么无论表中有多少行,获取的行数总是小于或等于5。

如果您需要知道匹配的总数,您必须使用COUNT(*) 和相同的WHERE 约束进行二次计算。

【讨论】:

  • 这并不是我想要做的。从我的角度和我的基本需求来看,一切正常。我只是不明白为什么在手动更改 URL 127.0.0.1/projet3/mesannonces.php?page=2127.0.0.1/projet3/mesannonces.php?page=3
  • 通常您会显示类似&lt; 1 2 3 ... 5 6 7 &gt; 的链接,为此您需要知道总数,除非您明确要求,否则您无法获得。再次阅读我关于COUNT(*) 部分的评论。
猜你喜欢
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
  • 2019-10-03
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
相关资源
最近更新 更多