Problème avec d'affichage d'une requête MySQL

Résolu/Fermé
polarbird Messages postés 105 Date d'inscription vendredi 24 juin 2011 Statut Membre Dernière intervention 16 décembre 2023 - Modifié par jordane45 le 6/07/2015 à 00:51
polarbird Messages postés 105 Date d'inscription vendredi 24 juin 2011 Statut Membre Dernière intervention 16 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.

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:

2 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
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 ! )

3
polarbird Messages postés 105 Date d'inscription vendredi 24 juin 2011 Statut Membre Dernière intervention 16 décembre 2023 1
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
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > polarbird Messages postés 105 Date d'inscription vendredi 24 juin 2011 Statut Membre Dernière intervention 16 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 !
0
polarbird Messages postés 105 Date d'inscription vendredi 24 juin 2011 Statut Membre Dernière intervention 16 décembre 2023 1 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
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];
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
6 juil. 2015 à 21:38

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
0
polarbird Messages postés 105 Date d'inscription vendredi 24 juin 2011 Statut Membre Dernière intervention 16 décembre 2023 1
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>
0
polarbird Messages postés 105 Date d'inscription vendredi 24 juin 2011 Statut Membre Dernière intervention 16 décembre 2023 1
16 juil. 2015 à 22:59
Résolu ! http://community.olympe.in/t/probleme-avec-laffichage-dune-requete-mysql-dans-un-tableau/9296
0