[php] Problème d'include et génération d'image (résolu)

Problème d'include et génération d'image (résolu) [php] - PHP - Programmation

Marsh Posté le 01-03-2010 à 11:32:34    

Bonjour à vous,
 
je vais vous exposer un petit probème en php.
Le décor: j'ai une page avec deux div, une à gauche qui contient un formulaire, et qui fera office de menu, et l'autre qui traitera les données de ce formulaire, ça a cette tronche là:
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
  3. <head>
  4.  <title>FlexStat</title>
  5.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
  6.  <link rel="stylesheet" media="screen" type="text/css" title="Flexstat" href="design.css" />
  7. </head>
  8. <body>
  9.  <div id="form">
  10.   <?php include("form.php" ); ?> <!-- Le formulaire est généré en php -->
  11.         </div>
  12.  <div id="graph">
  13.   <?php
  14.    $user = "false";
  15.    $mois = "false";
  16.    if (isset($_POST["user"])){
  17.     $user = $_POST["user"];}
  18.    if (isset($_POST["mois"])){
  19.     $mois = $_POST["mois"];}
  20.    if ($mois != "false" ) {
  21.     include("include/affichage_month.php" );
  22.     }
  23.   ?>
  24.  </div>
  25. </body>
  26. </html>


 
Et le formulaire:
 

Code :
  1. <div>
  2. <?php
  3. include_once("../controle/definitions.php" ); //avec les fonctions mysql
  4. ?>
  5. <!--form method="POST" action="include/affichage_month.php" enctype="multipart/form-data"-->
  6. <form method="POST" action="index.php" enctype="multipart/form-data">
  7.  <label>Statistiques par mois : </label>
  8.  <br />
  9.  <select name="mois">
  10.   <option value="1">Janvier</option>
  11.   <option value="2">Fevrier</option>
  12.   <option value="3">Mars</option>
  13.   <option value="4">Avril</option>
  14.   <option value="5">Mai</option>
  15.   <option value="6">Juin</option>
  16.   <option value="7">Juillet</option>
  17.   <option value="8">Aout</option>
  18.   <option value="9">Septembre</option>
  19.   <option value="10">Octobre</option>
  20.   <option value="11">Novembre</option>
  21.   <option value="12">Décembre</option>
  22.  </select>
  23.  <br />
  24.  <label>Utilisateur</label>
  25.  <select name="user">
  26.   <option value="tous">Tous</option>
  27.    <?php SQL_user_form();  //on genere la liste des utilisateurs  
  28.                                  ?>
  29.  </select>
  30.  <input type="submit" name="envoyer" value="générer">
  31. </form>
  32. </div>


 
Ca semble assez simple: si on envoie le formulaire, la page index est rechargée en affichant include/affichage_month.php dans la DIV graph.
Mais j'ai l'erreur suivante qui s'affiche (en pleine page):
L'image "http://localhost/monsite/index.php" ne peut être affichée car elle contient des erreurs.
Si j'enregistre cette image, j'ai un fichier index.php.png qui contient le code html de ma page index, avec la DIV "graph" complètement vide.
 
A noter que dans le fichier de formulaire, si dans action j'appelle action="include/affichage_month.php" (en décommentant la ligne commentée et en commentant celle en dessous), le résultat de mon formulaire est bien appelé, et j'ai mon image, en pleine page.
 
Voici la page affichage_month, au cas où ça servirait (c'est un grpah créé grâce à libchart):
 

Code :
  1. <div>
  2. <?php
  3. include_once("../controle/definitions.php" );
  4. $user = $_POST["user"];
  5. $mois = $_POST["mois"];
  6. $listdate=array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
  7. $listjeton=array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
  8. $listjetonacc=array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
  9. for ($i = 1; $i<32; $i++){
  10.  $jetonvar=SQL_graph_jeton_month($user, $mois, $i);
  11.  if (count($jetonvar)!=0){
  12.  $listjeton[$i-1]=$jetonvar[0];
  13.  }
  14. }
  15. for ($i = 1; $i<32; $i++){
  16.  $jetonvar=SQL_graph_jeton_month_acc($user, $mois, $i);
  17.  if (count($jetonvar)!=0){
  18.  $listjetonacc[$i-1]=$jetonvar[0];
  19.  }
  20. }
  21. include "../libchart/classes/libchart.php";
  22. header("Content-type: image/png" );
  23. $chart = new VerticalBarChart(1000, 500);
  24. $serie1 = new XYDataSet();
  25. $count = count($listdate);
  26. for ($i = 0; $i < $count; $i++) {
  27.  $serie1->addPoint(new Point($listdate[$i], $listjeton[$i]));
  28.  }
  29. $serie2 = new XYDataSet();
  30. $count = count($listdate);
  31. for ($i = 0; $i < $count; $i++) {
  32.  $serie2->addPoint(new Point($listdate[$i], $listjetonacc[$i]));
  33.  }
  34. $dataSet = new XYSeriesDataSet();
  35. $dataSet->addSerie("Graphique 1", $serie1);
  36. $dataSet->addSerie("Graphique 2", $serie2);
  37. $chart->setDataSet($dataSet);
  38. $chart->setTitle("$user" );
  39. $chart->getPlot()->setGraphCaptionRatio(0.62);
  40. $chart->render();
  41. ?>
  42. </div>


 
J'ai aussi essayé de mettre cela dans ma page index:

Code :
  1. <?php
  2. if ($mois != "false" ) {
  3.        echo "<img src=\"include/affichage_month.php\" alt=\"Graph\" \/>";
  4.        }
  5. ?>


 
Et j'ai... Le mot "Graph" d'affiché, mais pas mon image :s
 
Le code <img src="include/affichage_month.php" alt="Graph" /> est quant à lui bien affiché dans le code source de la page.  
 
 
Voila, je ne sais vraiment plus où regarder pour trouver ce qui cloche, si vous avez une idée, je suis dessus depuis un moment et je ne vois pas mon erreur.
 
Merci beaucoup pour vos réponses.

Message cité 1 fois
Message édité par Tangrim le 01-03-2010 à 16:16:50

---------------
Des Bisous et des nounours ! | Internet 2025 | Dungeon-Generator
Reply

Marsh Posté le 01-03-2010 à 11:32:34   

Reply

Marsh Posté le 01-03-2010 à 11:50:52    

Tangrim a écrit :


Code :
  1. <?php
  2. if ($mois != "false" ) {
  3.        echo "<img src=\"include/affichage_month.php\" alt=\"Graph\" \/>";
  4.        }
  5. ?>


 
Et j'ai... Le mot "Graph" d'affiché, mais pas mon image :s
 
Le code <img src="include/affichage_month.php" alt="Graph" /> est quant à lui bien affiché dans le code source de la page.  


 
C'est normal, ton script affichage_month.php attend des variables dans $_POST, que tu ne fournis pas dans ce cas. D'où une erreur php, et un fichier image invalide.
Et la première option ne peut pas marcher non plus, tu fais un header() dans affichage_month.php alors que tu as déjà commencé à envoyer ta page.
La solution est amha celle quoté ci-dessus, mais en repassant les paramètres dans l'url ou la session.
 
...et attention à la sécurité là-dedans, je n'ai pas l'impression que tu vérifies grand chose de l'input utilisateur...
 


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 01-03-2010 à 12:01:21    

skeye a écrit :


 
C'est normal, ton script affichage_month.php attend des variables dans $_POST, que tu ne fournis pas dans ce cas. D'où une erreur php, et un fichier image invalide.
Et la première option ne peut pas marcher non plus, tu fais un header() dans affichage_month.php alors que tu as déjà commencé à envoyer ta page.
La solution est amha celle quoté ci-dessus, mais en repassant les paramètres dans l'url ou la session.
 
...et attention à la sécurité là-dedans, je n'ai pas l'impression que tu vérifies grand chose de l'input utilisateur...
 


Oh merci, je suis en train de chercher comment passer les paramètres dans l'url avec un formulaire, je ne sais le faire qu'avec un lien.
 
Pour la sécurité, la liste utilisateur est générée en prenant les utilisateurs dans la base de donnée.


---------------
Des Bisous et des nounours ! | Internet 2025 | Dungeon-Generator
Reply

Marsh Posté le 01-03-2010 à 13:18:55    

Je viens d'essayer avec les variables de session (en commentant mon graphe et en faisant des echo pour bien vérifier qu'elles passent), et j'ai toujours la même erreur :(

 

Et en enlevant le header, j'ai un truc qui commence comme ça:
�PNG  ��� IHDR���������!J�z�� �IDATx���{xT���'!��L5A�)�b1hJ1" �� ���"�)���nL1�") �"@��h-�E�l�[TN� 9B��ٝ7�$�5ǵ�{}?W�^a2�<��f=?��I�<�����l�v����@�������w���@��;��� @B�o�?!�w�+��� k_Z���]�Ν>d�⒒S�l�����;'1�N��ש�9������ �[e�EK?��� ����`��'5L�3q�Z\:��a�{^�{�;���`E-?q���_��_^�c�?C\|����� z�Ϯ�=g�����PV����_6..�cǎǎ5j��?�����R* ���8_�?qOi�퇓�z��OHz���U0����7O�������9o޼W_}���  4h�֭�<����zꩤ��nݺխ[w۶mݺu�����dɒ��Ŀ��o�^{�i�*?ުU���{�~�СC埸 oڴ)111??��ݳf�JOOOLLܲe˿��׾l���@l��'N��o��1������a<����>7t��^��R�� �Ν�x<]tQyy�;Ss����G�i޼�#�<�� ���+�'������]�p!..����xzzzYY���ILL��ϟ?�…������ݻw&&&�3檫 �2����ÄW*

 


C'est l'image en mode texte ? Je dois me rapprocher :)

 


Ca c'est avec le include, et en mettant la balise image comme celle que tu as quottée, j'ai les mêmes symptôme, juste Graph écris, et dans le code source:
<img alt="Graph" src="include/affichage_month.php" >


Message édité par Tangrim le 01-03-2010 à 13:59:12

---------------
Des Bisous et des nounours ! | Internet 2025 | Dungeon-Generator
Reply

Marsh Posté le 01-03-2010 à 16:16:35    

En enregistrant l'image ça fonctionne, même si ça ne me parait pas très "propre".
 
Merci pour ta réponse skeye.


---------------
Des Bisous et des nounours ! | Internet 2025 | Dungeon-Generator
Reply

Marsh Posté le 01-03-2010 à 16:39:04    

Pour info (je sais que je suis dans la partie php et que personne ne fait attention au html, mais bon) employer une balise label sans attribut for est dénué de sens, sauf si le input (select dans ce cas) se trouve dans la balise label.
Et encore, cela merde avec IE, donc toujours indiquer un for="id input"

Reply

Marsh Posté le 01-03-2010 à 20:25:14    

David Boring a écrit :

Pour info (je sais que je suis dans la partie php et que personne ne fait attention au html, mais bon) employer une balise label sans attribut for est dénué de sens, sauf si le input (select dans ce cas) se trouve dans la balise label.
Et encore, cela merde avec IE, donc toujours indiquer un for="id input"


Merci, je vais modifier ça.


---------------
Des Bisous et des nounours ! | Internet 2025 | Dungeon-Generator
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed