Se connecter / S'enregistrer
Votre question

[RESOLU] - [HTML-PHP-MYSQL]Valeur maximale atteinte dans une boucle ?

Tags :
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
28 Décembre 2009 12:32:01

Bonjour à tous,

J'ai codé une page "normal " avec une boucle qui va chercher des éléments dans une base de données et qui restitue le résultat sous forme d'un tableau.
A chaque ligne, je rajoute un champ de type " <select> " avec 3 " <option> " (En cours, vu & validé).

Lorsque je veux afficher ma page, cela semble fonctionner correctement mais en réalité, toutes les informations n'y sont pas : lorsque je regarde le code source de la page, celui-ci " s'arrête nettement " au milieu d'une balise avec le code suivant - fin du code :
  1. <option value=2 >Validé</option>
  2. </select></td></tr><tr><td><b><u>241 </u></b></td><td><b></b></td><td><b><i></i></b></td><td>Afficher les informations d'une log DB2</td><td><select name=etat_241>
  3.  
  4. <option

ou autre exemple :
  1. <tr><td><b><u>243 </u></b></td><td><b></b></td><td><b><i>EOS</i></b

Alors que dans mon code (php), je termine correctement par un " </body></html> " & cie !

J'arrive à afficher actuellement 243 valeurs (des fois, cela m'en affiche moins si je rafraichis la page...)

Je me demande si je n'aurais pas atteinds une limite soit au niveau html (tableau trop grand ? Trop de <select> ?), soit au niveau php (temps d'exécution du script trop grand ? Erreur dans la boucle While ?) soit au niveau MySQL (résultat de la requête trop important ? ...)...

J'ai essayé de modifier certaines valeurs dans la conf de Apache mais cela ne change pas grand chose à la donne...

D'avance merci de vos lumières !

Autres pages sur : resolu html php mysql valeur maximale atteinte boucle

a c 145 L Programmation
28 Décembre 2009 12:43:10

Je te conseille tout d'abord de mettre au début de ton script php:
  1. <?php
  2. error_reporting(E_ALL);
  3. ?>

Cela te permettra de voir s'il y a des erreurs ou des avertissements.

Ensuite, avoir ton code php serait d'une aide non négligeable pour du debug :) 
m
0
l
28 Décembre 2009 16:56:51

si tu nous montrais le code ...
m
0
l
29 Décembre 2009 08:04:07

Voilà qui est fait :')

  1. <?php
  2. mysql_connect($server,$user,$passwd);
  3. mysql_select_db($db);
  4. ?>
  5. <?php
  6. error_reporting(E_ALL);
  7. ?>
  8. <?php
  9. //Test si modification de la base avant affichage
  10. if ( isset($_POST['update']) ) {
  11. //A COMPLETER
  12. }
  13. ?>
  14. <html>
  15. <head>
  16. </head>
  17. <body>
  18. <?php
  19. //Récupération des données du profil
  20. $id_user="0";
  21. $req="select id,nom,etat_formation from nom_pilote where id='$id_user'";
  22. unset($id_user);
  23. $exec=mysql_query($req);
  24. $resultat=mysql_fetch_row($exec);
  25. //Récupération des données du pilote
  26. $id_pilote=$resultat[0];
  27. $nom_pilote=$resultat[1];
  28. echo "<center><h1>". $nom_pilote."</h1></center>";
  29. //On récupère la formation sous la forme d'un tableau (il peut ne pas être "complet")
  30. $etat_formation=explode(";",$resultat[2]);
  31. //Désallocation des variables
  32. unset($req);
  33. unset($exec);
  34. unset($resultat);
  35.  
  36. //Initialisaton des variables (pour affichage, ou non, des délais, métiers & sous-métiers
  37. $last_delais="";
  38. $last_metiers="";
  39. $last_sous_metiers="";
  40.  
  41. //Récupération de la checklist sous la forme d'un tableau
  42. //Déclaration du tableau
  43. echo "<table border=0px><tr><td><b>Délais</b></td><td><b>Métiers</b></td><td><b>Sous-Métiers</b></td><td><b>Actions/Tâches</b></td><td><b>Etat</b></td></tr>";
  44. $req="select id,delais,metiers,sous_metiers,actions_taches from checklist";
  45. $exec=mysql_query($req) or die(mysql_error());
  46. $i=0;
  47. //Boucle pour affichage des résultats
  48. while ($resultat = mysql_fetch_array($exec) ) {
  49. $i++;
  50. //Déclaration de la "sélection" par défaut - désallocation / allocation
  51. unset($default0);
  52. unset($default1);
  53. unset($default2);
  54. if ( !isset($etat_formation[$resultat['id']]) ) {
  55. $default0 = " selected";
  56. } else {
  57. if ( $etat_formation[$resultat['id']] == "0" ) {
  58. $default0 = " selected";
  59. }
  60. if ( $etat_formation[$resultat['id']] == "1" ) {
  61. $default1 = " selected";
  62. }
  63. if ( $etat_formation[$resultat['id']] == "2" ) {
  64. $default2 = " selected";
  65. }
  66. }
  67. //Initialisation des variables par défaut qui sont non déclarées
  68. if ( !isset($default0) ) {
  69. $default0="";
  70. }
  71. if ( !isset($default1) ) {
  72. $default1="";
  73. }
  74. if ( !isset($default2) ) {
  75. $default2="";
  76. }
  77.  
  78. //Test si la valeur délais est différente (pour affichage)
  79. if ( $resultat['delais'] != $last_delais) {
  80. $delais = $resultat['delais'];
  81. $last_delais = $delais;
  82. } else {
  83. $delais = "";
  84. }
  85.  
  86. //Test si la valeur métiers est différente (pour affichage)
  87. if ( $resultat['metiers'] != $last_metiers) {
  88. $metiers = $resultat['metiers'];
  89. $last_metiers = $metiers;
  90. } else {
  91. $metiers = "";
  92. }
  93.  
  94. //Test si la valeur sous_métiers est différente (pour affichage)
  95. if ( $resultat['sous_metiers'] != $last_sous_metiers) {
  96. $sous_metiers = $resultat['sous_metiers'];
  97. $last_sous_metiers = $sous_metiers;
  98. } else {
  99. $sous_metiers = "";
  100. }
  101.  
  102.  
  103. echo "<tr><td><b><u>".$i." ".$delais."</u></b></td><td><b>".$metiers."</b></td><td><b><i>".$sous_metiers."</i></b></td><td>".$resultat['actions_taches']."</td><td>";
  104. $etat_id="etat_".$resultat['id'];
  105.  
  106. echo "<select name=$etat_id>
  107. <option value=0".$default0.">En cours</option>
  108. <option value=1".$default1.">Vu</option>
  109. <option value=2".$default2.">Validé</option>
  110. </select>";
  111. echo "</td></tr>";
  112. }
  113. //echo "<tr><td></td><td></td><td></td><td><input type=submit value=modifier></td><td></td></tr>";
  114. echo "</table>";
  115.  
  116. //Désallocation des variables
  117. unset($req);
  118. unset($exec);
  119. unset($resultat);
  120. ?>
  121. </body>
  122. </html>
  123. <?php
  124. mysql_close();
  125. ?>


La table contient actuellement 266 enregistrements et le but étant de les afficher tous !

Je cherche à obtenir le résultat suivant :
----------------------------------------------------------------------------------
| Délais | Métiers | Sous-métiers | Actions/Tâches | Etat |
----------------------------------------------------------------------------------

Avec l'état qui dépend du " pilote " (en cours / vu / validé) et de la valeur "etat_formation " qui se présente sous la forme : 0;1;0;0;0;1;0;1;1;1;1;0;0;0... (et donc théoriquement 266 fois des " 0 " ou des " 1 "). D'ailleurs le tableau généré lors de l'explode n'est-il pas trop grand ? Y a t'il une limite au nombre d'entrée d'une variable tableau ?
m
0
l
a c 145 L Programmation
29 Décembre 2009 09:19:30

Je ne pense pas que le problème vienne de la taille du tableau (266 éléments binaires, c'est vraiment petit).
Aucune erreur php ne s'affiche ?

A priori, quand le script s'interrompt en plein milieu de l'exécution, c'est qu'il y a une erreur dans les données que tu traites.
m
0
l
29 Décembre 2009 10:00:40

Non pas de message d'erreur PHP... Le truc c'est que je charge les données MySQL à partir d'un fichier Excel et il est possible que lors de l'import, il insère certains caractères " spéciaux "... A noter que sur d'autres postes de travail, la page semble " boucler " voir renvoit sur un " Connexion avec le serveur réinitialisée " & sur Opera Portable, je n'arrive à afficher que 4 résultats...
m
0
l
29 Décembre 2009 10:19:39

Bon alors je tente de repartir de 0 et dans ma boucle j'ai mis une variable que j'incrèmente et que je "tente" d'afficher ! Et je tombe sur un :

Network Error (tcp_error)

A communication error occurred: ""
The Web Server may be down, too busy, or experiencing other problems preventing it from responding to requests. You may wish to try again at a later time.
m
0
l
a c 145 L Programmation
29 Décembre 2009 10:23:33

Ton code est complet ? Parce que là ça ressemble bel et bien à une boucle sans fin qui aurait planté ton serveur.
m
0
l
29 Décembre 2009 10:38:58

Voici le code qui me renvoit sur le fameux Network Error :
  1. <?php
  2. mysql_connect($server,$user,$passwd);
  3. mysql_select_db($db);
  4. ?>
  5. <?php
  6. error_reporting(E_ALL);
  7. ?>
  8. <html>
  9. <head>
  10. </head>
  11. <body>
  12. <?php
  13. $req="select id,delais,metiers,sous_metiers,actions_taches from checklist limit 500";
  14. $exec=mysql_query($req) or die(mysql_error("Erreur lors de l'exécution de la requête MySQL"));
  15. $i=0;
  16. //Boucle pour affichage des résultats
  17. while ( $resultat = mysql_fetch_array($exec) ) {
  18. $i++;
  19. echo $i;
  20. }
  21. echo $i;
  22. //Désallocation des variables
  23. ?>
  24. <?php
  25. mysql_close();
  26. ?>
  27. </body>
  28. </html>


Pour info, le serveur qui est utilisé répond convenablement ! J'ai d'autres requêtes qui s'exécutent sur d'autres bases et je n'ai aucun souci !
m
0
l
a c 145 L Programmation
29 Décembre 2009 10:44:03

Alors là, il y a un souci parce que ce code ne peut logiquement pas faire d'erreur
m
0
l
29 Décembre 2009 11:03:10

C'est bien là le souci :-)

J'ai essayé de supprimer la base, la recréer à vide... et toujours le même message d'erreur " Network Error "...

J'ai une bonne 50aine de tables différentes dans une 10aine de bases et je n'ai aucun message similaire (mes autres pages continuent à fonctionner correctement) ! Au niveau des ressources sur le serveur, je n'ai rien remarqué de particulier...
m
0
l
29 Décembre 2009 11:23:28

Bon ben j'ai trouvé la solution :

Mettre en commentaire la fonction : mysql_close();

En plus j'ai vu ça :
Citation :
Using mysql_close() isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.
m
0
l
a c 145 L Programmation
29 Décembre 2009 12:32:32

Ah ben ? Bizarre ton serveur. Mais bon, tant mieux si ça fonctionne, ça prouve donc que ton code était juste.
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