Non affichage des tableaux PHP/SQL

Tchek -  
 Tchek -
Bonjour, je conçoit un site web et je suis sur le forum mais lors du test les tableaux sensé affiché les messages du forum ne s'affichent pas. j'ai fais des tests pour voir ou est le problème et y a un bout de code dans lequel rien ne s'exécute s'ait pas pourquoi. je vous poste ce code ci-dessous:

		<table>
			<?php
					//Début de la boucle
					while($data = $query->fetch())
					{
					//On affiche chaque catégorie
						if( $categorie != $data['cat_id'] )
						{
							//Si c'est une nouvelle catégorie on l'affiche
							$categorie = $data['cat_id'];
			?>
			<p>les tableaux veulent pas s'afficher!!!!</p>
						<tr>
							<th></th>
							<th class="titre"><strong><?php echo stripslashes(htmlspecialchars($data['cat_nom'])); ?>
							</strong></th>    
							<th class="nombremessages"><strong>Sujets</strong></th>
							<th class="nombresujets"><strong>Messages</strong></th>
							<th class="derniermessage"><strong>Dernier message</strong></th>
						</tr>
			<?php
			}
			//Ici, on met le contenu de chaque catégorie
			?>
			<?php
					// Ce super echo de la mort affiche tous
					// les forums en détail : description, nombre de réponses etc...

					echo'<tr><td><img src="./images/message.gif" alt="message" /></td>
					<td class="titre"><strong>
					<a href="./voirforum.php?f='.$data['forum_id'].'">
					'.stripslashes(htmlspecialchars($data['forum_name'])).'</a></strong>
					<br />'.nl2br(stripslashes(htmlspecialchars($data['forum_desc']))).'</td>
					<td class="nombresujets">'.$data['forum_topic'].'</td>
					<td class="nombremessages">'.$data['forum_post'].'</td>';

					// Deux cas possibles :
					// Soit il y a un nouveau message, soit le forum est vide
					if (!empty($data['forum_post']))
					{
						 //Selection dernier message
					 $nombreDeMessagesParPage = 15;
						 $nbr_post = $data['topic_post'] +1;
					 $page = ceil($nbr_post / $nombreDeMessagesParPage);
						 
						 echo'<td class="derniermessage">
						 '.date('H\hi \l\e d/M/Y',$data['post_time']).'<br />
						 <a href="./voirprofil.php?m='.stripslashes(htmlspecialchars($data['membre_id'])).'&amp;action=consulter">'.$data['membre_pseudo'].'  </a>
						 <a href="./voirtopic.php?t='.$data['topic_id'].'&amp;page='.$page.'#p_'.$data['post_id'].'">
						 <img src="./images/go.gif" alt="go" /></a></td></tr>';

					 }
					 else
					 {
						 echo'<td class="nombremessages">Pas de message</td></tr>';
					 }

					 //Cette variable stock le nombre de messages, on la met à jour
					 $totaldesmessages += $data['forum_post'];

					 //On ferme notre boucle et nos balises
				 }//fin de la boucle
				$query->CloseCursor();
		echo '</table></div>';
			?>


13 réponses

  1. JooS Messages postés 2705 Statut Membre 228
     
    Salut, tu peux montrer la requête !
    0
  2. Tchek
     
    Voici la requête:

    <code>

    <?php
    $query=$db->prepare('SELECT cat_id, cat_nom,
    forum_forum.forum_id, forum_name, forum_desc, forum_post,
    forum_topic, auth_view, forum_topic.topic_id,
    forum_topic.topic_post, post_id, post_time, post_createur,
    membre_pseudo,
    membre_id
    FROM forum_categorie
    LEFT JOIN forum_forum ON forum_categorie.cat_id =
    forum_forum.forum_cat_id
    LEFT JOIN forum_post ON forum_post.post_id =
    forum_forum.forum_last_post_idLEFT JOIN forum_topic ON forum_topic.topic_id = forum_post.topic_id
    LEFT JOIN forum_membres ON forum_membres.membre_id =
    forum_post.post_createur
    WHERE auth_view <= :lvl
    ORDER BY cat_ordre, forum_ordre DESC' );
    $query->bindValue(':lvl',$lvl,PDO::PARAM_INT);
    $query->execute();
    ?>
    0
    1. JooS Messages postés 2705 Statut Membre 228
       
      A première vu !
      SQL : T'as oublier le GROUP BY
      PHP : Dans ton cas, c'est bindParam

      quant au reste, il faut que t'explique le rôle de chaque table, et ce que tu veux avoir comme résultat !
      0
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    je ne comprend pas trop comment tu fais le test si c'est une nouvelle catégorie ?

    avant ta boucle while a quelle valeur as tu initialisé la variable $categorie ??

    //On affiche chaque catégorie
    if( $categorie != $data['cat_id'] )
    {
    //Si c'est une nouvelle catégorie on l'affiche
    $categorie = $data['cat_id'];
    0
  4. Tchek
     
    catégorie est initialisé à NULL

    il y a une table qui contiendra les catégories de forum l'autre sur les messages de chaque catégories, un pour les membres, l'autre pour les messages et les informations de chaque message, utilisée pour écrire le nom de chaque forum et leur description. etc. J'utilise le tutoriel tiré du site du zér0.
    0
    1. JooS Messages postés 2705 Statut Membre 228
       
      Pas compris, désolé !
      Y a une jointure entre 5 tables dans ta requête !
      nom de table(champ1, champ2, ...)
      Essaye de mieux expliquer !
      0
    2. Tchek
       
      je suis le tutoriel de Tadzoa du site du zéro donc les requêtes sont pas trop expliqué tu voie. c'est un peu du copier/coller là.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mister Forum
     
    Bonjour moi j'ai le même problème mais j'ai l'impression que la condition du
    while($data = $query->fetch())
    n'est pas vérifier car lorsque je regarde le code source dans le navigateur au niveau des balises <table> il n'y a rien de marquer. Quelqu'un aurait-il une idée?

    Merci d'avance
    0
  7. Alain_42 Messages postés 5413 Statut Membre 904
     
    peut être que ta requette n'a retourné aucun résultat, pour voir le nombre:

    //mets cette ligne juste avant ta boucle while pour avoir le nombre de résultats trouvés:
    echo $query->rowCount() . ' résultat(s)';
    
    while($data = $query->fetch())
    
    0
  8. Mister Forum
     
    Bonsoir effectivement la requête ne retourne aucun résultat; j'ai 0 résultat. Je crois qu'il faudrait que je revoie ma base de données ou bien? Merci Alain_42 pour cette nouvelle astuce.
    0
  9. Alain_42 Messages postés 5413 Statut Membre 904
     
    je pense que tu devrait revoir ta requette, eventuellement faire afficher les erreur au moment de l'execution de celle çi

    try catch

    vas voir sur Google comment daire avec mysql PDO
    0
  10. Tchek
     
    Bonjour jusqu'à présent j'ai pas trouver de solution à mon problème rien ne s'affiche sous la boucle while j'ai inséré un try catch dans le requête de connexion à la BD et il me retourne aucune erreur de connexion à la BD. Je pense que l'erreur est dans la requête mais j'arrive pas à la trouvé. c'est un projet que je doit rendre en fin septembre et la ch8 pas très avancé. Aider moi
    s'l vous plaît
    .
    0
    1. JooS Messages postés 2705 Statut Membre 228
       
      Alors ta BD est vide !
      0
    2. TCHEK
       
      j'ai rempli ma BD mais pas toutes les tables je l'avoue. Je vais la remplir et je vous tient au courant.
      0
    3. Tchek
       
      jusque là rien ne s'affiche même pas un tableau vide. Ne doit t-on pas utilisé l'extension MySQL i au lieu de MySQL pour la connexion a la BD? s
      0
    4. JooS Messages postés 2705 Statut Membre 228
       
      Execute ça dans phpMyAdmin, :
      SELECT cat_id, cat_nom, forum_forum.forum_id, forum_name, forum_desc, forum_post, forum_topic, auth_view, forum_topic.topic_id, forum_topic.topic_post, post_id, post_time, post_createur, membre_pseudo, membre_id   
      
      FROM forum_categorie   
      LEFT JOIN forum_forum ON forum_categorie.cat_id = forum_forum.forum_cat_id   
      LEFT JOIN forum_post ON forum_post.post_id = forum_forum.forum_last_post_id  
      LEFT JOIN forum_topic ON forum_topic.topic_id = forum_post.topic_id   
      LEFT JOIN forum_membres ON forum_membres.membre_id = forum_post.post_createur   
      WHERE auth_view <= :lvl   
      GROUP BY cat_id, cat_nom, forum_forum.forum_id, forum_name, forum_desc, forum_post, forum_topic, auth_view, forum_topic.topic_id, forum_topic.topic_post, post_id, post_time, post_createur, membre_pseudo, membre_id   
      ORDER BY cat_ordre, forum_ordre DESC


      En remplaçant biensure ":l v l" par une valeur qui existe dans ta BD !

      Si ça donne un résultat, c'est que t'a mal exécuter ta requête coté PHP !
      Si ça ne retourne aucun résultat, alors la condition "auth_view <= :lvl" est fausse, pour en être sure, enlève la condition, et re-exécute la requête !
      0
  11. Alain_42 Messages postés 5413 Statut Membre 904
     
    pour voir éventuellement les erreurs rajoutes les lignes de part et d'autre de la query:

    ////rajoutes cette ligne
    	$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	/////
    	$query=$db->prepare('SELECT cat_id, cat_nom,
    forum_forum.forum_id, forum_name, forum_desc, forum_post,
    forum_topic, auth_view, forum_topic.topic_id,
    forum_topic.topic_post, post_id, post_time, post_createur,
    membre_pseudo,
    membre_id
    FROM forum_categorie
    LEFT JOIN forum_forum ON forum_categorie.cat_id =
    forum_forum.forum_cat_id
    LEFT JOIN forum_post ON forum_post.post_id =
    forum_forum.forum_last_post_idLEFT JOIN forum_topic ON forum_topic.topic_id = forum_post.topic_id
    LEFT JOIN forum_membres ON forum_membres.membre_id =
    forum_post.post_createur
    WHERE auth_view <= :lvl
    ORDER BY cat_ordre, forum_ordre DESC' );
    $query->bindValue(':lvl',$lvl,PDO::PARAM_INT);
    //rajoutes ça pour voir les erreurs de ta requette
    if (!$query) {
    	   echo "<br />PDO::errorInfo():<br />";
    	   print_r($db->errorInfo());
    	}
    ///
    $query->execute(); 
    0
    1. JooS Messages postés 2705 Statut Membre 228
       
      Jointure => GROUP BY
      Variable => bindParam
      0
    2. Tchek
       
      Merci pour vos réponses.
      @JooS la requête s'exécute bien dans phpMyAdmin avec la condition et même sans la condition tous se passe bien.

      @Alain_42 voici les messages d'erreurs que je retrouve:
      Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.forum_categorie' doesn't exist'

       Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.forum_categorie' doesn't exist'
      0
  12. Alain_42 Messages postés 5413 Statut Membre 904
     
    et ben voilà:

    Table 'test.forum_categorie' doesn't exist'

    la table forum_categorie n'existe pas
    0
  13. JooS Messages postés 2705 Statut Membre 228
     
    Re ...

    Si ça s'est bien exécuté sous phpMyAdmin alors ça devrais aussi via PDO !

    $req = $db->prepare('SELECT cat_id, cat_nom, ff.forum_id, forum_name, forum_desc, forum_post, forum_topic, auth_view, ft.topic_id, ft.topic_post, post_id, post_time, post_createur, membre_pseudo, membre_id     
    
    FROM forum_categorie fc
    LEFT JOIN forum_forum ff ON fc.cat_id = ff.forum_cat_id
    LEFT JOIN forum_post fp ON fp.post_id = ff.forum_last_post_id
    LEFT JOIN forum_topic ft ON ft.topic_id = fp.topic_id
    LEFT JOIN forum_membres fm ON fm.membre_id = fp.post_createur 
    WHERE auth_view <= :lvl
    GROUP BY cat_id, cat_nom, ff.forum_id, forum_name, forum_desc, forum_post, forum_topic, auth_view, ft.topic_id, ft.topic_post, post_id, post_time, post_createur, membre_pseudo, membre_id
    ORDER BY cat_ordre, forum_ordre DESC');
    $req->bindParam(':lvl', $lvl, PDO::PARAM_INT);
    $req->execute();
    while($data = $req->fetch()) {
      var_dump($data);  
    }


    PS : La variable $lvl doit contenir une valeur qui peut donner un résultat, essaye avec la même valeur que t'avais utiliser sous phpMyAdmin !

    Quant a la connexion vers la BD, utilise ce code pour gérer les erreurs, au lieu d'utiliser errorInfo partout ou tu va !

    try {  
     $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;  
        
     $db = new PDO('mysql:host=localhost;dbname=base_de_donnees', 'root', '', $pdo_options);  
    }  
    catch (Exception $e) {  
     die('Erreur : ' . $e->getMessage());  
    }

    Mettez en résolu quand c'est résolu -.- ...
    0
  14. Tchek
     
    Les tableaux s'affichent maintenant le problème venait de la requête un
    left join
    était collé au mot qui le précédait et exécuté la requête dans phpmyadmin ma permis de découvrir cela. Merci
    ENCORE UN Grand merci à vous car grâce à vous j'ai découvert beaucoup de chose et d'astuces en php.
    0