Votre question

[PHP] Condition dans boucle: possible ?

Tags :
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
25 Juillet 2009 21:51:16

Bonjour à tous,

J'ai un soucis avec un code PHP et je n'arrive pas à trouver d'où vient l'erreur, mis à part ce que j'ai évoqué dans le titre. Je ne sais donc pas si on peut faire une condition (avec if) dans une boucle (while).

Voici mon code:
  1. <?php
  2. while ($donnees2 = mysql_fetch_array($retour2))
  3. {
  4. ?>
  5. ...
  6. <?php
  7. // Outils
  8. if (isset($_SESSION['pseudo']))
  9. {
  10. $pseudo_outils = $_SESSION['pseudo'];
  11.  
  12. $retour_outils = ("SELECT * FROM news_commentaires");
  13. $donnees_outils = mysql_fetch_array($retour_outils);
  14.  
  15. if ($_SESSION['pseudo'] == $donnees['pseudo'] OR $_SESSION['pseudo'] == Flobesst)
  16. {
  17. ?>
  18. ...
  19. <?php
  20. }
  21. }
  22. ?>
  23. <p><?php echo $donnees2['commentaire']; ?></p>
  24. </div>
  25. <?php
  26. }

Et voici l'erreur que me retourne PHP:
Citation :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Inetpub\vhosts\bazar-info.net\httpdocs\News\fiche.php on line 104


Merci d'avance pour votre aide ;) 

Autres pages sur : php condition boucle possible

25 Juillet 2009 22:42:10

1) une requete select dans une boucle while, tu veux couler le serveur qui t'héberge ? (vu qu'il y'a qu'un seul accès, à priori toi, c'est pas bien grave, mais ne met surtout pas ce genre de chose en production ...)

2) quel est la ligne 104 ?

3)
# $retour_outils = ("SELECT * FROM news_commentaires" );
# $donnees_outils = mysql_fetch_array($retour_outils);

il te manque quelque chose d'essentiel , le mysql_query, idem je présume(vu qu'il n'y a pas les ligne précéente) pour ta premiere boucle $retour2.

4) je te recommande très vivement de te stopé ici, et de revoir/refaire quelque lecture/tuto via phpdebutant.org / siteduzero.com / developpez.com / lephpfacile.com etc ;) 
m
0
l
25 Juillet 2009 23:20:23

Merci de cette réponse :) 
okinou a dit :
1) une requete select dans une boucle while, tu veux couler le serveur qui t'héberge ? (vu qu'il y'a qu'un seul accès, à priori toi, c'est pas bien grave, mais ne met surtout pas ce genre de chose en production ...)

Ah, tu peux m'expliquer pourquoi stp ?

okinou a dit :
2) quel est la ligne 104 ?

C'est celle-là:
  1. $donnees_outils = mysql_fetch_array($retour_outils);

okinou a dit :
3)
# $retour_outils = ("SELECT * FROM news_commentaires" );
# $donnees_outils = mysql_fetch_array($retour_outils);

il te manque quelque chose d'essentiel , le mysql_query, idem je présume(vu qu'il n'y a pas les ligne précéente) pour ta premiere boucle $retour2.

Hanlàlà, j'ai déjà codé une vingtaine de pages en PHP et je n'ai même pas vu cette erreur grossière :sweat: 
m
0
l
Contenus similaires
26 Juillet 2009 00:13:59

bah ,admettons que ta premiere requete while :

while ($donnees2 = mysql_fetch_array($retour2)) affiche 25 enregistrement, vu que tu as : $retour_outils = ("SELECT * FROM news_commentaires" ); dans la boucle, ca fait 25 requete d'un coup ... surtout que sans aucune condition (clause where), tu appel toute les donnée de la table news_commentaire à chaque fois !

en lisant ton code je ne vois pas ce que tu essai de faire de cette manière.
m
0
l
26 Juillet 2009 13:26:06

Ah oui, je comprends...

J'ai bien relu mon script et j'ai réussi à l'améliorer, en évitant la requête SELECT dans la boucle.

En fait, ce que je veux faire avec ce code, c'est afficher des boutons "Editer" et "Supprimer" sur les commentaires où l'internaute est l'auteur de ce commentaire.

Donc voici mon nouveau code, j'espère qu'il ne comporte pas d'incohérences comme le précédent:
  1. <?php
  2. $retour2 = mysql_query("SELECT * FROM news_commentaires WHERE id_news='$id'");
  3.  
  4. while ($donnees2 = mysql_fetch_array($retour2))
  5. {
  6. ?>
  7. <div class="commentaire"> <span class="profil">
  8. <p style="font-weight: bold;"><?php echo $donnees2['pseudo']; ?></p>
  9. </span>
  10. <?php
  11. // Outils
  12. if (isset($_SESSION['pseudo']))
  13. {
  14. if ($_SESSION['pseudo'] == $donnees2['pseudo'] OR $_SESSION['pseudo'] == Flobesst)
  15. {
  16. ?>
  17. <!-- ***** OUTILS ***** -->
  18. <span class="outils">
  19. <p><a href="commentaires.php?mode=edition&id=<?php echo $donnees2['id']; ?>"><img src="../styles/Flow_Summer/images/editer.png" alt="Editer" /></a> <a href="commentaires.php?mode=suppression&id=<?php echo $donnees2['id']; ?>&id_logiciel=<?php echo $_GET['id']; ?>"><img src="../styles/Flow_Summer/images/supprimer.png" alt="Supprimer" /></a></p>
  20. </span>
  21. <?php
  22. }
  23. }
  24. ?>
  25. <p><?php echo nl2br($donnees2['commentaire']); ?></p>
  26. </div>
  27. <?php
  28. }
  29. ?>
m
0
l
26 Juillet 2009 13:41:30

ouai c'est déja mieu ;) 
je te conseil quand meme :

- de selectionner les champs qu'il te faut plutot que de selectionner tout via "*" dans tes requete.
- faire un contrôle en amont des variable $id et $_get['id'] par rapport à leur contenance, par exemple, si tu sais qu'id ne contiendra que des chiffre (numérique) tu fais un test via is_int($id) afin d'etre sur qu'une personne mal attentioné n'essaira pas d'injecter une chaine de caractère ou code javascript etc ...

sur vulgarisation-informatique.com rubrique sql tu as plein de choses interessante =)
m
0
l
26 Juillet 2009 17:56:18

D'accord, c'est noté, merci de ton aide ;) 
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS