polarbird
Messages postés105Date d'inscriptionvendredi 24 juin 2011StatutMembreDernière intervention16 décembre 2023
-
Modifié par jordane45 le 6/07/2015 à 00:51
polarbird
Messages postés105Date d'inscriptionvendredi 24 juin 2011StatutMembreDernière intervention16 décembre 2023
-
16 juil. 2015 à 22:59
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.
jordane45
Messages postés38370Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 5 janvier 20254 722 6 juil. 2015 à 00:55
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 ! )
polarbird
Messages postés105Date d'inscriptionvendredi 24 juin 2011StatutMembreDernière intervention16 décembre 20231 6 juil. 2015 à 20:58
Bonjour,
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
jordane45
Messages postés38370Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 5 janvier 20254 722
>
polarbird
Messages postés105Date d'inscriptionvendredi 24 juin 2011StatutMembreDernière intervention16 décembre 2023 6 juil. 2015 à 21:02
Et pour remplacer toutes mes requêtes MySQL par du PDO,je fais comment ?
Tu as un exemple à la ligne 100 de ton code
$reponse = $bdd->query('SELECT * FROM categories');
Mais je pense que le problème n'est pas ici.
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 !
polarbird
Messages postés105Date d'inscriptionvendredi 24 juin 2011StatutMembreDernière intervention16 décembre 20231
>
jordane45
Messages postés38370Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 5 janvier 2025 6 juil. 2015 à 21:08
Ok merci.Soit pour query je peux le remplacer dans mes nombreuses requêtes,comme ici par exemple :
$req_auteur1 = mysql_query('SELECT * FROM membres WHERE id="'.$req_sujet2['auteur_id'].'"'); $req_auteur2 = mysql_fetch_array($req_auteur1);
Mais comment je fais un array en PDO ? un un row (pour SELECT COUNT(*) par exemple) ici :
$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];
jordane45
Messages postés38370Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 5 janvier 20254 722 6 juil. 2015 à 21:38
$sql = "SELECT * FROM membres WHERE id= '".$req_sujet2['auteur_id']."' ";
$req_auteur1 = $bdd->query($sql);
$result = $req_auteur1->fetchall();
// et par exemple.. le temps des tests ..pour voir le contenu de $result
print_r($result);
polarbird
Messages postés105Date d'inscriptionvendredi 24 juin 2011StatutMembreDernière intervention16 décembre 20231 7 juil. 2015 à 21:36
Bonjour jordane45,
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 :
<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 = $bdd->query('SELECT * FROM messages WHERE cat="'.$categories['cat'].'" AND message_id="1"');
$req_sujet2 = $req_sujet1->fetch();
$req_auteur1 = $bdd->query('SELECT * FROM membres WHERE id="'.$req_sujet2['auteur_id'].'"');
$req_auteur2 = $req_auteur1->fetch();
// 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 = $bdd->query('SELECT COUNT(*) FROM messages WHERE cat="'.$categories['cat'].'"');
$total_cat2 = $total_cat1->fetch();
$total_cat3 = $total_cat2[0];
/* !!!! */
$total_sujets1 = $bdd->query('SELECT COUNT(*) FROM messages WHERE cat="'.$categories['cat'].'" AND message_id="1"');
$total_sujets2 = $total_sujets1->fetch();
$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 = $bdd->query('SELECT COUNT(*) FROM messages WHERE cat="'.$categories['cat'].'" AND id="'.$req_sujet2['id'].'"');
$req_msg_sujet2 = $req_msg_sujet1->fetch();
$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>
6 juil. 2015 à 20:58
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
6 juil. 2015 à 21:02
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 !
6 juil. 2015 à 21:08
Mais comment je fais un array en PDO ? un un row (pour SELECT COUNT(*) par exemple) ici :
6 juil. 2015 à 21:38
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
7 juil. 2015 à 21:36
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 :