Se connecter avec
S'enregistrer | Connectez-vous

[PHP] Condition dans boucle: possible ?

Dernière réponse : dans Programmation

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

Lassé par la pub ? Créez un compte
Expert Programmation

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 ;) 

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: 
Expert Programmation

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.

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. ?>
Expert Programmation

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 =)
Lassé par la pub ? Créez un compte
Tom's guide dans le monde