des graphiques en php c possible ?

des graphiques en php c possible ? - PHP - Programmation

Marsh Posté le 27-12-2002 à 09:35:31    

:hello:  
bon pour faire des histogrammes y a pas de pb mais c'est possible de faire des "courbes" en php (ie : tracer une ligne entre 2 points) , sans installer GD si possible parceque ca m'a l'air assez complexe ...


Message édité par kayasax le 27-12-2002 à 09:36:54
Reply

Marsh Posté le 27-12-2002 à 09:35:31   

Reply

Marsh Posté le 27-12-2002 à 09:39:07    

kayasax a écrit :

:hello:  
bon pour faire des histogrammes y a pas de pb mais c'est possible de faire des "courbes" en php (ie : tracer une ligne entre 2 points) , sans installer GD si possible parceque ca m'a l'air assez complexe ...


 
Oui c 'est possible : ça fait longtemps que j'en ai pas fait mais ça existe. Par contre tu auras un pb si tu veux les faire en GIF (vecu)

Reply

Marsh Posté le 27-12-2002 à 09:41:35    

mais à part ca ?

Reply

Marsh Posté le 27-12-2002 à 09:43:26    

Sans GD, c'est chaud, mais il semble me souvenir qu'un gars avait développé un librairie en PHP pour faire comme GD parque-que sont hébergeur ne proposait pas GD.
 
Quand à savoir où trouver çà, je n'en ai plus aucune idée !
 
Donc, pour conclure :
 
Oui, c'est possible !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 27-12-2002 à 09:43:38    

kayasax a écrit :

mais à part ca ?


 
Je peux pas trop t'aider en fait, faut que tu demandes à Joce (MP) lui il aura certainement la solution

Reply

Marsh Posté le 27-12-2002 à 09:44:09    

sans gd je dirais que c'est soit impossible soit très très chiant à faire des courbes..
 
c'est comme vouloir planter des clous (tes courbes) sans marteau (la GD)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 27-12-2002 à 09:45:33    

bon...mais d'apres ce que je comprends il faut compiler la gd or mon serveur est sous win et moi y'en a pas de compilo :( ...

Reply

Marsh Posté le 27-12-2002 à 09:46:41    

Ben si t'es sous win, t'as mis quoi comme PHP ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 27-12-2002 à 09:46:45    

bin tu peux en récupérer une compilée pour ta version de php, suffit de rechercher gd.dll + ta version de php :)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 27-12-2002 à 09:47:25    

ok merci !  :jap:

Reply

Marsh Posté le 27-12-2002 à 09:47:25   

Reply

Marsh Posté le 27-12-2002 à 09:48:29    

En fait, y'a même des chances que tu l'ai déjà !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 27-12-2002 à 09:49:51    

Mara's dad a écrit :

En fait, y'a même des chances que tu l'ai déjà !


dans la distrib ? j'ai meme pas regardé en fait ...
 
edit a ben t'as raison le phpinfo m'informe que la gd est enable  :o


Message édité par kayasax le 27-12-2002 à 09:51:01
Reply

Marsh Posté le 27-12-2002 à 11:11:47    

Tiens, ça serait pas possible de générer du svg?
 
Sinon pour gd, le gif est inutile vu qu'il y a le png.


---------------
Boulay officiel : asphro
Reply

Marsh Posté le 27-12-2002 à 11:15:12    

merci à ceux qui m'ont aidé jusqu'a present.
j'ai deux question :
l'utilisation de GD fait elle perdre de la qualite aux images (png en l'occurence) ?? car j'ai une texture et si je fais un imagecreatefrompng() et un Imagestring() (insertion de texte dans l'image) la texture devient toute dégueu  :??:  
 
sinon donc pour tracer mes graphs j'en suis la :
 


<?
if(empty($largeur)) $largeur = 600;
if(empty($hauteur)) $hauteur = 200;
$img = ImageCreate($largeur,$hauteur);
$couleurFond = ImageColorAllocate($img,255,255,255);
$couleurTexte = ImageColorAllocate($img,255,0,0);
$black=ImageColorAllocate($img,0,0,0);
 
ImageLine($img,0,0,0,$hauteur,$black);  //axe ordonnee
ImageLine($img,0,$hauteur,$largeur,$hauteur,$black);  //axe abscisse
 
$tab=array("50","70","80","60","20","15","50" );//les donnees
 
$nb=sizeof($tab);
$nb--;  
$i=0;
$x=20;
while($i<$nb)  
{ //creation des point echelle 100%=200 px
ImageLine($img,$x,($hauteur - 2*$tab[$i]),$x+20,($hauteur -2*$tab[$i+1]),$couleurTexte);  
$i++;
$x=$x+20;
}
 
header("Content-Type: image/png" );  
ImagePng($img);
 
?>


 
Ca marche pas mal mais l'axe des abscisse ne s'affiche pas je comprends pas pkoi .
 
sinon question + ou - liée comment on insere le resultat d'une requete dans un tableau ? (un enregistrement par ligne, un champs par colone)  
 
 encore :jap:

Reply

Marsh Posté le 27-12-2002 à 11:41:30    

te casse pas trop la tête ;)
http://www.aditus.nu/jpgraph/
une bibliothèque de classes php pour créer des graphiques facilement.
c très puissant


---------------
...oups kernel error...
Reply

Marsh Posté le 27-12-2002 à 12:04:51    

ok Ethernal ca a l'air pas mal en effet .
 
Sinon pour stocker le resu d'une requete dans un tabeau tu peux m'aider stp ?
 
while($nb=mysql_fetch_array($resu))
{
?? each ..???  [:titprem]  
}
 

Reply

Marsh Posté le 27-12-2002 à 12:24:08    

while($nb=mysql_fetch_array($resu))  
{  
echo $nb['key1']. ' '.$nb['key2];
}  
 
il est dans un tableau...
tu veux le mettre dans un autre ?
 
//la clé d'accès est l'id de l'enreg (en général c'est plus facile)
//si tu ne veux pas de clés d'accès, regarde sur php.net mysql_fetch_array($result, args) --> accès par clé ou numéro
while($nb=mysql_fetch_array($resu))  
{  
  $tab[$nb['id']]= $nb;
}  
//affichage
while(list($key,$row)=each($tab)){
  echo $key. ' '. $row['key1'].' '.$row['key2'];
}
 
faut voir ce que tu veux réellement


Message édité par ethernal le 27-12-2002 à 12:26:08

---------------
...oups kernel error...
Reply

Marsh Posté le 27-12-2002 à 12:37:13    

heu en fait je me perd un peu, je crois que je vais laisser reposer tt ca et je reprendrai la semaine prochaine
 
en fait ce que je veux :
g une table qui contient le % d'espace dique libre sur mes serveurs avec des dates
et je veux avoir le graph de l'evolution de cet espace libre (1 graph par serv.)  
 
-> select * from ma table order by nom,date
si nom du seveur != nom d'avant ->  nouveau graph
sinon => inserer dans un tableau la date et le % d'espace libre
faire le graph avec valeurs du tableau
 
c'est sur la ligne en rouge que je scotche un peu a chaque fois je me prends la tete avec each foreach ...  

Reply

Marsh Posté le 27-12-2002 à 12:55:17    

Code :
  1. $query= "select * from ma_table order by nom,date";
  2. $result= mysql_query($query);
  3. while ($row= mysql_fetch_array($result)){
  4. $tab[$row['server_id']][$row['date']= $row['free'];
  5. }
  6. //tu as donc un tableau à 3 dimensions :
  7. // $tab["server"]= array("date" => "free" )
  8. while(list($server,$tab2)= each($tab)){
  9. //create image
  10.   while(list($date,$free)= each($tab2)){
  11.     //generate image
  12.     echo "$server : $date -> $free";
  13.   }
  14. //save image
  15. }


 
 
ou bien, pas besoin de tableau intermédiaire
 

Code :
  1. $query= "select * from ma_table order by nom,date";
  2. $result= mysql_query($query);
  3. $prec_server='';
  4. while ($row= mysql_fetch_array($result)){
  5.   if($prec_server!=$row['server']){
  6.     if ($prec_server!='')
  7.      {
  8.        //save_image_prec_serv  
  9.      }
  10.     //create_image
  11.     $prec_server= $row['server'];
  12.   }
  13.   //generate_image
  14. }
  15. //save_image_prec_serv


Message édité par ethernal le 27-12-2002 à 13:12:15

---------------
...oups kernel error...
Reply

Marsh Posté le 27-12-2002 à 13:30:48    

whaou quel service : je rentre de manger et tu m'as tout fé !!
je comprends pas trop le 2eme script, le 1er ok et il me manquait la 3eme dimension à mon tablo c pour ca que je galerai =)
 
un grand merci ! ++
 
 
edit euh non en fait je capte pas trop ce que tu fais...
peux tu detailler ces 2 instructions stp ?  il sort d'ou le tab2 ?:
while(list($server,$tab2)= each($tab)){
//create image
 while(list($date,$free)= each($tab2)){
   //generate image


Message édité par kayasax le 27-12-2002 à 13:41:09
Reply

Marsh Posté le 27-12-2002 à 14:21:10    

$tab2 n'existe pas, il est issus de la décomposition de $tab
comme qd tu as $tab[key]= "val";
tu fais list($key, $val)= each($tab);
si tu as un tableau comme valeur
$tab[key]= array('tt','yy';);
tu fais list($key, $tab2)= each($tab);
$tab2 est la valeur du tableau $tab pour la clé "key" et est un tableau
 


---------------
...oups kernel error...
Reply

Marsh Posté le 27-12-2002 à 14:21:32    

si je te dis que  
while(list($server,$tab2)= each($tab)){  
 
équivaut à
 
foreach ($tab AS $server => $tab2) {
 
ça va mieux ? ;)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 27-12-2002 à 14:23:45    

voila Sh@rdar l'explique encore mieux  [:theblob]


---------------
...oups kernel error...
Reply

Marsh Posté le 27-12-2002 à 15:09:42    

mouais ...bon je laisse tomber les dates et tableaux a mutli dimension pour le moment...
 
voila ou j'en suis suite a vos conseils :


include ("src/jpgraph.php" );  
include ("src/jpgraph_line.php" );  
 
$con=mysql_connect('localhost','root','');
$db=mysql_select_db('tabbord',$con);
$sql="select * from histo order by nom,date";
$resu=mysql_query($sql);
$serv_prec='';
$i=0;
 
while($nb=mysql_fetch_array($resu))
{
if($nb[nom]!=$serv_prec) //nouveau serveur
 {
 $i=0;
 if($serv_prec!='')//si on a traite au moins un serveur
 {
 
$graph = new Graph(600,300);     //on cree le graph du serv. precedent
 $graph->SetScale("textlin" );  
 // On créé un tracé  
 $lineplot=new LinePlot($tab);  
 // On ajoutte ce tracé au graph  
 $graph->Add($lineplot);  
 // On affiche le graphique  
 $graph->Stroke();  
 
 
 reset($tab);
 $tab[$i]=$nb[p_free]; //on remplit le tab. pour le nouveau serveur
 $i++;
 }
 
 $tab[$i]=$nb[p_free];
 $serv_prec=$nb[nom];
 $i++;
 
 }
else
{  
$tab[$i]=$nb[p_free];
$i++;
}
}


Ca marche impec mais uniquement pour mon 1er serveur :??: , je pense que je merdoie avec jpgraph mais ou ..??

Reply

Marsh Posté le 27-12-2002 à 15:16:25    

tu dois encore sauver l'image après la boucle.
regarde mon algo précédent.
 
-> après ta boucle  
while($row= ...){
}
$graph = new Graph(600,300);     //on cree le graph du serv. precedent  
$graph->SetScale("textlin" );  
// On créé un tracé  
$lineplot=new LinePlot($tab);  
// On ajoutte ce tracé au graph  
$graph->Add($lineplot);  
// On affiche le graphique  
$graph->Stroke();  


---------------
...oups kernel error...
Reply

Marsh Posté le 27-12-2002 à 15:24:20    

:pt1cable:  [:sharpknife]  
désolé ethernal mais meme en rajoutant ce code apres le while je n'ai que le graph de mon 1er serveur ,
 
ce n'est pas parce que je crée des graphs de meme nom a chaque occurence de ma boucle while ?? ($graph = new Graph(600,300); )
-> faut pas donner un nom different a chaque graph ??
 
sinon g essaye ca :


while($nb=mysql_fetch_array($resu))
{
if($nb[nom]!=$serv_prec) //nouveau serveur
 {
 $i=0;
 if($serv_prec!='')//si on a traite au moins un serveur
 {


echo "<img src=\"dessin.php?tab=$tab\">";

 
 reset($tab);
 $tab[$i]=$nb[p_free]; //on remplit le tab. pour le nouveau serveur
 $i++;
 }
 
 $tab[$i]=$nb[p_free];
 $serv_prec=$nb[nom];
 $i++;
 
 }
else
{  
$tab[$i]=$nb[p_free];
$i++;
}
}


 
et dans dessin.php


<?
//echo $tab;
include ("src/jpgraph.php" );  
include ("src/jpgraph_line.php" );  
 
$graph = new Graph(600,300);     //on cree le graph du serv. precedent
 $graph->SetScale("textlin" );  
 // On créé un tracé  
 $lineplot=new LinePlot($tab);  
 // On ajoutte ce tracé au graph  
 $graph->Add($lineplot);  
 // On affiche le graphique  
 $graph->Stroke();  
 
?>


 
=> La j'ai le bon nombre d'image mais les graphs ne sont pas crées (pb envoie du tableau en parametre ?)


Message édité par kayasax le 27-12-2002 à 15:34:55
Reply

Marsh Posté le 27-12-2002 à 15:47:26    

tu as sans doute raison, je n'ai jamais utilisé jpgraph donc je ne sais pas trop comment ça fct.
graph->stroke() fait koi ? génère une image ? ou envoi un header d'affichage etc ? je vois pas trop  :cry:  
tu dois qd même faire un echo pour afficher non ?
 
donner un autre nom est sans doute une bonne idée  
$graph[] = new Graph(600,300);
ou  
$graph[$row['server']] = new Graph(600,300);
 


---------------
...oups kernel error...
Reply

Marsh Posté le 27-12-2002 à 15:47:46    

pour le passsage du tableau en parametre g trouve :
 
echo "<img src=\"dessin.php?";
while($i<sizeof($tab))
{echo"tab[$i]=$tab[$i]&";
$i++;}
echo "\">";
 
donc g le bon nombre de graphs les bonnes données mais chaque graph se cumule au précedent c lié a quoi ?? (meme en donant un nom different a chqe grqphe)
=> reset($tab) vide bien le tableau pourtant  non ??


Message édité par kayasax le 27-12-2002 à 15:50:18
Reply

Marsh Posté le 27-12-2002 à 16:06:09    

je sais pas trop à quoi c'est du (là je suis en plein préparatif pour partir au ski :D)
 
reset($tab) remet le curseur de lecture au début
$tab= array(); initialise à un tableau vide
 
sinon pour simplifier utilise serialize($tab) pour le faire passer dans l'url et unserialize($tab) pour le récupérer dans dessin.php


Message édité par ethernal le 27-12-2002 à 16:08:54

---------------
...oups kernel error...
Reply

Marsh Posté le 27-12-2002 à 16:11:42    

ethernal a écrit :

je sais pas trop à quoi c'est du (là je suis en plein préparatif pour partir au ski :D)
 
reset($tab) remet le curseur de lecture au début
$tab= array(); initialise à un tableau vide
 
sinon pour simplifier utilise serialize($tab) pour le faire passer dans l'url et unserialize($tab) pour le récupérer dans dessin.php


 :jap: , bon w-e et bon ski !! moi c la semaine prochaine j'espere que le temps va se refroidir !!!  
 :hello:

Reply

Marsh Posté le 27-12-2002 à 16:15:26    

Code :
  1. $serv_prec='';
  2. while($nb=mysql_fetch_array($resu))
  3. {
  4.   if($nb[nom]!=$serv_prec) //nouveau serveur
  5.   {
  6.     if($serv_prec!='')//si on a traite au moins un serveur
  7.     {
  8.       echo '<img src="dessin.php?tab='. serialize($tab).'">';
  9.     }
  10.     $i=0;
  11.     $tab= array();
  12.     $serv_prec=$nb[nom];
  13.   }
  14.   $tab[$i]=$nb[p_free];
  15.   $i++;
  16. }
  17. echo '<img src="dessin.php?tab='. serialize($tab).'">';


Message édité par ethernal le 27-12-2002 à 16:25:21

---------------
...oups kernel error...
Reply

Marsh Posté le 27-12-2002 à 16:16:23    

kayasax a écrit :


 :jap: , bon w-e et bon ski !! moi c la semaine prochaine j'espere que le temps va se refroidir !!!  
 :hello:  


 
thx :)  :hello:  
on se croisera peut-être :D
je vais à La Plagne
a+


---------------
...oups kernel error...
Reply

Marsh Posté le 27-12-2002 à 16:50:31    


 
/!\ JPGraph est sous licence QPL, ce qui signifie que si tu fais un site perso (sans revenu quelconque), ou un truc pour un projet opensource ca va, mais si c'est pour un projet commercial, un site web de société ou quoi que ce soit d'autre, tu dois payer une jolie licence.
 


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 27-12-2002 à 16:52:08    

Zion a écrit :


 
/!\ JPGraph est sous licence QPL, ce qui signifie que si tu fais un site perso (sans revenu quelconque), ou un truc pour un projet opensource ca va, mais si c'est pour un projet commercial, un site web de société ou quoi que ce soit d'autre, tu dois payer une jolie licence.
 
 


bof... c'est pour l'intranet au boulotn, merci qd meme de la precision  ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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