8768 sujets

Développement web côté serveur, CMS

Bonsoir, ne bénéficiant d'aucunes formation PHP, j'apprend grâce au forum comme alsacréation, aujourd'hui (enfin depuis plusieurs semaines) je bloque sur un codage de pagination.
Celui-ci affiche bien le bon nombre de page pour une certaine catégories d'articles, mais, 2 problèmes se pose à moi :
1/ Mes données stockées sur la BDD ne s'affiche pas (comme si ma BDD était vide mais ça ce n'est pas possible)
2/ Lors du clic sur la page souhaitée, je n'ai pas de changement d'articles (alors que dans la requête je demande à ce que les articles soit affichés 5 par 5.

Auriez-vous une idée de mes erreurs en regardant mon code suivant ? Merci de l'aide que vous pourrez m'apporter


<?php
$host = "******";
$user = "******";
$passwd  = "******";

try
{
$bdd = new PDO("mysql:host=$host; dbname=******", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
}
catch (Exception $e)
{
  echo $e->getMessage();
}
try {
$retour = $bdd->prepare("SELECT COUNT(*) AS id FROM `liste-articles` WHERE categories='santé' ORDER BY `id`");
 
$retour->execute();
$articlesparpage=5;
$articles=$retour->fetch(PDO::FETCH_ASSOC);
$totaldesarticles=$articles['id'];
$nombredepage=ceil($totaldesarticles/$articlesparpage);
 
for ($i=1;$i<= $nombredepage;$i++)
{
    echo '<li><a class="page-numbers current" href="http://www.dieteticien-nutritionniste-sante.com/articles/sante1.php?page=' . $i . '">' . $i . '</a></li>';
}
if (isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page']>0 && $_GET['page']<= $nombredepage)
{
        $page=intval($_GET['page']);
}
else
{
        $page=1;
}
 
$premierarticleafficher=$page*$articlesparpage-$articlesparpage;
 
$reponse=$bdd->prepare("SELECT * FROM `liste-articles` WHERE categories= :category ORDER BY `id` DESC LIMIT :offset, :id");
$reponse->bindValue(':category', 'santé');
$reponse->bindParam(':id', $articlesparpage);
$reponse->bindParam(':offset', $premierarticleafficher);
 
$reponse->execute();
 
?>
</ol>

<?php while ($articles = $reponse->fetch(PDO::FETCH_ASSOC)); 
{?>

<div class="masonry__item">
<article class="article article--thumb media flush--bottom grid post type-post status-publish format-standard has-post-thumbnail hentry category">
<div class="media__img--rev grid__item five-twelfths palm-one-whole">
<a href="articles/actualites-dietetiques.php?id=<?php echo $articles['id']; ?>" class="image-wrap" style="padding-top: 76.417910447761%"> <img src="../<?php echo $articles['thumbs']; ?>" alt="<?php echo $articles['alt_images']; ?>"> </a></div>
<div class="media__body grid__item seven-twelfths palm-one-whole">
<div class="article__category">
<a class="small-link" href="articles/<?php echo $articles['url_categories']; ?>" title="Voir tous les articles : <?php echo $articles['categories']; ?>"><?php echo $articles['categories']; ?></a></div>
<div class="article__title  article--thumb__title"> <a href="articles/actualites-dietetiques.php?id=<?php echo $articles['id']; ?>">
<h3 class="hN"><?php echo $articles['titre']; ?></h3></a></div>
<div class="article--grid__body">
<div class="article__content"><p><?php echo $articles['abstract']; ?></p></div>
</div><ul class="nav  article__meta-links"><li class="xpost_date"><i class="icon-time"></i> <?php echo $articles['date']; ?></li></ul>
</div> </article>
<hr class="separator  separator--subsection">
</div>

<?php 
}
        $reponse->closeCursor();
 
}
catch (Exception $e) {
        echo 'Erreur : ',  $e->getMessage();
}
?>

Modifié par dafid5 (03 Feb 2016 - 21:40)
Salut,
Alors je ne sais pas si c'est une erreur de frappe mais cette requête devrait te renvoyer une erreur :

$reponse=$bdd->prepare("SELECT id * FROM `liste-articles` WHERE categories= :category ORDER BY `id` DESC LIMIT :offset, :id");

Select id * => normalement ça ne marche pas, * tout court.

$reponse=$bdd->prepare("SELECT * FROM `liste-articles` WHERE categories= :category ORDER BY `id` DESC LIMIT :offset, :id");

Modifié par renard13 (03 Feb 2016 - 21:38)
renard13 a écrit :
Salut,
Alors je ne sais pas si c'est une erreur de frappe mais cette requête devrait te renvoyer une erreur :
Select id * =&gt; normalement ça ne marche pas, * tout court.


Oui c'était une erreur de frappe, mais cela ne résout malheureusement pas les problèmes
Smiley ravi dommage !
Tu obtiens quel résultat quand tu fais un var_dump des retours de tes requêtes ?

=> dans phpmyadmin tu obtiens les résultats attendus quand tu exécutes tes requêtes ?
Modifié par renard13 (03 Feb 2016 - 21:51)
renard13 a écrit :
Smiley ravi dommage !
Tu obtiens quel résultat quand tu fais un var_dump des retours de tes requêtes ?


Alors en réalisant un var dump avec la variable $articles

<?php
var_dump($articles);
while ($articles = $reponse->fetch(PDO::FETCH_ASSOC));
{?>

J'obtiens : array(1) { ["id"]=> string(2) "23" }

Avec la variable $reponse

object(PDOStatement)#3 (1) { ["queryString"]=> string(96) "SELECT * FROM `liste-articles` WHERE categories= :category ORDER BY `id` DESC LIMIT :offset, :id" }
Tu as fait var_dump($reponse->fetch(PDO::FETCH_ASSOC));) ?

$reponse=$bdd->prepare("SELECT * FROM `liste-articles` WHERE categories= :category ORDER BY `id` DESC LIMIT :offset, :id");
Cette requête devrait normalement te renvoyer toute ta liste d'articles avec tous les champs de ta table liste-articles.
Si tu essayes d’exécuter tes requêtes dans phpmyadmin onglet sql, tu obtiens le résultat que tu souhaites ?
Modifié par renard13 (03 Feb 2016 - 22:04)
Alors j'ai donc écrit comme cela

<?php
var_dump($reponse->fetch(PDO::FETCH_ASSOC));
{?>

et cela m'affiche: bool(false)

quant à ma requète dans phpmyadmin : SELECT * FROM `liste-articles` WHERE categories = 'santé' ORDER BY `id`

elle fonctionne très bien
Bonjour,

Deux pistes éventuelles :
- Un problème d'encodage de ta base (UTF8, pas UTF8)
- Également, je trouve les simple quote un peu bizarre dans le code, non ?
Bonjour,

SolidSnake a écrit :
Également, je trouve les simple quote un peu bizarre dans le code, non ?
Il s'agit des single-quotes anglicans, ils ne sont pas valable en Php et sont à remplacer par '
SolidSnake a écrit :
Ahh metal gear solid, de bon souvenirs...


Alors en ce qui concerne les simples quotes, je ne sais pas le nom de cette apostrophe ' ou de celle-là
`. Mais je présume que c'est de la dernière dont vous parliez avec
Greg_Lumiere a écrit :

je trouve les simple quote un peu bizarre dans le code, non ?



J'ai donc remplacer cette quote ? anglican ? ` par une apostrophe classique ', résultat, ça marche encore moins bien, car mes numéros de page qui s'affichaient jusqu'alors ne s'affiche plus.
Au cas ou, j'ai fait un test en remplaçant aussi toutes les apostrophes ' par les autres et ça ne marche pas non plus.

upload/40410-Sans-titre.png
SolidSnake a écrit :
Un problème d'encodage de ta base (UTF8, pas UTF8)


Je viens de revérifié, mes tables de BDD sont bien en utf8_general_ci ainsi qu'à l'intérieur (interclassement)
Si cela peut aider, avant de vouloir intégrer une pagination automatique, ma requête php était la suivante (et fonctionnait parfaitement)


<?php 

// Déclaration des paramètres de connexion
$host = "*******";
$user = "*******";
$passwd  = "*******";

try
{
$bdd = new PDO("mysql:host=$host; dbname=*******", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
}
catch (Exception $e)
{
  echo $e->getMessage();
}
$req = $bdd->query("SELECT * FROM `liste-articles` WHERE categories = 'santé' ORDER BY `id` DESC LIMIT 0,5");
$tab = $req->fetchAll(PDO::FETCH_ASSOC);
foreach($tab as $cle => $arr)
{ 
?>


<div class="masonry__item">
<article class="article article--thumb media flush--bottom grid post type-post status-publish format-standard has-post-thumbnail hentry category">
<div class="media__img--rev grid__item five-twelfths palm-one-whole">
<a href="actualites-dietetiques.php?id=<?php echo $tab[$cle]['id']; ?>" class="image-wrap" style="padding-top: 76.417910447761%"> <img src="../<?php echo $tab[$cle]['thumbs']; ?>" alt="<?php echo $tab[$cle]['alt_images']; ?>"> </a></div>
<div class="media__body grid__item seven-twelfths palm-one-whole">
<div class="article__category">
<a class="small-link" href="<?php echo $tab[$cle]['url_categories']; ?>" title="Voir tous les articles : <?php echo $tab[$cle]['categories']; ?>"><?php echo $tab[$cle]['categories']; ?></a></div>
<div class="article__title  article--thumb__title"> <a href="actualites-dietetiques.php?id=<?php echo $tab[$cle]['id']; ?>">
<h3 class="hN"><?php echo $tab[$cle]['titre']; ?></h3></a></div>
<div class="article--grid__body">
<div class="article__content"><p><?php echo $tab[$cle]['abstract']; ?></p></div>
</div><ul class="nav  article__meta-links"><li class="xpost_date"><i class="icon-time"></i> <?php echo $tab[$cle]['date']; ?></li></ul>
</div> </article>
<hr class="separator  separator--subsection">
</div>


<?php
}
    $req->closeCursor() ; // Termine le traitement de la requête
?>

Modifié par dafid5 (04 Feb 2016 - 18:31)
Salut,
Pour moi ton problème pourrait venir de l'une de ces deux variables :

$totaldesarticles=$articles['id'];
$nombredepage=ceil($totaldesarticles/$articlesparpage);
Du coup avec des mauvaises valeurs ta requête avec LIMIT :offset, :id renvoie un résultat vide. Que te donne un print_r ou var_dump de $totaldesarticles et $nombredepage ?
Voici le résultat que j'obtiens.

lien
La pagination ne fonctionne pas et le nombre d'article ne se limite pas !!

avez-vous une idée ?
Modifié par dafid5 (26 Feb 2016 - 11:55)
Auriez-vous un tuto avec ce genre de pagination à me conseiller, car je ne m'en sort pas avec celui là !! merci à vous

upload/40410-pagination.JPG
Voici le résultat que j'obtiens.

lien
La pagination ne fonctionne pas et le nombre d'article ne se limite pas !!

avez-vous une idée ?
fais un var_dump() de ta requete AVANT de l'envoyer à ta base.. pour voir quels sont les values que tu envois.

je sens qu'on va voir un truc du genre un string à la place d'un entier. d'où le bool(false) mais j'attends le résultat du var_dump();
JENCAL a écrit :
fais un var_dump() de ta requete AVANT de l'envoyer à ta base.. pour voir quels sont les values que tu envois.

je sens qu'on va voir un truc du genre un string à la place d'un entier. d'où le bool(false) mais j'attends le résultat du var_dump();



Bonjour JENCAL, merci de ta réponse et désolé du retard.

Alors avec un var_dump($reponse);
j'obtiens l'affichage suivant :
object(PDOStatement)#4 (1) { ["queryString"]=> string(94) "SELECT * FROM `liste-articles` WHERE categories='santé' ORDER BY `id` DESC LIMIT :offset, :id" }



et un avec un var_dump($retour);
j'obtiens l'affichage suivant :
object(PDOStatement)#3 (1) { ["queryString"]=> string(43) "SELECT COUNT(*) AS id FROM `liste-articles`" }
Bonjour,

J'ai du mal à en démordre, mais pense à bien utilisé les ' et pas ` dans ton code, ça ne pourra que mieux fonctionner pour moi (en tout cas, ça devrait Smiley cligne )