Problème avec la boucle for
Résolu
Chabanus
Messages postés
978
Date d'inscription
Statut
Membre
Dernière intervention
-
toto -
toto -
Bonsoir,
Je voudrais incrémenter le i mais il reste toujours à 1, s'il vous plait, pouvez-vous m'aider merci.
Cordialement
Je voudrais incrémenter le i mais il reste toujours à 1, s'il vous plait, pouvez-vous m'aider merci.
$sql2 = "SELECT titre,jour,mois,annee,type FROM news WHERE module='sye' ORDER BY id"; $result2 = mysql_query($sql2,$link); $nb_total2 = "SELECT COUNT(*) AS nb_total2 FROM news WHERE module='sye'"; $nb_total2 = mysql_query($nb_total2,$link); for ($i = 1 ; $i <= mysql_fetch_array($nb_total2) ; $i++) { while($row = mysql_fetch_array($result2)) { if(($row['type']=='cours') || ($row['type']=='TD') || ($row['type']=='TP')) { echo "<div class='special'><a href='systeme.php?page=".$i."'><strong>".$row[titre]."</stron></a><strong> ( ".$row['type']." du ".$row['jour']. "-" .$row['mois']. "-" .$row['annee']." )</strong></div>"; } else { echo "<div class='special'><strong>".$row[titre]." ( ".$row['type']." )</strong></div>"; } } }
Cordialement
A voir également:
- Problème avec la boucle for
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Idm for mac - Télécharger - Téléchargement & Transfert
- Instagram for pc - Télécharger - Divers Communication
- Microsoft store download for pc - Guide
- Opera mini for pc - Télécharger - Navigateurs
7 réponses
Bonjour
C'est un petit peu beaucoup n'importe quoi, ton script ;-)
Si j'y comprends quelque chose, ton $nb_total2 te sert à savoir combien il y avait de réponses à la requête $sql2. Tu sais que tu l'as directement avec mysql_num_rows($result2) ?
D'autre part, tu imbriques deux boucles, ça n'a aucun sens ici : si tu as trouvé , disons 10 réponses, tu vas faire ton for(s'il était écrit correctement, ce qui n'est pas le cas) 10 fois, et à chaque fois tu ferais le while qui lui-même balayerait toute la table des résultats. Ça te ferait 100 boucles au total (sauf que la ressource result2 serait épuisée mais bon...)
Tu n'as besoin que du while
Enfn, tu testes dans ta boucle si le champ type obtenu est 'cours' ou 'TD' ou 'TP' : pourquoi ne pas avoir mis ce test directement dans ta requête ?
C'est un petit peu beaucoup n'importe quoi, ton script ;-)
Si j'y comprends quelque chose, ton $nb_total2 te sert à savoir combien il y avait de réponses à la requête $sql2. Tu sais que tu l'as directement avec mysql_num_rows($result2) ?
D'autre part, tu imbriques deux boucles, ça n'a aucun sens ici : si tu as trouvé , disons 10 réponses, tu vas faire ton for(s'il était écrit correctement, ce qui n'est pas le cas) 10 fois, et à chaque fois tu ferais le while qui lui-même balayerait toute la table des résultats. Ça te ferait 100 boucles au total (sauf que la ressource result2 serait épuisée mais bon...)
Tu n'as besoin que du while
Enfn, tu testes dans ta boucle si le champ type obtenu est 'cours' ou 'TD' ou 'TP' : pourquoi ne pas avoir mis ce test directement dans ta requête ?
heu je me rappel pu trop mes cour de prog. mais t'a pas oublier de fermer ton for"" avant le "else" . Pardon a tout les programmateur si je me suis planter, mois et la prog ça fait 2 xD. Et pour résoudre un PB fait quelque "print" pour voir ce qui ne s'effectue pas ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sql2 pour sélectionner les titres des news et nb_tatal2 pour compter le nombre de news c'est différent.
Je sais bien que la liste des titres des news et le nombre de news ce n'est pas la même chose. Ce que je dis, c'est que si tu as déjà le résultat d'une requête dans $sql2, tu n'as pas besoin d'une autre requête pour compter le nombre de lignes de ce résultat. Tu as le fonction mysql_num_rows.
Tu pourrais remplacer
par
De plus, tu utilises mal le $nb_total2 que tu utilises :
tu fais $i <= mysql_fetch_array($nb_total2) alors que mysql_fetch_array($nb_total2) te rend un tableau, pas un nombre. Tu ne peux pas comparer une variable ($i) à un tableau !
De plus, ta boucle for est non seulement inutile, mais nuisible au bon fonctionnement de ton script. Tu veux afficher tes résultats, le while($row = mysql_fetch_array($result2))est suffisant. En mettant ce while à l'intérieur du for, tu vas essayer de recommencer de traiter la totalité de la liste des réponses plusieurs fois, ce qui est absurde et ne va pas marcher. Si tu as besoin d'un compteur les lignes, tu initialises $i=1; avant la boucle, et tu incrémentes $i++; à chaque boucle.
Mais je ne crois pas que tu aies besoin de ce compteur. Ne crois tu pas que dans ton lien<a href='systeme.php?page=".$i, $i devrait être l'id de la ligne trouvée, plutôt qu'un numéro d'ordre qui ne veut rien dire ?
Remarque : tu pourrais garder le for mais supprimer le while et faire simplement $row = mysql_fetch_array($result2). Ce qu'il ne FAUT PAS (dans ton cas), c'est avoir les deux. On préfère traditionnellement la solution avec le while.
Je sais bien que la liste des titres des news et le nombre de news ce n'est pas la même chose. Ce que je dis, c'est que si tu as déjà le résultat d'une requête dans $sql2, tu n'as pas besoin d'une autre requête pour compter le nombre de lignes de ce résultat. Tu as le fonction mysql_num_rows.
Tu pourrais remplacer
$nb_total2 = "SELECT COUNT(*) AS nb_total2 FROM news WHERE module='sye'"; $nb_total2 = mysql_query($nb_total2,$link);
par
$nb_total2 = mysql_num_rows($sql2,$link);
De plus, tu utilises mal le $nb_total2 que tu utilises :
tu fais $i <= mysql_fetch_array($nb_total2) alors que mysql_fetch_array($nb_total2) te rend un tableau, pas un nombre. Tu ne peux pas comparer une variable ($i) à un tableau !
De plus, ta boucle for est non seulement inutile, mais nuisible au bon fonctionnement de ton script. Tu veux afficher tes résultats, le while($row = mysql_fetch_array($result2))est suffisant. En mettant ce while à l'intérieur du for, tu vas essayer de recommencer de traiter la totalité de la liste des réponses plusieurs fois, ce qui est absurde et ne va pas marcher. Si tu as besoin d'un compteur les lignes, tu initialises $i=1; avant la boucle, et tu incrémentes $i++; à chaque boucle.
Mais je ne crois pas que tu aies besoin de ce compteur. Ne crois tu pas que dans ton lien<a href='systeme.php?page=".$i, $i devrait être l'id de la ligne trouvée, plutôt qu'un numéro d'ordre qui ne veut rien dire ?
Remarque : tu pourrais garder le for mais supprimer le while et faire simplement $row = mysql_fetch_array($result2). Ce qu'il ne FAUT PAS (dans ton cas), c'est avoir les deux. On préfère traditionnellement la solution avec le while.
Merci pour ton aide, voici ce que j'ai fais :
$sql2 = "SELECT titre,jour,mois,annee,type FROM news WHERE module='sye' ORDER BY id DESC"; $result2 = mysql_query($sql2,$link); $i=0; while($row = mysql_fetch_array($result2) AND ($i=$i+1)) { if(($row['type']=='cours') || ($row['type']=='TD') || ($row['type']=='TP')) { echo"<table border='0' cellpadding='0' cellspacing='0'><tr>"; echo "<td><div class='special'>".$i."- <a href='systeme.php?page=".$i."'><strong>".$row[titre]."</strong></a></div></td><td><div class='special'>( ".$row['type']." du ".$row['jour']. "-" .$row['mois']. "-" .$row['annee']." )</div></td>"; echo"</tr></table>"; } } ?>
Sql2 pour sélectionner les titres des news et nb_tatal2 pour compter le nombre de news c'est différent.
La boucle for je l'ai besoin pour incrémenter le i qui est le numéro de la page qui contient l'article et la boucle while pour afficher les titres de ses articles.
Je voudrais faire cela:
<a href="systeme.php?page=1>titre1</a>
<a href="systeme.php?page=2>titre2</a>
<a href="systeme.php?page=3>titre3</a>
<a href="systeme.php?page=4>titre4</a>
.
.
.
.
Merci
Voici le code en entier