Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > PDF
PDF Forum d'entraide sur la gestion dynamique de documents PDF avec PHP. Exemples : PDFLib, eZPdf, PhpToPdf... Avant de poster -> FAQ PDF et Cours PDF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/12/2010, 14h41   #1
Invité de passage
 
Inscription : janvier 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 5
Points : 0
Points : 0
Par défaut Illegal double '2e761' value found during parsing

Bonjour à tous,

Dans le cadre de mon boulot, je développe une application en PHP permettant de générer des rapports personnalisés en tapant dans une base de données MYSQL.

Concrètement, l'utilisateur va choisir les informations qu'il souhaite analyser et afficher dans le rapport et ensuite par le biais de requêtes SQL je vais chercher les infos. Je génère un fichier PDF en sortie grâce notamment à la libraire html2pdf. (transcription d'un script html en pdf)

Il est possible de générer des rapports sur des valeurs en fonction du temps pour suivre l'évolution de la donnée. C'est sur cette génération de rapport que j'obtiens l'erreur
Citation:
"Illegal double '2e761' value found during parsing".
Bizarrement cette erreur est apparue "toute seule", avant elle n'était pas présente. Elle n'empêche pas non plus l'exécution du script par contre je ne sais pas si elle génère des résultats erronés.

Voici le bout code qui va générer des graphiques temporels sur les données choisies (transformer en image jpeg). J'ai parcouru plusieurs forums et internet mais je n'ai malheureusement rien trouvé concernant mon souci.

Code :
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
 
    <?php
 
    if (isset($_GET['d']) && isset($_GET['f'])){
 
    //entrées utilisateur, dates et informations filtrées spécifiques
    $debut = $_GET['d'];
    $fin = $_GET['f'];   
    $filtre = $_SESSION['filtre'];
    $_filtre = $_SESSION['_filtre']; 
 
 
    $indicateursL1 = $_SESSION['indicateursL1'];
 
    //création du graphique pour chaque données
    for ($i = 0 ; $i<20 ; $i++){
        if (!empty($indicateursL1[$i])){
 
        $keycrypt = sha1("labonnecléquivabien");                                  
        $sql_indic = mysql_query("SELECT AES_DECRYPT(".$indicateursL1[$i].",".$keycrypt.") FROM indicateurs_l1 WHERE $filtre = '".mysql_real_escape_string($_filtre)."' AND (date BETWEEN '".mysql_real_escape_string($debut)."' AND '".mysql_real_escape_string($fin)."') GROUP BY date")or die(mysql_error());
        $row_indic = mysql_num_rows($sql_indic);
 
 
            for ($compteur1=0 ; $compteur1<mysql_num_rows($sql_indic) ; $compteur1++)
                  {
                     if( ($tab_indic[$compteur1] = mysql_result($sql_indic , $compteur1 , $indicateursL1[$i]))== 0){
                        $tab_indic[$compteur1] == 0;
                      }else{
                      $tab_indic[$compteur1] = mysql_result($sql_indic , $compteur1 , $indicateursL1[$i])or die(mysql_error());
                      }                 
 
                      $graph = new Graph(1000,300);
                      $graph->img->SetMargin(40,30,50,40);
                      $graph->SetScale("textlin");
                      $graph->SetShadow();
                      $graph->title->Set("Evolution temporelle de l'indicateur entre : ".$debut." et ".$fin."");   
 
 
                      // Afficher la grille de l'axe des ordonnées
                      $graph->ygrid->Show();
                      // Fixer la couleur de l'axe (bleu avec transparence : @0.7)
                      $graph->ygrid->SetColor('blue@0.7');
                      // Des tirets pour les lignes
                      $graph->ygrid->SetLineStyle('dashed');
 
                      // Afficher la grille de l'axe des abscisses
                      $graph->xgrid->Show();
                      // Fixer la couleur de l'axe (rouge avec transparence : @0.7)
                      $graph->xgrid->SetColor('red@0.7');
                      // Des tirets pour les lignes
                      $graph->xgrid->SetLineStyle('dashed');
 
 
                      // Créer une courbes
                      $courbe = new LinePlot($tab_indic);
                      // Afficher les valeurs pour chaque point
                      $courbe->value->Show();
 
                      // Valeurs: Apparence de la police
                      $courbe->value->SetFont(FF_ARIAL,FS_NORMAL,9);
                      $courbe->value->SetFormat('%d');
                      $courbe->value->SetColor("red");
 
                      // Chaque point de la courbe ****
                      // Type de point
                      $courbe->mark->SetType(MARK_FILLEDCIRCLE);
                      // Couleur de remplissage
                      $courbe->mark->SetFillColor("green");
                      // Taille
                      $courbe->mark->SetWidth(5);
 
                      // Couleur de la courbe
                      $courbe->SetColor("blue");
                      $courbe->SetCenter();
 
                      // Paramétrage des axes
                      $graph->xaxis->title->Set("Date");
                      $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
 
                      $sql_date = mysql_query("SELECT date FROM indicateurs_l1 WHERE $filtre = '".mysql_real_escape_string($_filtre)."' AND (date BETWEEN '".mysql_real_escape_string($debut)."' AND '".mysql_real_escape_string($fin)."') GROUP BY date");
 
                      for ($Compteur1=0 ; $Compteur1<mysql_num_rows($sql_date) ; $Compteur1++)
                          {
                              $data1x[]=mysql_result($sql_date , $Compteur1 , "date");
                          }
 
                      $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
                      $graph->xaxis->SetTickLabels($data1x);
 
                      // Ajouter la courbe au conteneur
                      $graph->Add($courbe);
                      $graph->SetImgFormat('jpeg',60);
 
                      $ind = $i + 1;
                      if (file_exists('./graph/temporel/indic_temp_L1_Ind'.$ind.'.jpeg'))
                        {
                           unlink('./graph/temporel/indic_temp_L1_Ind'.$ind.'.jpeg');
                        }
 
                      $graph->Stroke('./graph/temporel/indic_temp_L1_Ind'.$ind.'.jpeg');
 
               }  
 
 
        }
  }
 
 
 
 
 }
 
 
?>

Si vous avez déjà rencontré ce problème, si vous avez des éléments de solutions n'hésiter pas. Il se peut sûrement qu'une erreur dans le code ait généré ce
Citation:
"Illegal double '2e761' value found during parsing".
Merci de votre aide par avance.

Cordialement,

Flogo
flogo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 14h52   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
De quel type d'erreur s'agit-il ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 15h00   #3
Invité de passage
 
Inscription : janvier 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 5
Points : 0
Points : 0
Bonjour,

Ben double est un type de variable primitif codé sur 8 octets il me semble (comme l'est float, integer en terme de variables primitives pas codés sur 8 octets ). La référence 2e761 de l'erreur je ne la trouve pas. Concrètement, le moteur ne doit pas arriver à parser à cause d'un type de variable non adapté. Cependant, je trouve cela étrange que cette erreur se soit révélée après plusieurs tests sur le script.
Je pense qu'elle a pu apparaitre dès lors que j'ai chiffré les données de la base avec des AES_ENCRYPT et AES_DECRYPT ce qui fait que la valeur récupérée dans la base est vue comme "farfelue" pour le moteur. C'est une des pistes que je regarde actuellement entre autres.

Cordialement,

Flogo
flogo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 15h04   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Je demandais si c'etait une erreur PHP, un plantage apache, une erreur fournie par HTML2PDF ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 15h06   #5
Invité de passage
 
Inscription : janvier 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 5
Points : 0
Points : 0
C'est clairement pas une erreur HTML2PDF déjà, la transformation n'intervient pas à ce niveau.
C'est une erreur liée à PHP.
flogo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 15h15   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Non mais c'est une erreur affichée par PHP ou par autre chose ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 15h27   #7
Invité de passage
 
Inscription : janvier 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 5
Points : 0
Points : 0
Humm, l'erreur apparaît après avoir cliqué sur un bouton "OK" quand l'utilisateur choisi les dates de début et de fin pour la génération du graphique.

Le choix des dates se fait via un calendar en javascript. Vous m'avez fait penser que peut être l'erreur proviendrait de ce calendar en javascript lors de la validation des dates ...

Pour informations dans le même fichier .php cité précédemment se trouve aussi ce bout de code au début :

Code :
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
 
<script type="text/javascript">//<![CDATA[
Calendar.setup({
    cont          : "calendar-container",
    weekNumbers   : true,
    selectionType : Calendar.SEL_MULTIPLE,
    selection     : Calendar.dateToInt(new Date()),
    showTime      : 12,
    onSelect      : function() {
        var count = this.selection.countDays();
        if (count == 1) {
            var date = this.selection.get()[0];
            date = Calendar.intToDate(date);
            date = Calendar.printDate(date, "%A, %B %d, %Y");
            $("calendar-info").innerHTML = date;
        } else {
            $("calendar-info").innerHTML = Calendar.formatString(
                "${count:no date|one date|two dates|# dates} selected",
                { count: count }
            );
        }
    },
    onTimeChange  : function(cal) {
        var h = cal.getHours(), m = cal.getMinutes();
        // zero-pad them
        if (h < 10) h = "0" + h;
        if (m < 10) m = "0" + m;
        $("calendar-info").innerHTML = Calendar.formatString("Time changed to ${hh}:${mm}", {
            hh: h,
            mm: m
        });
    }
});
 
//]]></script>
 
<table style="float: left; margin: 0 1em 1em 0"><tr><td>
 
  <!-- element that will contain the calendar -->
  <div id="calendar-container">
            <tr>
              <td class="label">
                <label for="f_rangeStart">Debut&nbsp;:&nbsp;</label>
              </td>
              <td>
                <!--<form method="POST">-->
                <input id="f_rangeStart" name="f_rangeStart" value="2010-02-01"/>
                <!--<input type="submit" value="valider" /> -->
                <!--</form> </td><td>-->
                <button id="f_rangeStart_trigger">...</button>
                <button id="f_clearRangeStart" onclick="clearRangeStart()">effacer</button>
                <script type="text/javascript">
                  new Calendar({
                          inputField: "f_rangeStart",
                          dateFormat: "%Y-%m-%d",
                          trigger: "f_rangeStart_trigger",
                          bottomBar: true,
                          onSelect: function() {
                                  var date = Calendar.intToDate(this.selection.get());
                                  LEFT_CAL.args.min = date;
                                  LEFT_CAL.redraw();
                                  this.hide();
                          }
                  });
                  function clearRangeStart() {
                          document.getElementById("f_rangeStart").value = "";
                          LEFT_CAL.args.min = null;
                          LEFT_CAL.redraw();
                  };
                </script>
 
              </td>
            </tr>
 
 
 
             <tr>
              <td class="label">
                <label for="f_rangeEnd">Fin&nbsp;:&nbsp;</label>
              </td>
              <td>
                <!--<form method="POST">-->
                <input id="f_rangeEnd" name="f_rangeEnd" value=""/>
                <!--<input type="submit" value="valider" /> -->
                <!--</form> </td><td>-->
                <button id="f_rangeEnd_trigger">...</button>
                <button id="f_clearRangeEnd" onclick="clearRangeEnd()">effacer</button>
                <script type="text/javascript">
                  new Calendar({
                          inputField: "f_rangeEnd",
                          dateFormat: "%Y-%m-%d",
                          trigger: "f_rangeEnd_trigger",
                          bottomBar: true,
                          onSelect: function() {
                                  var date = Calendar.intToDate(this.selection.get());
                                  LEFT_CAL.args.min = date;
                                  LEFT_CAL.redraw();
                                  this.hide();
                          }
                  });
                  function clearRangeEnd() {
                          document.getElementById("f_rangeEnd").value = "";
                          LEFT_CAL.args.min = null;
                          LEFT_CAL.redraw();
                  };
                </script>
 
              </td>
            </tr>
 
            <tr>
            <td>
              <script type="text/javascript">
            function readDate(){
              var fin = document.getElementById("f_rangeEnd");
              var debut = document.getElementById("f_rangeStart");
              top.document.location = "index.php?page=lapagequivabien&d="+debut.value+"&f="+fin.value;            
           }     
            </script>
            <input type="button" onclick="readDate()" value="OK">  
            </td>
            </tr>
 
          </div>

Ce qui me met la puce à l'oreille c'est que devant le message d'erreur je ne vois pas de "notice", "warning" ou tout autre attribut d'affichage d'erreurs communes en PHP avec le numéro de la ligne. Généralement quand j'ai une erreur PHP, on obtient un truc du genre :
Citation:
Notice: Undefined offset on ligne xx.
Dans ce cas, il y a seulement marqué à coté du bouton "OK" de validation
Citation:
"Illegal double '2e761' value found during parsing"
pas de numéro de lignes non plus.

Alala, je commence à m'embrouiller l'esprit avec toutes ces probables sources d'erreur. =)

Cordialement,

Flogo


PS: le code js du calendar est un code disponible à tout utilisateur. Cela s'appelle jsCal2.

[Edit] Un screen shot de l'apparition de l'erreur sur le GUI est disponible en pièce jointe.

En fait, si vous voulez le fichier php complet où l'erreur se génère, veuillez me le demander par mp, je ne voudrais pas le diffuser entièrement comme ca directement sur le forum .
Images attachées
Type de fichier : jpg ErreurIllegalDouble.jpg (10,7 Ko, 4 affichages)
flogo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 10h51   #8
Invité de passage
 
Inscription : janvier 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 5
Points : 0
Points : 0
Bonjour,

Après quelques tests, il s'avère que l'erreur proviendrait de la récupération des données chiffrées en base via la requete

Code :
$sql_indic = mysql_query("SELECT AES_DECRYPT(".$indicateursL1[$i].",".$keycrypt.") FROM indicateurs_l1 WHERE $filtre = '".mysql_real_escape_string($_filtre)."' AND (date BETWEEN '".mysql_real_escape_string($debut)."' AND '".mysql_real_escape_string($fin)."') GROUP BY date")or die(mysql_error());
En effet, en testant sans AES_DECRYPT sur des données en claires, l'erreur n'apparait pas.
A voir si cela n'est que temporaire mais c'est une piste à explorer.

Cordialement,

Flogo
flogo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h43.


 
 
 
 
Partenaires

Hébergement Web