Perte d'une ligne de résultat - requête SQL

Petit nouveau ! | 8 Messages

15 févr. 2015, 21:11

Bonsoir à tous,

J'ai un souci pour récupérer les résultats d'une requête SQL.
Ma requête en elle-même fonctionne sans problème (je l'ai affichée et testée), mais c'est pour l'affichage des résultats que ça se complique.

Voilà comment je procède :
if(mysqli_num_rows($res)>0){
	echo '<table border="1" align="center"><tr>'; 	
	foreach(mysqli_fetch_array($res) as $k => $v) { 
		if(isset($nomtable[$k])){
			echo '<th>';							
			echo $nomtable[$k];						
			echo '</th>';							
		}
	}
	echo '</tr>';									
	while ($res_row=mysqli_fetch_row($res)) {	
		echo '<tr>';								
		for ($j = 0; $j < count($res_row); $j++) {		
			echo '<td>';							
			echo ($res_row[$j] == NULL) ? '<i>NULL</i>' : $res_row[$j]; 	
			echo '</td>';						
		}
		echo '</tr>';								
	}
	echo "</table>";								
}
Je récupère grâce au foreach les en-têtes de mon tableau, et cela fonctionne parfaitement, mais pour l'affichage des résultats, il me manque toujours la première ligne de résultats.
Si cela peut vous être utile, la table interrogée comporte de nombreuses colonnes, et c'est pour cela que je pense avoir besoin du mysqli_fetch_row pour afficher tous les champs de l'enregistrement.
J'ai récupéré ce code et je l'ai adapté, et honnêtement je ne vois absolument pas comment faire autrement, donc si quelqu'un peut éclairer ma lanterne, ça m'aiderait beaucoup !

Merci ! :)

Mammouth du PHP | 737 Messages

16 févr. 2015, 10:38

Bonjour,

Bah en fait c'est plus de la requête dont on va avoir besoin.

Mega
;)
Dyslexics are teople poo

Petit nouveau ! | 8 Messages

16 févr. 2015, 11:23

Bonjour ! :)

Alors ma requête varie selon les champs à afficher que cochera l'utilisateur (jusqu'à une quarantaine sur 3 tables au maximum), mais son "ossature" est toute simple et ressemble à ça (sans les `, les " ou les ' ) :
SELECT table1.champ1, table1.champ2, table2.champ1
FROM table1, table2
WHERE condition1, condition2
ORDER BY champ_de_tri
Et ce sont les champ1, champ2, etc... qui me servent d'en-têtes pour l'affichage des données dans un tableau. :)

Mammouth du PHP | 737 Messages

16 févr. 2015, 11:44

Je veux bien le détail de conditions car si tes lignes ne ressortent pas c'est qu'elles ne rentrent pas dans ta requête c'est aussi simple que ça.

As-tu essayé de lancer ta requête via un utilitaire sql toad, phpmyadmin ou autre pour voir si tu as le même résultat ?

Pas de filtre après le ORDER BY ?

Mega
;)
Dyslexics are teople poo

Petit nouveau ! | 8 Messages

16 févr. 2015, 12:10

Mes conditions ressemblent à table1.champ1 = table2.champ2, et dépendent aussi de ce que veut afficher l'utilisateur.

Et pour la requête, je l'ai lancée directement dans phpMyAdmin et j'ai tous les résultats. :/
Au niveau des résultats que je récupère, lors de l'affichage j'ai tout ce qui a été demandé, sauf qu'il me manque toujours la première ligne de résultats...
Par exemple, pour une certaine requête lancée directement dans phpMyAdmin, je vais avoir des résultats pour les ID de 12 à 40. Pour la même requête, à l'affichage sur ma page, j'ai les mêmes résultats, mais pour les ID de 13 à 40...

Du coup je me disais que ça pouvait venir de cette ligne (vu que c'est à partir de là que les résultats s'affichent) ? :
 while ($res_row=mysqli_fetch_row($res)) 
Après le ORDER BY j'ai juste mon champ de tri et ASC (par défaut).

Mammouth du PHP | 737 Messages

16 févr. 2015, 12:27

Ok, par acquis de conscience peux tu faire un count, mysql_num_rows ou autre pour avoir le nombre de résultats dans ta page comme ça on verra si c'est propre à l'affichage ou à la requête.

Mega
;)
Dyslexics are teople poo

Petit nouveau ! | 8 Messages

16 févr. 2015, 13:05

Pour une requête toute simple, j'ai 11 résultats sur ma page et 12 sur phpMyAdmin.
J'en ai testé plusieurs et il y a toujours un résultat de moins sur ma page... :/

Mammouth du PHP | 737 Messages

16 févr. 2015, 13:27

Ok donc je pense qu'il s'agit d'un problème d'index.

Il faudrait afficher la valeur de chaque variable $j et $k si je dis pas de bêtises.

en faisant des print_r ou var_dump tout devrait être vérifiable.

D'après moi dans un cas l'index commence à 0 et l'autre à 1 alors qu'il y a bien une valeur en clef 0.

Si vous faites ?
$j <= count($res_row)

J'ai rajouté le "=" (inférieur ou égale à count pour avoir tous les index)

A tester mais c'est ce qui me vient comme ça.

Mega
;)
Dyslexics are teople poo