Erreur PhpMyAdmin - Apprendre-PHP.com

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

Erreur PhpMyAdmin

Par paintbox -  38 reponses -  Le 08/05/2011 -  Flux RSS - 

Hello Cyrano,

 le projet sur lequel je travaille esr hébergé chez OVH. Je suis toujours avec mes tracé de graphiques.

Je rencontre le problème suivant. PhpMyAdmin me renvoie le message d'erreur suivant: 

 

  • Fatal error: require() [function.require]: Failed opening required './' (include_path='.:/usr/local/lib/php') in /home/phpMyAdmin-3.3.8.1-all-languages/sql.php on line 318
  • C'est étrange parce que 

    •  ce même script fonctionne parfaitement en local
    • ce sript est quasi identique à un autre qui fonctionne (juste une différence de date) 

    J'ai été voir le fichier sql.php en ligne 318. Mais je ne comprend pas trop et n'ose pas y toucher.

    La ligne en question est la suivante : 

    require './' . PMA_securePath($goto);

     

      Aurais-tu une idée , une piste ?

    Merci  

     

    Réponses apportées à cette discussion

    Par Cyrano -  Le 08/05/2011 - 

    Salut Paintbox,

    effectivement c'est bizarre, mais il est possible que le path système ne pointe pas vers le bon répertoire. Si tu peux accéder au fichiers, j'en déduis que tu as instalé ton propre phpMyAdmin : il n'est pas inclus dans ton interface client ?

    Enfin bon à priori l'erreur tendrait à indiquer que la variable $goto n'est pas initialisée. As-tu bien configuré l'accès à ta base en créant unfichier config.inc.php ?

    Et sinon effectivement il vaut mieux éviter de modifier le code original de phpMyAdmin, tu risques de le rendre définitivement inopérant.

     

     
    Par Cyrano -  Le 08/05/2011 - 

    Tien, ça pourrait être utile, je viens de toruver ça : http://guide.ovh.com/InstallPhpMyAdmin

     

     
    Par Cyrano -  Le 08/05/2011 - 

    Accessoirement il y a aussi ça, encore mieux parce que tu n'abesoin de rien installer du tout : https://phpmyadmin.ovh.net/

     

     
    Par paintbox -  Le 09/05/2011 - 

    Hello Cyrano,

     merci pour ton aide.

    Oui effectivement chez OVH j'ai du installer mon propre phpMyAdmin (celui qu'ils conseillent), j'ai suivi les recommandation du lien que tu m'a donné.

    En fait, ton mon site tourne correctement, j'accède à ma base correctement.

    Comme je te l'ai dit,  je suis sur la partie statistiques. J'ai repris le script (statistiques annuelles) pour lequel je t'avais demandé ton aide lors du précédent post. Je l'ai donc adapté pour des statistiques mensuelles. En fait il m'affiche mes données correctement pour les toutes les catégories confondues. J'affiche également sur ce graph là la quantité total par catégorie. Puis j'ai un second graph où l'on peut choisir pour un mois précis la catégorie que l'on souhaite analyser. Et c'est là que j'ai mon soucis.

    Il ne m'indique qu'une seule référence (la dernière) et le total affiché ne correspond pas à celui affiché pour toutes les catégories confondues. 

    C'est en fait suite à ce problème que j'ai essayé d'affiche le résultat de mes requêtes directement dans PhpMyAdmin et c'est à ce moment là que j'ai eu ce message d'erreur.

    Je crois que le plus simple est de te montrer mon code :

    Voici le code pour toutes les catégories confondues pour un mois précis

    1. <?php
    2. // On démarre la session
    3.  
    4. // Connexion
    5. include('../connex.inc.php');
    6. $idcom=connex('lampeslejsea11', 'myparam');
    7. mysql_query("SET NAMES utf8"); /*TRES IMPORTANT -> permet d'éviter les problèmes d'affichage d'accents*/
    8.  
    9. /**
    10. Page qui affiche l evolution des categories selon le mois choisit
    11. */
    12.  
    13. /* => Appel de functions <= */
    14. include('_functions/_fr/function.inc.php');
    15. include('_functions/_fr/function.panier.inc.php');
    16. include('_functions/_fr/function.office.inc.php');
    17.  
    18. // On recupere la date choisie
    19. if (isset($_SESSION['SelectedMonth']) AND (isset($_SESSION['SelectedYear'])))
    20. {
    21. $SelectedMonth = $_SESSION['SelectedMonth'];
    22. $SelectedYear = $_SESSION['SelectedYear'];
    23. }
    24. else
    25. {
    26. $SelectedMonth = date('m');
    27. $SelectedYear = date('Y');
    28. }
    29. /* => On Calcul de total general pour etablir le pourcentage <= */
    30. $sql_total="SELECT SUM(dtc_quantite) AS total_general
    31. FROM v_stat_commande
    32. WHERE MONTH(dtc_date) ='".$SelectedMonth."'
    33. AND YEAR(dtc_date) ='".$SelectedYear."' ";
    34. $total_general=mysql_query($sql_total) or die (mysql_error());
    35. $total_general=mysql_fetch_assoc($total_general);
    36.  
    37. /* => Requete categories sur 1 mois <= */
    38. $sql2 = "SELECT SUM(dtc_quantite) AS total, ".
    39. "dtc_led_categorie, ".
    40. "dtc_date ".
    41. "FROM v_stat_commande ".
    42. "WHERE MONTH(dtc_date) ='".$SelectedMonth."' ".
    43. "AND YEAR(dtc_date) ='".$SelectedYear."' ".
    44. "GROUP BY dtc_led_categorie";
    45. $sql_stat = mysql_query($sql2) or die(mysql_error());
    46. $aStats = array();
    47. // On place les donnees recuperees de la requete dans un tableau
    48. while(false !== ($s = mysql_fetch_assoc($sql_stat)))
    49. {
    50. $aStats[] = $s;
    51. }
    52. $nbstats = count($aStats); // Calcul nombre de resultats obtenus
    53.  
    54. // Création de l image avec dimensions donnees (largeur/hauteur)
    55. $largeurImage = 600;
    56. $hauteurImage = 400;
    57. $im = ImageCreate ($largeurImage, $hauteurImage) or die ("Erreur lors de la création de l'image");
    58.  
    59. // Definition des couleurs qui seront utilisees
    60. $couleur_fond = ImageColorAllocate ($im, 230, 230, 230);
    61. $noir = ImageColorAllocate ($im, 0, 0, 0);
    62. $vert = ImageColorAllocate ($im, 13, 151, 23);
    63. $coul_legendes = ImageColorAllocate ($im, 11, 62, 43);
    64. $blanc = ImageColorAllocate ($im, 255, 255, 255);
    65. // Couleur des barres du graphique
    66. $coul_barre1 = ImageColorAllocate ($im, 42, 124, 94);
    67. $coul_barre2 = ImageColorAllocate ($im, 0, 90, 94);
    68. $coul_barre3 = ImageColorAllocate ($im, 0, 38, 131);
    69. $coul_barre4 = ImageColorAllocate ($im, 100, 38, 131);
    70. $coul_barre5 = ImageColorAllocate ($im, 165, 38, 131);
    71. $coul_barre6 = ImageColorAllocate ($im, 165, 38, 131);
    72. $coul_barre7 = ImageColorAllocate ($im, 165, 38, 131);
    73. $coul_barre8 = ImageColorAllocate ($im, 165, 38, 131);
    74. $coul_barre9 = ImageColorAllocate ($im, 100, 38, 131);
    75. $coul_barre10 = ImageColorAllocate ($im, 100, 38, 131);
    76.  
    77. //Traçage de l'image de fond
    78. ImageLine ($im, 50, 50, 50, $hauteurImage-30, $noir); //Axe Vertical
    79. ImageLine ($im, 50, $hauteurImage-30, $largeurImage-40, $hauteurImage-30, $noir); // Axe horizontal
    80. for ($g = 10; $g <= 100; $g += 10)
    81. {
    82. Imagettftext($im, 10, 0,15,($hauteurImage-25)-($g*3),$coul_legendes,"arial.ttf",$g); // Graduation verticale
    83. ImageLine($im, 50, ($hauteurImage-30)-($g*3), 560, ($hauteurImage-30)-($g*3), $blanc); // Lignes blanches
    84. ImageLine($im, 45, ($hauteurImage-30)-($g*3), 50, ($hauteurImage-30)-($g*3), $noir); // Traits graduation verticale
    85. }
    86.  
    87. // Traçage des Bâtons et de leur valeurs
    88. $h = 1; // Décalage vertical
    89. $l = 20; // Décalage horizontal
    90. $mois = 1;
    91. $font = "arial.ttf";
    92. foreach($aStats as $s => $stat)
    93. {
    94. $resultat= round(($aStats[$s]['total']/$total_general['total_general'])*100, 0); // Calcul du Pourcentage
    95.  
    96. // On déclare les variables de position pour les batons
    97. $im_rect_x1 = $l + 60; // En x1 la valeur est fixe
    98. $im_rect_y1 = (($hauteurImage - 30) - ( ((int)($aStats[$s]['total'])/$total_general['total_general'])*100 )* 3); // En y1 la valeur depend de la BD
    99. $im_rect_x2 = $l + 80; // En x2 la valeur est fixe
    100. $im_rect_y2 = $hauteurImage - 30; // En y2 la valeur est fixe
    101.  
    102. // On déclare les variables de position pour le texte
    103. $im_txt1_x = $l + 60;
    104. $im_txt1_y = 200;
    105. $im_txt2_x = ($mois * 40) + 38;
    106. $im_txt2_y = $hauteurImage - 30;
    107. $coul_barre = ${'coul_barre'.$mois};
    108.  
    109. ImageFilledRectangle($im, $im_rect_x1, $im_rect_y1, $im_rect_x2, $im_rect_y2, $coul_barre);
    110.  
    111. // Commentaires
    112. Imagettftext($im, 10, 0, $im_txt1_x, $im_txt2_y+20, $coul_legendes, $font, $resultat.'%');
    113. Imagettftext($im, 9, 90, $im_txt2_x, $im_rect_y2, $coul_legendes, $font, $aStats[$s]['dtc_led_categorie'].' = '.$aStats[$s]['total'].' pcs');
    114. $h++;
    115. $l += 40;
    116. $mois++;
    117. }
    118. Imagettftext($im, 10, 0, 50, 30, $coul_legendes, $font,'Total des ventes :'.$total_general['total_general'].' pcs');
    119.  
    120. // Affichage de l image
    121. header ("Content-type: image/png");
    122. ImagePng ($im);
    123.  
    124. ?>

     

    Et voici le code pour une catégorie choisie pour le mois précédemment sélectionné :

    1. <?php
    2.  
    3. include('../connex.inc.php');
    4. $idcom=connex('lampeslejsea11', 'myparam');
    5. mysql_query("SET NAMES utf8"); /*TRES IMPORTANT -> permet d'éviter les problèmes d'affichage d'accents*/
    6.  
    7. /* => Appel de functions <= */
    8. include('_functions/_fr/function.inc.php');
    9. include('_functions/_fr/function.panier.inc.php');
    10. include('_functions/_fr/function.office.inc.php');
    11.  
    12. /**
    13.  On recupere les informations : categorie et mois chosis
    14. */
    15. $categorie = $_SESSION['stat']['categorie'];
    16. if (isset($_SESSION['SelectedMonth']))
    17. {
    18. $SelectedMonth = $_SESSION['SelectedMonth'];
    19. $SelectedYear = $_SESSION['SelectedYear'];
    20. }
    21. else
    22. {
    23. $SelectedMonth = date('m');
    24. $SelectedYear = date('Y');
    25. }
    26. // Calcul du total des ventes pour la categorie selectionnnee
    27. $sql_total_categorie = "SELECT SUM(dtc_quantite) AS total_categorie,".
    28. " dtc_date,".
    29. " dtc_code_categorie".
    30. " FROM v_stat_commande".
    31. " WHERE dtc_code_categorie='".$categorie."' ".
    32. " AND MONTH(dtc_date) ='".$SelectedMonth."' ".
    33. " AND YEAR(dtc_date) ='".$SelectedYear."'".
    34. " GROUP BY dtc_date";
    35. $total_categorie = mysql_query($sql_total_categorie) or die (mysql_error());
    36. $total_categorie = mysql_fetch_assoc($total_categorie);
    37.  
    38. // Requete categories sur 1 an
    39. $sql2 = "SELECT SUM(dtc_quantite) AS total,".
    40. " dtc_led_categorie,".
    41. " dtc_date,".
    42. " dtc_code_categorie, ".
    43. " dtc_led_reference".
    44. " FROM v_stat_commande".
    45. " WHERE dtc_code_categorie='".$categorie."' ".
    46. " AND MONTH(dtc_date) ='".$SelectedMonth."' ".
    47. " AND YEAR(dtc_date) ='".$SelectedYear."'".
    48. " GROUP BY dtc_led_reference";
    49. $sql_stat = mysql_query($sql2) or die(mysql_error());
    50. $aStats = array();
    51. // On place les donnees recuperees de la requete dans un tableau
    52. while(false !== ($s = mysql_fetch_assoc($sql_stat)))
    53. {
    54. $aStats[] = $s;
    55. }
    56. $nbstats = count($aStats); // Calcul nombre de resultats obtenus
    57.  
    58. // Création de l image avec dimensions donnees (largeur/hauteur)
    59. $largeurImage = 600;
    60. $hauteurImage = 400;
    61. $im2 = ImageCreate ($largeurImage, $hauteurImage) or die ("Erreur lors de la création de l'image");
    62.  
    63. // On defini les couleurs qui seront utilisees
    64. $couleur_fond = ImageColorAllocate ($im2, 230, 230, 230);
    65. $noir = ImageColorAllocate ($im2, 0, 0, 0);
    66. $vert = ImageColorAllocate ($im2, 13, 151, 23);
    67. $coul_legendes = ImageColorAllocate ($im2, 11, 62, 43);
    68. $blanc = ImageColorAllocate ($im2, 255, 255, 255);
    69. // Couleur des barres du graphique
    70. $coul_barre1 = ImageColorAllocate ($im2, 42, 124, 94);
    71. $coul_barre2 = ImageColorAllocate ($im2, 0, 90, 94);
    72. $coul_barre3 = ImageColorAllocate ($im2, 0, 38, 131);
    73. $coul_barre4 = ImageColorAllocate ($im2, 100, 38, 131);
    74. $coul_barre5 = ImageColorAllocate ($im2, 165, 38, 131);
    75. $coul_barre6 = ImageColorAllocate ($im2, 165, 38, 131);
    76. $coul_barre7 = ImageColorAllocate ($im2, 165, 38, 131);
    77. $coul_barre8 = ImageColorAllocate ($im2, 165, 38, 131);
    78. $coul_barre9 = ImageColorAllocate ($im2, 100, 38, 131);
    79. $coul_barre10 = ImageColorAllocate ($im2, 100, 38, 131);
    80. /**
    81.  * Traçage de l'image de fond
    82.  */
    83. ImageLine ($im2, 50, 50, 50, $hauteurImage-30, $noir); //Axe Vertical
    84. ImageLine ($im2, 50, $hauteurImage-30, $largeurImage-40, $hauteurImage-30, $noir); // Axe horizontal
    85. for ($g = 10; $g <= 100; $g += 10)
    86. {
    87. Imagettftext($im2, 10, 0,15,($hauteurImage-25)-($g*3),$coul_legendes,"arial.ttf",$g); // Graduation verticale
    88. ImageLine($im2, 50, ($hauteurImage-30)-($g*3), 560, ($hauteurImage-30)-($g*3), $blanc); // Lignes blanches
    89. ImageLine($im2, 45, ($hauteurImage-30)-($g*3), 50, ($hauteurImage-30)-($g*3), $noir); // Traits graduation verticale
    90. }
    91. // Calcul du total de pieces vendues pour 1 categorie
    92. if (!empty($total_categorie['total_categorie']))
    93. {
    94. $total_vendu = $total_categorie['total_categorie'];
    95. }
    96. else
    97. {
    98. $total_vendu = 0;
    99. }
    100. // Traçage des Bâtons et de leur valeurs
    101. $h = 1; // Décalage vertical
    102. $l = 20; // Décalage horizontal
    103. $mois = 1;
    104. $font = "arial.ttf";
    105. foreach($aStats as $s => $stat)
    106. {
    107. // On déclare les variables de position pour les batons
    108. $im2_rect_x1 = $l + 60; // En x1 la valeur est fixe
    109. $im2_rect_y1 = (($hauteurImage - 30) - ((int)$aStats[$s]['total']) * 3); // En y1 la valeur depend de la BD
    110. $im2_rect_x2 = $l + 80; // En x2 la valeur est fixe
    111. $im2_rect_y2 = $hauteurImage - 30; // En y2 la valeur est fixe
    112.  
    113. // On déclare les variables de position pour le texte
    114. $im2_txt1_x = $l + 60;
    115. $im2_txt1_y = 200;
    116. $im2_txt2_x = ($mois * 40) + 38;
    117. $im2_txt2_y = $hauteurImage - 30;
    118. $coul_barre = ${'coul_barre'.$mois};
    119.  
    120.  
    121. ImageFilledRectangle($im2, $im2_rect_x1, $im2_rect_y1, $im2_rect_x2, $im2_rect_y2, $coul_barre);
    122.  
    123. // Commentaires
    124. Imagettftext($im2, 10, 0, $im2_txt1_x, $im2_txt2_y+20, $coul_legendes, $font, $aStats[$s]['total'].'%');
    125. Imagettftext($im2, 9, 90, $im2_txt2_x, $im2_rect_y2, $coul_legendes, $font, $aStats[$s]['dtc_led_reference'].' = '.$aStats[$s]['total'].' pcs');
    126. $h++;
    127. $l += 40;
    128. $mois++;
    129. }
    130. Imagettftext($im2, 9, 0, 50, 30, $coul_legendes, $font, 'Total mensuel vendu : '.$total_vendu.' pcs');
    131.  
    132. /**
    133.  * header déplacé pour permettre un débogage en amont.
    134.  */
    135. header ("Content-type: image/png");
    136. ImagePng ($im2);
    137.  
    138. ?>

     

    Vois-tu une erreur ou as-tu une explication au fait qu'il ne m'affiche qu' une référence et en plus la dernière?

    Merci 

     
    Par Cyrano -  Le 09/05/2011 - 

    Salut,

    le premier problème est que tu aurais soulevé un bug dansphpMyAdmin avec une requête particulière, c'est assez inattendu.

    Pour ton code maintenant, je relève ceci :

    1. //...
    2. $total_categorie = mysql_query($sql_total_categorie) or die (mysql_error());
    3. $total_categorie = mysql_fetch_assoc($total_categorie);
    4. //...

    tu utilises la mêmevariable que tu ré-initialise en la transformant... pas terrible ça. Théoriquement ça marche mais je me suis toujours méfié de ce type de méthode de programmation. Donc j'aurais tendance à corriger comme ceci :

    1. //...
    2. $exec = mysql_query($sql_total_categorie) or die (mysql_error());
    3. $total_categorie = mysql_fetch_assoc($exec);
    4. //...

    Tu as le même truc dans les deux codes montrés plus haut.

    Un autre point rapidement, tu as écrit ceci :

    1. //..
    2. if (isset($_SESSION['SelectedMonth']))
    3. {
    4. $SelectedMonth = $_SESSION['SelectedMonth'];
    5. $SelectedYear = $_SESSION['SelectedYear'];
    6. }
    7. else
    8. {
    9. $SelectedMonth = date('m');
    10. $SelectedYear = date('Y');
    11. }
    12. //.

    Que va-t-il se passer si $_SESSION['SelectedYear'] n'est pas définie ?

    Suggestion de remplacement :

    1. //...
    2. $SelectedMonth = (isset($_SESSION['SelectedMonth'])) ? $_SESSION['SelectedMonth'] : date('m');
    3. $SelectedYear = (isset($_SESSION['SelectedYear'])) ? $_SESSION['SelectedYear'] : date('Y');

    Vérifie déjà si à partir de là tu as toujours exactement la même requête générée que celle que tu as testée dans phpMyAdmin qui a généré une erreur. Au besoin, affiche-moi ici la requête générée.

     

     

     

     

     
    Par paintbox -  Le 09/05/2011 - 
    Qu'entends tu par la requete générée? Ma page HTML dans mon navigateur ?
     
    Par fred1975 -  Le 09/05/2011 - 

    bonsoir, 

    premiere fois dans un forum.

    Je suis moi aussi chez OVH et j'essaye d'installer sur mon site les provinces espagnoles pour les livraison.

    j'ai telecharger un fichier et le message d'erreur est le suivant:

    Fatal error: require() [function.require]: Failed opening required './' (include_path='.:/usr/local/lib/php') in /home/phpMyAdmin-3.3.8.1-all-languages/sql.php on line 318 

    j'ai tapé ça dans google et j'ai atterri dans votre discusion, aurier vous une idée svp?si je suis hors sujet pardonner moi.

    merci 

     

     
    Par Cyrano -  Le 09/05/2011 - 

    @Paintbox : ça veut dire que tu fais un var_dump de la requête SQL de façon à afficher ce qui est réellement envoyé à MySQL.

    @fred1975 : Salut Fred, tu aurais du ouvrir un nouveau sujet. Pas grave mais penses-y la prochaine fois. Mais on dirait que le problème est identique.

    Je n'ai pas vérifié un détail mais peut-être aurez-vous l'un comme l'autre soulevé un bug de phpMyAdmin. Question à deux francs : pouvez-vous vérifier la version de phpMyAdmin que vous avez mis sur OVH et vérifier la version de PHP par la même occasion, ça sent l'erreur de version trop récente de phpMyAdmin pour une version pas trop à jour de PHP...

    Et en question subsidiaire, avez-vos testé, l'un comme l'autre, le phpMyAdmin mis à disposition par OVH (Lien dans une de mes réponses précédentes) ? Le cas échéant, obtenez-vous la même erreur ? 

     
    Par paintbox -  Le 10/05/2011 - 

    Bonjour Cyrano et Fred1975,

     lorsque je fais un var_dump, il y a visiblement une erreur parce que mon image n'apparaît pas et la requête générée n'apparait pas.

     La version de PHPMyAdmin que j'ai installé est celle conseillée par OVH qui est 3.3.10

     

     
    Par Cyrano -  Le 10/05/2011 - 

    Pour mettre ton var_dump, mets ça comme ceci :

    var_dump
    1. echo("<pre>\n");
    2. var_dump($sql);
    3. echo("</pre>\n");die();

    Le die() est fait exprès, c'est juste pour voir la requête générée, après ça tu mets le bloc en commentaires quand tu n'en s plus besoin.

    Et tu n'as pas répondu à la dernière question : as-tu testé le phpMyAdmin fourni par OVH ?

     

     
    Par paintbox -  Le 10/05/2011 - 

    Pour la dernière question, oui oui j'ai installé le PhpMyAdmin fourni par OVH sa version est 3.3.10

    Pour le var_dump, c'est ce que j'avais fait. Mais rien ne s'affiche pas même mon graph. Voici mon code 

    1. <?php
    2.  
    3. include('../connex.inc.php');
    4. $idcom=connex('lampeslejsea11', 'myparam');
    5. mysql_query("SET NAMES utf8"); /*TRES IMPORTANT -> permet d'éviter les problèmes d'affichage d'accents*/
    6.  
    7. /* => Appel de functions <= */
    8. include('_functions/_fr/function.inc.php');
    9. include('_functions/_fr/function.panier.inc.php');
    10. include('_functions/_fr/function.office.inc.php');
    11.  
    12. /**
    13.  On recupere les informations : categorie et mois chosis
    14. */
    15. $categorie = $_SESSION['stat']['categorie'];
    16.  
    17. $SelectedMonth = (isset($_SESSION['SelectedMonth'])) ? $_SESSION['SelectedMonth'] : date('m');
    18. $SelectedYear = (isset($_SESSION['SelectedYear'])) ? $_SESSION['SelectedYear'] : date('Y');
    19.  
    20. // Calcul du total des ventes pour la categorie selectionnnee
    21. $sql_total_categorie = "SELECT SUM(dtc_quantite) AS total_categorie,".
    22. " dtc_date,".
    23. " dtc_code_categorie".
    24. " FROM v_stat_commande".
    25. " WHERE dtc_code_categorie='".$categorie."' ".
    26. " AND MONTH(dtc_date) ='".$SelectedMonth."' ".
    27. " AND YEAR(dtc_date) ='".$SelectedYear."'".
    28. " GROUP BY dtc_date";
    29. $exec = mysql_query($sql_total_categorie) or die (mysql_error());
    30. $total_categorie = mysql_fetch_assoc($exec);
    31.  
    32. echo("<pre>Total_categorie :\n");
    33. var_dump($total_categorie);
    34. echo("</pre>\n");
    35.  
    36. // Requete categories sur 1 an
    37. $sql2 = "SELECT SUM(dtc_quantite) AS total,".
    38. " dtc_led_categorie,".
    39. " dtc_date,".
    40. " dtc_code_categorie, ".
    41. " dtc_led_reference".
    42. " FROM v_stat_commande".
    43. " WHERE dtc_code_categorie='".$categorie."' ".
    44. " AND MONTH(dtc_date) ='".$SelectedMonth."' ".
    45. " AND YEAR(dtc_date) ='".$SelectedYear."'".
    46. " GROUP BY dtc_led_reference";
    47. $sql_stat = mysql_query($sql2) or die(mysql_error());
    48. $aStats = array();
    49. // On place les donnees recuperees de la requete dans un tableau
    50. while(false !== ($s = mysql_fetch_assoc($sql_stat)))
    51. {
    52. $aStats[] = $s;
    53. }
    54. $nbstats = count($aStats); // Calcul nombre de resultats obtenus
    55.  
    56.  
    57. echo("<pre>Categorie mois :\n");
    58. var_dump($aStats);
    59. echo("</pre>\n");die();
    60.  
    61.  
    62. // Création de l image avec dimensions donnees (largeur/hauteur)
    63. $largeurImage = 600;
    64. $hauteurImage = 400;
    65. $im2 = ImageCreate ($largeurImage, $hauteurImage) or die ("Erreur lors de la création de l'image");
    66.  
    67. // On defini les couleurs qui seront utilisees
    68. $couleur_fond = ImageColorAllocate ($im2, 230, 230, 230);
    69. $noir = ImageColorAllocate ($im2, 0, 0, 0);
    70. $vert = ImageColorAllocate ($im2, 13, 151, 23);
    71. $coul_legendes = ImageColorAllocate ($im2, 11, 62, 43);
    72. $blanc = ImageColorAllocate ($im2, 255, 255, 255);
    73. // Couleur des barres du graphique
    74. $coul_barre1 = ImageColorAllocate ($im2, 42, 124, 94);
    75. $coul_barre2 = ImageColorAllocate ($im2, 0, 90, 94);
    76. $coul_barre3 = ImageColorAllocate ($im2, 0, 38, 131);
    77. $coul_barre4 = ImageColorAllocate ($im2, 100, 38, 131);
    78. $coul_barre5 = ImageColorAllocate ($im2, 165, 38, 131);
    79. $coul_barre6 = ImageColorAllocate ($im2, 165, 38, 131);
    80. $coul_barre7 = ImageColorAllocate ($im2, 165, 38, 131);
    81. $coul_barre8 = ImageColorAllocate ($im2, 165, 38, 131);
    82. $coul_barre9 = ImageColorAllocate ($im2, 100, 38, 131);
    83. $coul_barre10 = ImageColorAllocate ($im2, 100, 38, 131);
    84. /**
    85.  * Traçage de l'image de fond
    86.  */
    87. ImageLine ($im2, 50, 50, 50, $hauteurImage-30, $noir); //Axe Vertical
    88. ImageLine ($im2, 50, $hauteurImage-30, $largeurImage-40, $hauteurImage-30, $noir); // Axe horizontal
    89. for ($g = 10; $g <= 100; $g += 10)
    90. {
    91. Imagettftext($im2, 10, 0,15,($hauteurImage-25)-($g*3),$coul_legendes,"arial.ttf",$g); // Graduation verticale
    92. ImageLine($im2, 50, ($hauteurImage-30)-($g*3), 560, ($hauteurImage-30)-($g*3), $blanc); // Lignes blanches
    93. ImageLine($im2, 45, ($hauteurImage-30)-($g*3), 50, ($hauteurImage-30)-($g*3), $noir); // Traits graduation verticale
    94. }
    95. // Calcul du total de pieces vendues pour 1 categorie
    96. if (!empty($total_categorie['total_categorie']))
    97. {
    98. $total_vendu = $total_categorie['total_categorie'];
    99. }
    100. else
    101. {
    102. $total_vendu = 0;
    103. }
    104. // Traçage des Bâtons et de leur valeurs
    105. $h = 1; // Décalage vertical
    106. $l = 20; // Décalage horizontal
    107. $mois = 1;
    108. $font = "arial.ttf";
    109. foreach($aStats as $s => $stat)
    110. {
    111. // On déclare les variables de position pour les batons
    112. $im2_rect_x1 = $l + 60; // En x1 la valeur est fixe
    113. $im2_rect_y1 = (($hauteurImage - 30) - ((int)$aStats[$s]['total']) * 3); // En y1 la valeur depend de la BD
    114. $im2_rect_x2 = $l + 80; // En x2 la valeur est fixe
    115. $im2_rect_y2 = $hauteurImage - 30; // En y2 la valeur est fixe
    116.  
    117. // On déclare les variables de position pour le texte
    118. $im2_txt1_x = $l + 60;
    119. $im2_txt1_y = 200;
    120. $im2_txt2_x = ($mois * 40) + 38;
    121. $im2_txt2_y = $hauteurImage - 30;
    122. $coul_barre = ${'coul_barre'.$mois};
    123.  
    124.  
    125. ImageFilledRectangle($im2, $im2_rect_x1, $im2_rect_y1, $im2_rect_x2, $im2_rect_y2, $coul_barre);
    126.  
    127. // Commentaires
    128. Imagettftext($im2, 10, 0, $im2_txt1_x, $im2_txt2_y+20, $coul_legendes, $font, $aStats[$s]['total'].'%');
    129. Imagettftext($im2, 9, 90, $im2_txt2_x, $im2_rect_y2, $coul_legendes, $font, $aStats[$s]['dtc_led_reference'].' = '.$aStats[$s]['total'].' pcs');
    130. $h++;
    131. $l += 40;
    132. $mois++;
    133. }
    134. Imagettftext($im2, 9, 0, 50, 30, $coul_legendes, $font, 'Total mensuel vendu : '.$total_vendu.' pcs');
    135.  
    136. /**
    137.  * header déplacé pour permettre un débogage en amont.
    138.  */
    139. header ("Content-type: image/png");
    140. ImagePng ($im2);
    141.  
    142. ?>

     

     

     
    Par Cyrano -  Le 10/05/2011 - 

    Tu n'as donc pas tout lu et pas compris ma question : j'avais écrit : « Accessoirement il y a aussi ça, encore mieux parce que tu n'abesoin de rien installer du tout : https://phpmyadmin.ovh.net/ »

    Ensuite pour le var_dump, je t'ai indiqué d'ajouter un die() pour stopper l'exécution imméditatement après affichage de la requête, sinon la construction de l'image continue et tout plante à cause du var_dump et rien ne s'affiche.

     

     
    Par paintbox -  Le 10/05/2011 - 

    Désolé, je crois que je ne saisi pas ce que tu souhaites.

    Est-ce que tu veux que je lance ma requête directement dans PHPMyAdmin via le lien que tu m'as donné (https://phpmyadmin.ovh.net/) ? Suivi du var_dump? (Je crois que je sors une grosse bêtise là)

    Ce que moi j'ai fait c'est directement intégrer le var_dump sur ma page en ligne.

     
    Par Cyrano -  Le 10/05/2011 - 

    Ça commence à ressembler à un dialogue de sourds notre affaire.

    Reprennons :  tu as écrit au départ « Je rencontre le problème suivant. PhpMyAdmin me renvoie le message d'erreur suivant:  » suivi du message d'erreur. Visiblement, la version de phpMyAdmin que tu as installé présente un défaut. Donc j'ai suggéré que tu utilisesle phpMyAdmin fourni par OV pour effectuer le même test et vérifier si tu obtiens la même erreur ou non.

    Le résultat est indépendant de l'exécution de la création de ton image, mais si tu rencontres un problème en ligne pour créer cette image, tu dois pouvoir tester ta requête, or tu arrives sur un second problème avec phpMyAdmin... c'est un autre problème. Donc, commence par résoudre le problème phpMyAdmin en testant celui d'OVH et quand tu auras une réponse, on pourra avancer vers la résolution du problème de l'image.

     

     
    Par paintbox -  Le 10/05/2011 - 

    On va y arriver :-) 

     Le PHPMyAdmin que j'ai installé est bien celui fourni par OVH.

    J'ai obtenu le message d'erreur (mentionné plus haut) lorsque j'ai testé ma requete directement dans PHPMyAdmin à l'adresse https://phpmyadmin.ovh.net/  .

    Par contre sur ma page web, je n'ai pas de message d'erreur mais comme je te l'ai expliqué plus haut, le résulta qu'il m'affiche pour une catégorie et un mois sélectionnés par l'utilisateur ne correspond pas au total de produits de cette catégorie. De plus il ne m'affiche que le dernier produit de cette catégorie alors que j'en ai par exemple 6 produits.

     

     
    Par Cyrano -  Le 10/05/2011 - 

    La journée va être longue....

    Il faudrait savoir : tu as dit au début que tu as installé ton propre phpMyAdmin en utilisant la versionrecommandée par OVH, j'en déduis que l'url de ce phpMyAdmin doit ressembler à ton-site.com/phpmyadmin/ ou quelque chose dans ce goût là. À la suite de quoi tu as obtenu une erreur. Maintenant tu m'annonces que tu as testé ta requête dans le phpMyAdmin fourni à l'adresse phpmyadmin.ovh.net et que tu y obtiens une erreur : si je résume, tu as donc la même erreur dns les deux adresses de phpMyAdmin, c'est bien ça ?

    Quant à ta requête, as-tufini par réussir à la faire afficher en ajoutant un die() ou non ? Ton code ressemble-t-il à

    1. // Calcul du total des ventes pour la categorie selectionnnee
    2. $sql_total_categorie = "SELECT ".
    3. " SUM(dtc_quantite) AS total_categorie, ".
    4. " dtc_date, ".
    5. " dtc_code_categorie ".
    6. "FROM v_stat_commande ".
    7. "WHERE dtc_code_categorie = '".$categorie."' ".
    8. " AND MONTH(dtc_date) = '".$SelectedMonth."' ".
    9. " AND YEAR(dtc_date) = '".$SelectedYear."' ".
    10. "GROUP BY dtc_date";
    11. $exec = mysql_query($sql_total_categorie) or die (mysql_error());
    12. $total_categorie = mysql_fetch_assoc($exec);
    13.  
    14. echo("<pre>Total_categorie :\n");
    15. var_dump($total_categorie);
    16. echo("</pre>\n");die();

    ?

    Et quel est le résultat ?

     
    Par Cyrano -  Le 10/05/2011 - 

    Tiens, j'ai trouvé autre chose ici :

    1. // On definit les couleurs qui seront utilisees
    2. $couleur_fond = ImageColorAllocate ($im2, 230, 230, 230);
    3. $noir = ImageColorAllocate ($im2, 0, 0, 0);
    4. $vert = ImageColorAllocate ($im2, 13, 151, 23);
    5. $coul_legendes = ImageColorAllocate ($im2, 11, 62, 43);
    6. $blanc = ImageColorAllocate ($im2, 255, 255, 255);
    7. // Couleur des barres du graphique
    8. $coul_barre1 = ImageColorAllocate ($im2, 42, 124, 94);
    9. $coul_barre2 = ImageColorAllocate ($im2, 0, 90, 94);
    10. $coul_barre3 = ImageColorAllocate ($im2, 0, 38, 131);
    11. $coul_barre4 = ImageColorAllocate ($im2, 100, 38, 131);
    12. $coul_barre5 = ImageColorAllocate ($im2, 165, 38, 131);
    13. $coul_barre6 = ImageColorAllocate ($im2, 165, 38, 131);
    14. $coul_barre7 = ImageColorAllocate ($im2, 165, 38, 131);
    15. $coul_barre8 = ImageColorAllocate ($im2, 165, 38, 131);
    16. $coul_barre9 = ImageColorAllocate ($im2, 100, 38, 131);
    17. $coul_barre10 = ImageColorAllocate ($im2, 100, 38, 131);
    18. /**
    19.  * Traçage de l'image de fond
    20.  */
    21. //... etc...

    Tu as pas l'impression qu'il manque un truc ? Je t'affirme pourtant qu'il manque quelque chose et ça génère un warning plus loin, warning que tu nevois pas en ligne mais que tu devrais voir en local, à condition toutefois d'avoir bien configuré ton environnement :

    1. display_error = ON;
    2. error_reporting = E_ALL | E_STRICT;

    Vérifie ta configuration, corrige au besoin et refais le test en local.

     

     

     
    Par paintbox -  Le 10/05/2011 - 

    En fait, chez OVH il faut installer sur son espace hébergement (dans le dossier qui contiendra ton site) une version de PHP. Cela se fait via FTP.

    Ensuite, pour se connecter à sa base de données, il suffit d'aller à l'adresse https://phpmyadmin.ovh.net/, d'y indiquer son nom d'utilisateur, son mot de passe, le choix du serveur.

    Je crois qu'on ne sait pas directement accéder à la version de PHPMyAdmin qui se trouve sur notre serveur avec une adresse du type site.com/phpmyadmin/ (comme tu se mentionne). Je pense que l'accès se fait via https://phpmyadmin.ovh.net/ et en indiquant les différents paramètres.

    Donc pour résumer, j'ai uniquement tester ma requete sur https://phpmyadmin.ovh.net/ (ou j'ai eu mon erreur) car je n'ai pas accès (directement) auPHPMyAdmin qui est sur mon serveur.

     Est-ce plus clair ?

    Oui mon code ressemble bien à celui que tu donnes. Mais non, je n'ai pas réussi à le faire fonctionner. 

     

     
    Par paintbox -  Le 10/05/2011 - 

    Ceci doit être corrigé où ? Dans mon fichier PHP.ini ?

    1. display_error = ON;
    2. error_reporting = E_ALL | E_STRICT;

     

     

     
    Par Cyrano -  Le 10/05/2011 - 

    tout juste

     

     
    Par paintbox -  Le 10/05/2011 - 

    Grrr… j'ai fais la modif dans mon fichier php.ini en local et je n'ai aucun message d'erreur. En local mon graph est correct. 

    Je ne vois pas ce qu'il manque dans la partie que tu précises. J'y indique les différentes couleurs qui seront utilisées.

    Devrais-je changer aussi le php.ini qui est en ligne ? 

     
    Par Cyrano -  Le 10/05/2011 - 

    En ligne, à moins d'avoir un serveur dédié, tu ne pourras même pas accéder au php.ini.

    Pour ce qui manque, je te l'avais pourtant fait observer dans un autre post sur le sujet. Un indice : si tu maintiens ce code, c'est qu'on utilise pas les mêmes calendriers et ton année est plus courte ou alors tu as des mois plus longs... ;)

     

     
    Par Cyrano -  Le 10/05/2011 - 

    Un détail : as-tu redémarré ton serveur Apache après avoir modifié ton php.ini local ? Sinon les changement ne seront pas pris en compte.

     

     
    Par paintbox -  Le 10/05/2011 - 

    Est-ce que c'est le fait que mes variables $coul_barre s'arretent à 10 alors qu'il y 12 mois dans l'année?

     
    Par paintbox -  Le 10/05/2011 - 

    Oui j'ai redémarré mon serveur et c'est pareil pas de message d'erreur, mais en local cela fonctionne correctement.

     
    Par Cyrano -  Le 10/05/2011 - 

    « Est-ce que c'est le fait que mes variables $coul_barre s'arretent à 10 alors qu'il y 12 mois dans l'année? »

    Précisément : que se passe-t-il selon toi si le mois traité est 11 ou 12 ?

     
    Par paintbox -  Le 10/05/2011 - 

    il n'a pas de couleur pour ce mois donc il cale.

     
    Par Cyrano -  Le 10/05/2011 - 

    Donc... ? ;) Si une erreur est générée, elle envoie un en-tête vers la sortie standard, donc le navigateur, du coup, le header en fin de page sensé envoyer une image génère une erreur aussi.

    Ceci étant, ça ne résoud pas ton problème de SQL : à part via phpMyAdmin, qu'as-tu tenté pour vérifier que ta requête se déroule normalement ou bien retourne une erreur ? Si tu n'as rien tenté de particulier, réfléchis à la question : tu es dans une situation où un outil est indisponible ou bien il y a une erreur qui génère un effet de bord inattendu, bref, tu ne peux pas l'utiliser efficacement : quelle alternative reste-t-il ?

     

     
    Par paintbox -  Le 10/05/2011 - 

    J'ai uniquement testé ma requête dans PHPMyAdmin.

    Quel autre outil utiliser hum… 

    Passer à une autre version de  PHPMyAdmin ?

     
    Par Cyrano -  Le 10/05/2011 - 

    Et un var_dump dans ton code directement, en laissant Filezilla ouvert pour remettre le fichier sans les lignes de débogage dès que tu auras vu ce que tu veux voir... ?

    Faut pas chercher midi à 14h00, en général, les solution simples peuvent marcher aussi ;) Pas toujours trèsélégant mais bon. Il reste que je trouve curieux que ton appli fonctionne en local et pas en ligne surtout si tu as configuré ton environnement en mode développement et que tout se passe bien...

     
    Par paintbox -  Le 10/05/2011 - 

    Heu… suis encore moins sûr de comprendre.

     "un var_dump dans ton code directement" tu veux dire dans mon fichier qui est en ligne ?

     "en laissant Filezilla ouvert" D'après mes recherches, Filezilla est un client FTP

     En gros je fais mon var_dump sur le fichier qui est sur mon serveur ? C'est ce que j'ai déjà fait. 

     
    Par Cyrano -  Le 10/05/2011 - 

     

    L'idée de Filezilla, c'est pour gagner du temps, tu fais ton test, et dès que tu as vu le résultat avec le var_dump, tu bascules sur Filezilla pour remettre le fichier sans le var_dump() tout simplement, histoire de pas laisser en ligne trop longtemps un fichier qui afficherai des erreurs.

    Si tu n'as toujours pas de résultat, c'est qu'une erreur non affichable se produit sur le serveur. Tu peux toujours essayer de forcer l'affichage des erreur si la fonction n'est pas bloquée par OVH : ini_set() et tu modifie le display_error en le mettant à ON et le error_reporting à E_ALL et ça devrait afficher les erreurs s'il y en a, probablement une undefined variable ou autre du même genre.

    Sinon, à tout hasard, compare le phpinfo entre ta machine et le serveur et vérifie les versions de GD, ça pourrait venir de là aussi quoique ce soit peu probable mais je m'attends à tout.

    Et coté MySQL, as-tu un autre fichier qui fonctionne comportant des requêtes ? Ça nous donnerait une bonne indication sur le bon fonctionnement de la connexion.

     
    Par paintbox -  Le 10/05/2011 - 

    Alors… je n'ai pas de fichier php.ini sur OVH.

     J'ai en revanche regardé  le phpinfo

    La version en local est : PHP version 5.2.11

    La version sur OVH est : PHP version 5.2.17 

    en local pour gd j'ai :

    1. gd
    2.  
    3. GD Support enabled
    4. GD Version bundled (2.0.34 compatible)
    5. FreeType Support enabled
    6. FreeType Linkage with freetype
    7. FreeType Version 2.3.9
    8. T1Lib Support enabled
    9. GIF Read Support enabled
    10. GIF Create Support enabled
    11. JPG Support enabled
    12. PNG Support enabled
    13. WBMP Support enabled
    14. XBM Support enabled

     

    et le meme sur OVH

    1. GD Support enabled
    2. GD Version bundled (2.0.34 compatible)
    3. FreeType Support enabled
    4. FreeType Linkage with freetype
    5. FreeType Version 2.2.1
    6. T1Lib Support enabled
    7. GIF Read Support enabled
    8. GIF Create Support enabled
    9. JPG Support enabled
    10. PNG Support enabled
    11. WBMP Support enabled
    12. XPM Support enabled
    13. XBM Support enabled

     

    Oui les autres graphes que  j'ai fait avec requete sql fonctionnent parfaitement

     

     
    Par Cyrano -  Le 11/05/2011 - 

    On aurait gagné du temps si tu avais commencé par préciser ce détail... parce que ça veut dire que l'erreur est dans le code de ce graphique là.

    Et puis je reviens sur un autre détail :  « En fait, chez OVH il faut installer sur son espace hébergement (dans le dossier qui contiendra ton site) une version de PHP. Cela se fait via FTP. » Ça, j'en doute fort, PHP est déjà installé sur les serveur de OVH, donc là, je ne sais pas de quoi tu parles. Or en décortiquant d'autres éléments, tu n'as nul besoin d'installer phpMyAdmin non plus puisqu'il est déjà fourni aussi. Quand on dit « installer », ça veut dire qu'on met en place le script ou l'application soi-même, qu'on en choisit la version et qu'on le configure soi-même, pas qu'on utilise celui qui est fourni.

    Ce serait utile que tu réalises bien que si on utilise pas le même langage, on va avoir du mal à se comprendre.

    Comme j'ai déjà dit, il n'est pas normal que ton code fonctionne sur ta machine et pas sur le serveur, d'autant moins si tu as bien configuré ton environnement en mode développement, donc en ajustant ton php.ini comme je te l'ai indiqué. Il y a donc forcément une différence entre ton application en local et celle en ligne, différence qu'il faut déterminer : ça peut être un problème d'inclusion de fichier par exemple : si un des fichier n'est pas trouvé et qu'il s'y trouve la valeur d'une variable utilisée dans le code de ton graphique, ça va planter. Resterait à savoir ce qui n'est pas défini et/ou pourquoi ta requête SQL ne retourne pas le résultat attendu. Je ne peux pas voir ce qui se passe durant tes tests. Lorsque tu fais un var_dump d'un élément quelconque, il serait utile que tu m'affiches tous les résultats obtenus ici : là par exemple, je n'ai vu aucune des requêtes générées, pas plus que je ne sais ce que tu as fait avec ce résultat...

    On fait de la logique, pure et simple, pas de la divination. Donc tu as du brûler une étape quelque part. 

     

     
    Par paintbox -  Le 11/05/2011 - 

    Hello Cyrano,

     

    Mon problème est résolu.

     

    En fait j'avais commis quelques erreurs à plusieurs niveaux :

     

     

    1. Dans ma base de données : comme c'est pour l'instant en test, et que j'avais complété certains champs manuellement, j'ai fait quelques erreurs. En fait pour un même code catégorie j'avais 2 intitulés de catégorie différents. Ce qui faussait mon total.
    2. Dans mon code : je me suis trompé dans le calcul total. Ce qui explique les différences de total obtenus .

     

    En fait j'ai resoumis ce matin mes requetes une par une et pris notes des résultats obtenus. Je me suis donc aperçus des anomalies obtenus.

     

    Ce qui m'a induit en erreur au départ c'est ce fameux message d'erreur que j'obtenais (Fatal error) dans PHPMyAdmin.

     

    Désolé de t'avoir fait perdre ton temps pour des erreurs aussi évidentes.

     

    Encore merci pour ton aide et ta patience.

     
    Par Cyrano -  Le 11/05/2011 - 

    Comme quoi, tu auras encore appris un truc : en programmation, il ne faut jamais se relâcher et toujours faire preuve de rigueur ;)

     

     
    Par paintbox -  Le 11/05/2011 - 

    J'avais pourtant essayé d'éliminer une par une les différentes possibilités d'erreur. Mais je n'ai pas pensé aller voir directement si au niveau de ma base, je n'avais pas commis dèjà des erreurs.

    Une bonne partie de mes erreurs vient encore de ma méthode de travail qui n'est pas encore assez méthodique.  

     
    Par  -  Le 07/01/2012 - 

    Thanks very good - Fantastic ugg boots for cheap

     

     

    Ajouter une réponse à la discussion

    Seuls les membres loggués sont autorisés à poster dans les forums !