Problème avec d'affichage d'une requête MySQL [Résolu/Fermé]

Signaler
Messages postés
93
Date d'inscription
vendredi 24 juin 2011
Statut
Membre
Dernière intervention
29 décembre 2020
-
Messages postés
93
Date d'inscription
vendredi 24 juin 2011
Statut
Membre
Dernière intervention
29 décembre 2020
-
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 :
<?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

2 réponses

Messages postés
31090
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 194
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 ! )

3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
93
Date d'inscription
vendredi 24 juin 2011
Statut
Membre
Dernière intervention
29 décembre 2020
1
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
Messages postés
31090
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 194 >
Messages postés
93
Date d'inscription
vendredi 24 juin 2011
Statut
Membre
Dernière intervention
29 décembre 2020


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 !
Messages postés
93
Date d'inscription
vendredi 24 juin 2011
Statut
Membre
Dernière intervention
29 décembre 2020
1 >
Messages postés
31090
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021

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];
Messages postés
31090
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 194

comment je fais un array en PDO ?

Par exemple :
https://www.php.net/manual/fr/pdostatement.fetchall.php

$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);




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
Messages postés
93
Date d'inscription
vendredi 24 juin 2011
Statut
Membre
Dernière intervention
29 décembre 2020
1
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>
Messages postés
93
Date d'inscription
vendredi 24 juin 2011
Statut
Membre
Dernière intervention
29 décembre 2020
1
Résolu ! http://community.olympe.in/t/probleme-avec-laffichage-dune-requete-mysql-dans-un-tableau/9296