Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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 !
Lassé par la pub ? Créez un compte

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 ?

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.

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...

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.

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 !

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...

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