【发布时间】: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