Problème avec d'affichage d'une requête MySQL
Résolu
polarbird
Messages postés
104
Date d'inscription
Statut
Membre
Dernière intervention
-
polarbird Messages postés 104 Date d'inscription Statut Membre Dernière intervention -
polarbird Messages postés 104 Date d'inscription Statut Membre Dernière intervention -
Bonsoir à tous,
Je rencontre un problème avec l'affichage de ma requête MySQL.Je code mon propre forum,mais dans un souci pratique j'ai choisi de faire un index regroupant à la fois les catégories (avec leurs titres et leurs ID respectifs) et les topics (avec le nb de messages qu'ils contiennent,l'ID de l'auteur,etc...).Pour ce faire,je me suis inspiré du tuto de Tadzoa sur le site du zéro : https://openclassrooms.com/fr/courses/1401411-creer-son-forum-de-toutes-pieces/1401606-page-dindex .Ma page en question est visible à l'adresse suivante : http://barakuda.olympe.in/fr/forum/voir_sujet1.php .
Mon problème : j'arrive bien à afficher les titres de mes catégories ("Règlement" pour la 1ère catégorie) mais ensuite je n'arrive pas à afficher tous les topics car ma requête n'affiche que le premier ("Charte du forum" en l'occurence).
J'aimerais ainsi pouvoir afficher tous mes topics,et pas seulement le premier. Sur la page d'ailleurs il y a 2 topics et seul le premier est affiché.
J'ai cherché partout mais mes connaissances en PHP ne me permettent manifestement pas de résoudre mon problème.Par ailleurs,je suis sûr qu'il ne s'agit pas d'un gros problème,sûrement une erreur sur 2-3 lignes.
Voici mon code :
Je vous remercie par avance de votre aide,que j'espère précieuse.
polarbird
Je rencontre un problème avec l'affichage de ma requête MySQL.Je code mon propre forum,mais dans un souci pratique j'ai choisi de faire un index regroupant à la fois les catégories (avec leurs titres et leurs ID respectifs) et les topics (avec le nb de messages qu'ils contiennent,l'ID de l'auteur,etc...).Pour ce faire,je me suis inspiré du tuto de Tadzoa sur le site du zéro : https://openclassrooms.com/fr/courses/1401411-creer-son-forum-de-toutes-pieces/1401606-page-dindex .Ma page en question est visible à l'adresse suivante : http://barakuda.olympe.in/fr/forum/voir_sujet1.php .
Mon problème : j'arrive bien à afficher les titres de mes catégories ("Règlement" pour la 1ère catégorie) mais ensuite je n'arrive pas à afficher tous les topics car ma requête n'affiche que le premier ("Charte du forum" en l'occurence).
J'aimerais ainsi pouvoir afficher tous mes topics,et pas seulement le premier. Sur la page d'ailleurs il y a 2 topics et seul le premier est affiché.
J'ai cherché partout mais mes connaissances en PHP ne me permettent manifestement pas de résoudre mon problème.Par ailleurs,je suis sûr qu'il ne s'agit pas d'un gros problème,sûrement une erreur sur 2-3 lignes.
Voici mon code :
<?php session_start(); include 'pdo.inc.php'; include 'activite.inc.php'; $categorie = null; $total_msg = 0; ?> <?php /* Remplace caractères accentués d'une chaine */ function remove_accent($str) { $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'OE', 'oe', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'S', 's', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'Y', '?', '?', '?', '?', 'Z', 'z', '?', 'f', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'); $b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o'); return str_replace($a, $b, $str); } /* Générateur de Slug (Friendly Url) : convertit un titre en une URL conviviale.*/ function slug($str){ return mb_strtolower(preg_replace(array('/[^a-zA-Z0-9 \'-]/', '/[ -\']+/', '/^-|-$/'), array('', '-', ''), remove_accent($str))); } ?> <html> <head> <meta charset="utf-8" /> <title>Index * Forum * barakuda.olympe.in</title> <link rel="stylesheet" type="text/css" href="style2.css" /> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <!-- barre fixe start --> <!-- barre fixe stop --> <?php include 'fancybox.php'; ?> </head> <body> <script type="text/javascript"> $(function(){ $('#btn_up').click(function() { $('html,body').animate({scrollTop: 0}, 'normal'); }); $(window).scroll(function(){ if($(window).scrollTop()<150){ $('#btn_up').slideUp(); }else{ $('#btn_up').slideDown(); } }); }); </script> <center><a href="index.php"><img src="logo3.png" title="Forum" alt="Forum" /></a></center> <div id="barre"> <span class="left">Index</span> <?php if(!isset($_SESSION['pseudo'])) { echo '<span class="right"><a href="login.php">Connexion</a> * <a href="inscription.php">Inscription</a></span>'; } else { include 'db.inc.php'; $test_mp = mysql_query('SELECT COUNT(*) FROM mp WHERE id_destinataire="'.$_SESSION['id'].'" AND ok="0"'); $test_mp2 = mysql_fetch_row($test_mp); $mp_non_lu = $test_mp2[0]; include 'menu.php'; } ?> </div> <div id="btn_up"></div> <center><h1>Index du forum</h1></center> <table class="index_cat"> <tr> <th><p>ID</p></th> <th><p>Titre</p></th> <th><p>Auteur</p></th> <th><p>Sujets</p></th> <th><p>Messages</p></th> <th><p>Statut</p></th> </tr> <?php try { include 'pdo.inc.php'; } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT * FROM categories'); while($categories = $reponse->fetch()) { include 'db.inc.php'; $req_sujet1 = mysql_query('SELECT * FROM messages WHERE cat="'.$categories['cat'].'" AND message_id="1"'); $req_sujet2 = mysql_fetch_array($req_sujet1); $req_auteur1 = mysql_query('SELECT * FROM membres WHERE id="'.$req_sujet2['auteur_id'].'"'); $req_auteur2 = mysql_fetch_array($req_auteur1); // Affichage de chaque catégorie if($categorie != $categories['cat']){ $categorie == $categories['cat']; ?> <tr> <td colspan="4"><p><?php echo $categories['name']; ?></p></td> <?php // Comptage des messages et des sujets : start $total_cat1 = mysql_query('SELECT COUNT(*) FROM messages WHERE cat="'.$categories['cat'].'"'); $total_cat2 = mysql_fetch_row($total_cat1); $total_cat3 = $total_cat2[0]; /* !!!! */ $total_sujets1 = mysql_query('SELECT COUNT(*) FROM messages WHERE cat="'.$categories['cat'].'" AND message_id="1"'); $total_sujets2 = mysql_fetch_row($total_sujets1); $total_sujets3 = $total_sujets2[0]; // Comptage des messages et des sujets : stop ?> <td><p><?php echo $total_sujets3; ?> <?php if($total_sujets3 < 2){ echo 'sujet'; }else{ echo 'sujets'; } ?></p></td> <td><p><?php echo $total_cat3; ?> <?php if($total_cat3 < 2){ echo 'message'; }else{ echo 'messages'; } ?></p></td> </tr> <?php } if($total_cat3 != 0){ ?> <tr> <td><p><?php echo $req_sujet2['id']; ?></p></td> <td><p><?php echo $req_sujet2['titre']; ?></p></td> <td><a href="profil-<?php echo $req_sujet2['auteur_id']; ?>-<?php echo slug($req_auteur2['pseudo']); ?>"><?php echo $req_auteur2['pseudo']; ?></a></td> <?php $req_msg_sujet1 = mysql_query('SELECT COUNT(*) FROM messages WHERE cat="'.$categories['cat'].'" AND id="'.$req_sujet['id'].'"'); $req_msg_sujet2 = mysql_query($req_msg_sujet1); $req_msg_sujet3 = $req_msg_sujet2[0]; ?> <td colspan="2"><p><?php echo $req_msg_sujet3; ?></p></td> <td><p> <?php switch($req_sujet2['locked']){ case 1: echo 'locked'; break; case 0: echo 'unlocked'; break; } ?> </p></td> </tr> <?php }else{ ?> <tr><td colspan="6"><p><?php echo 'Aucun message'; ?></p></td></tr> <?php } ?> <?php mysql_close(); } ?> </table> </body> </html>
Je vous remercie par avance de votre aide,que j'espère précieuse.
polarbird
A voir également:
- Problème avec d'affichage d'une requête MySQL
- Affichage double ecran - Guide
- Problème affichage fenêtre windows 10 - Guide
- Windows 11 affichage classique - Guide
- Mysql community server - Télécharger - Bases de données
- Thunderbird problème affichage message - Forum Thunderbird
2 réponses
Bonjour,
Première chose à corriger :
Tu utilises, dans la même page .. des requêtes faites avec l'extension ( obsolète....) mysql_* ... ET PDO !
==>> Passes toutes tes requêtes en PDO !!
Une fois cela corrigé... et si ton souci persiste toujours... repostes ton code modifié (et si possible en y mettant un peu d'indentation histoire de le rendre lisible ! )
Première chose à corriger :
Tu utilises, dans la même page .. des requêtes faites avec l'extension ( obsolète....) mysql_* ... ET PDO !
==>> Passes toutes tes requêtes en PDO !!
Une fois cela corrigé... et si ton souci persiste toujours... repostes ton code modifié (et si possible en y mettant un peu d'indentation histoire de le rendre lisible ! )
Merci de ta réponse.Et pour remplacer toutes mes requêtes MySQL par du PDO,je fais comment ? Pour ma part,je ne m'y connais pas en PDO.J'ai toujours bossé avec du MySQL et ça a toujours bien fonctionné,bien qu'aujourd'hui ce soit effectivement en passe de devenir obsolète.Je bloque sur le PDO.Mais je pense que le problème n'est pas ici.
Cordialement,
polarbird
Tu as un exemple à la ligne 100 de ton code
Certes... mais c'est tellement le bazar dans ton code... qu'avant de chercher la cause du souci il va falloir que tu le retravailles un minimum !
Mais comment je fais un array en PDO ? un un row (pour SELECT COUNT(*) par exemple) ici :
Par exemple :
https://www.php.net/manual/fr/pdostatement.fetchall.php
PS : Merci de bien vouloir préciser le LANGAGE dans les balises de code lorsque tu postes du code sur le forum.
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Comme tu me l'as conseillé,j'ai indenté mon code et j'ai remplacé toutes mes requêtes en MySQL par du PDO.En voici le résultat,dis-moi si cela te convient et si nous pouvons passer à l'étape suivante concernant la résolution de mon problème :