Parse (cannot redeclare parseP). Deux graphiques.

Fermé
Cass - Modifié par jordane45 le 5/01/2016 à 14:43
 Cass - 6 janv. 2016 à 11:46
Bonjour,


ce message d'erreur s'affiche lorsque j'ouvre ma page.
Je souhaite pouvoir mettre deux graphiques l'un en dessous de l'autre avec deux courbes différentes mais sur le même "fond de graphique". Chacun de mes graphiques fonctionne indépendamment mais dès que j'essaie de mettre les deux sur la même page le message d'erreur apparait.
.
Fatal error: Cannot redeclare parseP() (previously declared in /home/eptboise/www/components/com_jumi/files/graph_h_etreaupont.php:42) in /home/eptboise/www/components/com_jumi/files/graph_p_etreaupont.php on line 76

.
Le problème c'est qu'en inscrivant deux fois ma fonction parse, elle ne peut pas etre redéclarer. Mais je ne peut pas changer de nom ni supprimer la définition de la fonction.
Comment faire pour garder le même parse sur deux graphiques distincts?
.
Voici mes lignes de code, merci de votre aide.

.
.
$url="http://www.eptb-oise.com/ftp/thon.csv"; //chemin du fichier de données //hauteurs.csv , pluviometrie.csv  

//$url="localhost/oa/Prois_am.csv"; //chemin du fichier de données //hauteurs.csv , pluviometrie.csv  
$site=1; // site utilisé par l'applet


function parseP($url,$site){
 $tab = file($url);
 $last_ligne = $tab[count($tab)-1];
 //echo $last_ligne;
 $temp=explode(";",$last_ligne);
 $derniere_date = $temp[0];
 

 $handle =@fopen($url, "rb");
 if($handle){
  $current_line=0;
  $data=array();
  $max=NULL;
  $h_temp;
  $date_temp;
  $deb_found = false;
  $date_deb;
  //$derniere_date = date('d-m-Y H:00:00');
  //echo "fin=".$derniere_date;
  while(($line=fgets($handle))!==false){
    if($current_line>=0){ // lecture des données à partir de ligne 3 du fichier
     $temp=explode(";",$line);
     //echo $temp[0]."   -    ";
     $temp[0] = date('Y-m-d H:i:00',strtotime($temp[0]));
     if(strpos($temp[$site],'?') != true){
            
        echo "['".$temp[0]."',".$temp[$site]."],";
      
     }
     $current_line++;
     
    }
  }
 }
}
?>

<script>

document.documentElement.setAttribute('lang', 'fr');
$(document).ready(function(){
var line1=[
  <?parseP($url,$site);?>
   ];

   //var line1=[['2008-08-12 4:00PM',4], ['2008-09-12 4:00PM',6.5], ['2008-10-12 4:00PM',5.7], ['2008-11-12 4:00PM',9], ['2008-12-12 4:00PM',8.2]];
  $.jqplot.config.enablePlugins = true;
  var plot1 = $.jqplot('chartdiv', [line1], {
        title: 'Guise',
        
  
        axes: {
            xaxis: {
                renderer:$.jqplot.DateAxisRenderer,
                tickRenderer: $.jqplot.CanvasAxisTickRenderer,
                tickOptions: {
                  angle: -30
                },
    labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
    
    
            },
            yaxis: { 
                min:0, 
    tickOptions:{
                labelPosition: 'middle',
    fontSize: '10pt',
                angle:-30
    }, 
    labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
    labelOptions:{
     fontFamily:'Helvetica',
     fontSize: '14pt'
    },
    label:'Niveau d\'eau en mètres'
            }
        },
  highlighter: {
                    show: true,
                    showMarker:true,
                    showTooltip:true,
                    sizeAdjust: 10,
                    tooltipLocation: 'n',
                    tooltipAxes: 'xy',
                    yvalues: 1,
                    formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>PiecesPerHour:</td><td align="right">%s</td></tr></table>',
                    useAxesFormatters: true,
     
                    tooltipContentEditor: function(str, seriesIndex, pointIndex, plot){
                        var data = plot.series[seriesIndex].data[pointIndex];
                        
                        var format = [];
                        //A little formatting to the data before I join it to the Html string
                        
                          

                        //join the data to the Html string:
      var d = $.formatDateTime('h:ii',new Date(data[0] ));
                        str = '<font size="6">'+data[1]+"m à "+d+"</font>";
                        return str;
                    }
               },
        cursor:{
            show: true,
            zoom: true,
   constrainZoomTo: 'x'
        }
    });

});
  
</script>




EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
5 janv. 2016 à 14:46
Bonjour,

Tu peux vérifier si la fonction existe AVANT de la "re" créer pour éviter cette erreur

if (!function_exists('parseP')) {

  function parseP($url,$site){
   $tab = file($url);
   $last_ligne = $tab[count($tab)-1];
   //echo $last_ligne;
   $temp=explode(";",$last_ligne);
   $derniere_date = $temp[0];
 
   $handle =@fopen($url, "rb");
   if($handle){
     $current_line=0;
     $data=array();
     $max=NULL;
     $h_temp;
     $date_temp;
     $deb_found = false;
     $date_deb;
     //$derniere_date = date('d-m-Y H:00:00');
    //echo "fin=".$derniere_date;
    while(($line=fgets($handle))!==false){
      if($current_line>=0){ // lecture des données à partir de ligne 3 du fichier
        $temp=explode(";",$line);
        //echo $temp[0]."   -    ";
        $temp[0] = date('Y-m-d H:i:00',strtotime($temp[0]));
        if(strpos($temp[$site],'?') != true){           
          echo "['".$temp[0]."',".$temp[$site]."],";      
        }
      $current_line++;
     
      }
    }
   }
  }

} 



0
Merci beaucoup pour la réponse!

Effectivement le message d'erreur n'est plus là. Par contre mes graphiques se superposent sur le même fond. Les repères des axes ainsi que le titre du graphique sont notés au même endroit, ce qui donne une graphique assez illisible! Et il n'y a qu'une seule courbe...
On dirait que la fonction parseP existant déjà le second graphique l'utilise .

Une idée?
0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703 > Cass
5 janv. 2016 à 16:00

On dirait que la fonction parseP existant déjà le second graphique l'utilise

Heu..oui... c'est le principe des fonctions.....

Et de quel second graphique parles tu ?

A mon avis tu ne nous as pas donné le code complet de ta page.....
0
Effectivement il doit manquer des précisions.

En fait sur le site internet il y a seulement deux lignes

{jumi [components/com_jumi/files/graph_h_etreaupont.php]}

{jumi [components/com_jumi/files/graph_p_etreaupont.php]}

Ensuite chaque graphique se reporte aux codes données ci-dessus. Les codes sont donc répétés deux fois sur deux pages de codes différentes. Mais par conséquent sur le site internet au lieu de se séparer les deux graphiques restent superposés.
0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
6 janv. 2016 à 10:06
Ton Script, visiblement, cible une div dont l'id est : chartdiv
... et donc... à chaque fois que tu appeles ce code... il alimente LA div dont l'id est chartdiv
(* un id devant, par convention, être UNIQUE ).

Il faut modifier ton code pour choisir dans quelle DIV il doit mettre le graphique.
Pour se faire, je pense que "transformer" ton code Javascript en FONCTIONS et passer des paramètres (tel que l'ID où mettre le graphique) serait le bienvenue...





0
Oulala... ça devient vraiment trop compliqué pour moi. J'ai préféré abandonné cette solution et j'ai copié le format de code d'un autre graphique. Disons que ça marche même si c'était pas comme ça que je voulais faire à l'origine!!

Merci pour toutes tes réponses jordane45!!

Pour info le code que j'ai mis



require_once("./graph/fcts.php"); // la fonction php de parse des fichiers

$url="http://www.eptb-oise.com/ftp/oise.csv"; //chemin du fichier de données //hauteurs.csv , pluviometrie.csv
$site=1; // site utilisé par l'applet
$crueRef1=0; // pour que le seuil n'apparaisse pas mettre la valeur à 0
$crueRef2=1.3;
$crueRef3=0;
$data=parse($url, $site);
?>

<APPLET CODE="graph_zero.class" CODEBASE="http://www.eptb-oise.com/graph/" WIDTH="450" HEIGHT="400" style="border:1px solid gray">

<PARAM name="label1" value="Hauteur d'eau en m">
<PARAM name="label2" value="Temps en heures">
<PARAM name="borne" value="0.2">

<PARAM name="data" value="<?php echo $data["data"] ?>">
<PARAM name="date" value="<?php echo $data["date"] ?>">
<PARAM name="hour" value="<?php echo $data["hour"] ?>">

<PARAM name="crueRef1" value="<?php echo $crueRef1 ?>">
<PARAM name="crueRef2" value="<?php echo $crueRef2 ?>">
<PARAM name="crueRef3" value="<?php echo $crueRef3 ?>">

</APPLET>

0