Non affichage des tableaux PHP/SQL

Fermé
Tchek - 24 août 2012 à 22:48
 Tchek - 6 sept. 2012 à 00:48
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

JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
24 août 2012 à 23:50
Salut, tu peux montrer la requête !
0
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
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 25/08/2012 à 01:25
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 août 2012 à 09:11
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
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
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 25/08/2012 à 18:31
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mister Forum
28 août 2012 à 15:03
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 août 2012 à 18:38
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
Mister Forum
29 août 2012 à 00:23
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
29 août 2012 à 20:21
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
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
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
4 sept. 2012 à 16:21
Alors ta BD est vide !
0
j'ai rempli ma BD mais pas toutes les tables je l'avoue. Je vais la remplir et je vous tient au courant.
0
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
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 5/09/2012 à 12:28
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
5 sept. 2012 à 15:01
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
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
5 sept. 2012 à 15:46
Jointure => GROUP BY
Variable => bindParam
0
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
5 sept. 2012 à 21:40
et ben voilà:

Table 'test.forum_categorie' doesn't exist'

la table forum_categorie n'existe pas
0
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 5/09/2012 à 22:46
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
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