zeldoi5
Messages postés58Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention13 novembre 2005
-
30 mars 2005 à 15:36
zeldoi5
Messages postés58Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention13 novembre 2005
-
31 mars 2005 à 18:05
Bonjour tout le monde, je ne sais pas si le titre est suffisemment évocateur, mais je voudrais passer le résultat de requêtes SQL (sur ma base MySQL) en paramètre d'entrée d'un fichier PHP : cela est il possible?
Pour que vous compreniez, voici mon code :
//Code de conenxion au serveur de BDD
$idConnexion = mysql_connect($myServer, "", "");
$connexionReussie = mysql_select_db($myDB) or die("Impossible de se connecter à la base de données $myDB. ");
//Requêtes SQL (basiques!)
$query = "select AVG(TR) from mesure_lan";
$query2 = "select AVG(TR) from mesure_messagerie";
$query3 = "select AVG(TR) from mesure_connect";
Je vais coller ici les sources des scripts que j'ai utilisé, afin que les personnes ne comprenant pas le passage d'argument/fonctions PHP puissent comprendre comment faire.
Je tiens à remercier malalam qui a pris le temps d'essayer de comprendre ce que j'écrivais.
Fichier HTML qui utilise les scripts PHP :
<html>
<head>
<title>Essai de représentation Stats via MySQL/PHP</title>
</head>
<center>
Une page PHP générée dynamiquement à partir de requêtes SQL
A chaque fois que vous rafraîchissez la page, l'heure change.
</html>
Fichier essais_requête2.php, fichier de script PHP :
<?php
header ("Content-type: image/png");
include 'bdd.inc.php';
include 'radar.inc.php';
//Etablit la connexion avec le serveur de base de données, ainsi qu'à la base
server_connect("localhost","","");
//Etablit la connexion à la base de données
bdd_connect("hyperclick");
/*Requête SQL*/
$query = "select AVG(TR) from mesure_lan";
$query2 = "select AVG(TR) from mesure_messagerie";
$query3 = "select AVG(TR) from mesure_connect";
/* EXECUTION DES REQUETEE QUERY, QUERY2 et QUERY3*/
$result = mysql_query($query);
$result2 = mysql_query($query2);
$result3 = mysql_query($query3);
/* TESTS SI LES REQUETES ONT ETE EFFECTUEES
if ($result) echo " Requête $query réussie.
" ;
else echo " Requête $query ratée.
";
if ($result2) echo " Requête $query2 réussie.
";
else echo " 'Requête $query2 ratée.
' ";
if ($result3) echo " Requête $query3 réussie.
$radar3=radar_3axis("$row[0]","$row2[0]","$row2[0]","TITRE PRINCIPAL","Titre 1","Titre 2","Titre 3",Titrede la légende",300,500);
?>
Fichier de
function qui sert à construire le radar (ex radar.php) :
include ("../jpgraph/jpgraph.php");
include ("../jpgraph/jpgraph_radar.php");
# création de radar à 3 branches
function radar_3axis($data1,$data2,$data3,$title,$secundarytitle1,$secundarytitle2,$secundarytitle3,$legendtitle,$high,$length) {
/*echo $myLength;
echo $myHigh;*/
// Spécifie ici la taille de l'image du radar
$graph = new RadarGraph($myLength,$myHigh,"auto");
$graph->img->SetAntiAliasing();
$graph->SetScale('lin');
// Spécifie ici la couleur de fond
//$graph->SetColor("white");
//$graph->SetColor('lightyellow');
//$graph->SetColor('aliceblue');
$graph->SetColor('snow2');
// Spécifie ici si le radar est en perspective (ombragé)
$graph->SetShadow();
// Spécifie ici la position du graph dans l'image (laisser par défaut!)
$graph->SetCenter(0.4,0.55);
// Spécifie la taille ainsi que la police des valeurs sur le radar
$graph->axis->SetFont(FF_FONT0,FS_BOLD);
// Spécifie la forme des lignes formant la grille
$graph->grid->SetLineStyle("solid");
//$graph->grid->SetLineStyle("dashed");
//$graph->grid->SetLineStyle("longdashed");
//$graph->grid->SetLineStyle("dotted");
// Spécifie l'épaisseur des lignes de la grille
//$graph->grid->SetLineWeight(1);
$graph->grid->SetWeight(1);
// Spécifie la couleur des limites
$graph->grid->SetColor("navy");
// Spécifie si on affiche la grille
$graph->grid->Show();
// Spécifie le nombre de limites ainsi que leurs liaisons(ex. 20% 40% 60% 80% pour TICKD_DENSE)
$graph->SetTickDensity(TICKD_DENSE);
//$graph->SetTickDensity(TICKD_NORMAL);
//$graph->SetTickDensity(TICKD_SPARSE);
//$graph->SetTickDensity(TICKD_VERYSPARSE);
// Permet d'afficher les petites marques sur les statistiques
$graph->ShowMinorTickmarks();
// Cache ou non les limites à 0% 50% et 100% dans le radar (par défaut : true affiche)
//$graph->HideTickMarks();
$graph->HideTickMarks(false);
// Spécifie ici LE titre à appliquer au radar :
$graph->title->Set("$myTitle");
// Donne les polices au titre principal
$graph->title->SetFont(FF_COMIC,FS_BOLD);
//$graph->title->SetFont(FF_FONT1,FS_BOLD);
// Spécifie les titres secondaires
$graph->SetTitles(array("$mySecundaryTitle1","$mySecundaryTitle2","$mySecundaryTitle3"));
//$graph->SetTitles($gDateLocale->GetShortMonth());
// Créé les premières stats sur le radar avec les points de donnée
$plot = new RadarPlot(array($myData1,$myData2,$myData3));
// Spécifie la légende du premier radar
$plot->SetLegend("$myLegendTitle");
// Spécifie la couleur des points
$plot->SetColor("blue");
// Spécifie ici si les statistiques "remplissent" le radar
//$plot->SetFill(false);
$plot->SetFillColor("cornflowerblue");
//$plot->SetFillColor("mediumpurple1");
//$plot->SetFillColor("slateblue1");
// Spécifie la largeur des lignes affichées
$plot->SetLineWeight(10);
// Ajoute ici les points de donnée prédéfinis
$graph->Add($plot);
// Affiche ici le graph
$graph->Stroke();
//return $graph;
} //FIN DE FONCTION CREATION RADAR A 3 BRANCHES
Je remerci aussi maitredede d'avoir pris la patience de me lire.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 30 mars 2005 à 15:53
mais pas comme ca hein...lol, parce que tu vas les chercher dans une
boucle while (), chaque ligne est un tableau en fait si tu veux...et a
chaque boucle dans while(), tu recrees ce tableau.
donc fo parcourir normalement ton tableau (while...), puis mettre les
resultats dans un nouvbeau tableau, que tu passes, lui, en parametre a
ta fonction. C'etait ptete ca ton probleme tout compte fait...
zeldoi5
Messages postés58Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention13 novembre 20052 30 mars 2005 à 16:04
Ben là, je n'ai pas besoin du while, car les requêtes me renvoient un chiffre unique (pour chacune d'elle bien sûr).
Mais tu fais bien de me parler de ça, car j'ai pas compris grand chose au while.... Le résultat est compris dans un tableau nommé row et pour le lire il faut que je fasse un while, c'est ça??
En ce qui concerne ma question : que faut il que je modifie dans mon script radar pour qu'il accepte alors les trois paramètres d'entrée ??
Voici mon script radar :
<?php
include ("../jpgraph/jpgraph.php");
include ("../jpgraph/jpgraph_radar.php");
$graph = new RadarGraph(500,300,"auto");
$graph->img->SetAntiAliasing();
$graph->SetScale('lin');
$graph->title->Set("Environnement Position de Travail");
$graph->title->SetFont(FF_COMIC,FS_BOLD);
$graph->SetTitles(array("X","Y","Z"));
$plot = new RadarPlot(array(70,80,60));
$plot->SetLegend("Stats temps réel");
$plot->SetColor("blue");
$plot->SetFillColor("cornflowerblue");
$plot->SetLineWeight(10);
$graph->Add($plot);
$graph->Stroke();
?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 30 mars 2005 à 16:21
Ce n'est pas toi qui a cree ce script...sinon tu saurais 2 ou 3 choses lol.
La tu ne montres pas la bonne partie.
C'est une classe, et une classe est definie dans un autre fichier (normalement) et commence par :
class {
RadarGraph($..., $..., $...) {
}
... autres methodes
}
C'est ca qu'il faut regarder.
Apparemment le constructeur de cette classe accepte 2 int, et un
attribut sans doute fixe par defaut. La tu l'appelles avec "auto".
Donc il faut lui passer en parametre : un int (et pas un tableau, non),
1 deuxieme int (tjrs pas de tableau), et un parametre specifique dont
je ne connais pas les valeurs possibles vu que tu ne montres pas la
definition de la classe la, mais en tous cas, surement pas un tableau.
le while dans les requetes ce n'est pas exactement ca. A chaque boucle
dans ton while, il cree un tableau ($row) qu'il remplit avec la 1ere
ligne trouvee et tous les champs, puis recommence (nouveau tableau,
tjrs $row, mais ecrasant le precedent $row) avec la 2eme ligne, puis la
3eme etc jusqu'a ce qu'il ait remonte tout ce quÄil avait trouve en
fonction de ta requete.
zeldoi5
Messages postés58Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention13 novembre 20052 30 mars 2005 à 16:34
Et bien justement c'est moi qui l'ai créé ce script!! J'ai juste jugé bon de ne pas vous mettre les commentaires que j'ai mis....
Ce que je n'ai pas créé, comme tu dis, c'est la classe RadarGraph, qui elle est issue de la librairie graphique JpGraph (que j'utilise pour générer un radar dynamique à partir des résultats des requêtes).
Les paramètres proprement parlés sont : la taille (en largeur et en hauteur) ainsi qu'un paramètre automatique (dont je ne me rappele plus la fonction).
Donc, que dois-je modifier dans le script radar.php pour qu'il accepte trois paramètres?
Ou dois-je utiliser et réécrire ce script en fonction pour m'en servir?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 30 mars 2005 à 16:46
Mais il est ou radar.php ? Parce que la ce que je vois, ce sont juste
des appels a une classe et a ses methodes, classe qui doit provenir de
JPgraph donc, mais dont on ne sait rien. Il n'y a aucune fonction
propre la, ou classe a toi ? Ton script ne fait qu'appeler des
fonctions existantes, ce sont CES fonctions qui doivent etre modifiees
pour accepter tes valeurs, ou alors, a toi d'adapter tes valeurs poiur
qu'elles soient acceptes par ces classes.
zeldoi5
Messages postés58Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention13 novembre 20052 30 mars 2005 à 22:23
Bon, c'est pas très clair (surtout pour moi!!)
Alors j'ai un premier fichier qui lancé me calcule trois paramètres par
le biais de requêtes, voici ce fichier (j'omets ici de mettre les
balises html....), donc voici ce fichier calcul :
//Code de conenxion au serveur de BDD
$idConnexion = mysql_connect($myServer, "", "");
$connexionReussie = mysql_select_db($myDB) or die("Impossible de se connecter à la base de données $myDB. ");
//Requêtes SQL (basiques!)
$query = "select AVG(TR) from mesure_lan";
$query2 = "select AVG(TR) from mesure_messagerie";
$query3 = "select AVG(TR) from mesure_connect";
$row = mysql_fetch_row($result);
echo "Temps de réponse moyen : $row[0] ";
$row2 = mysql_fetch_row($result2);
echo "Temps de réponse moyen de la messagerie : $row2[0] ";
$row3 = mysql_fetch_row($result3);
echo "Temps de réponse moyen de la connectivité : $row3[0] ";
Ensuite, j'ai un second ficher,
nommé radar.php, qui est (pour le moment) statique, qui est chargé de
tracer un radar via la librairie graphique Jpgraph en prenant les
coordonnées que je vais nommer ici X Y et Y, voici le fichier sus radar.php :
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 31 mars 2005 à 10:57
Lol, on va pas s'en sortir ;-)
Y a quoi dans ce fichier radar.php ?
Je veux dire, si tu veux que l'on tente de te dire comment tu peux utiliser
$plot = new RadarPlot(array(X,Y,Z));
en remplacant X Y et Z par les resultats obtenus par tes requetes, il faudrait voir comment est construite la classe RadarPlot..
Sinon, a vue de nez, je dirai : rien. Si tes 3 requetes renvoient de
bons resultats ( a savoir des int, 3 chiffres entiers quoi, qui peuvent
correspondre a des axes), tu peux tres bien les mettres.
Ca donnera un truc du genre :
$plot = new RadarPlot(array($row[0},$row1[0],$row2[0]));
zeldoi5
Messages postés58Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention13 novembre 20052 31 mars 2005 à 11:25
Je ne sais pas ce qu'il y a dans RadarPlot, car c'est la classe qui est fournie par Jpgraph. Je m'en sers juste pour contruire le radar.
Mais c'est vrai que je n'avais pas pensé de faire direct appel à RadarPlot... Je vais essayer!!
Merci pour ta patience! Je te tiens au courant!
Donc c'est que ça fait la même chose, la faute n'est pas à la fonction mais à l'affichage de l'image au format png (et aux tailles 300*500 comme on peut le lire..)
Je suis bloqué, le passage de paramètres est maintenant effectif, et je t'en remercie, mais ça merde avec JpGraph.... Ca sort du petit domaine de mes compétances...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 31 mars 2005 à 13:41
Re,
je vais pas pouvoir t'aider sans cette classe radar, au moins. Tu
l'utilises, donc tu l'as quelquepart, lol. Si tu la trouves, tu peux
tjrs, si elle n#est pas trop longue, la mettre ici et on verra.
zeldoi5
Messages postés58Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention13 novembre 20052 31 mars 2005 à 14:10
Ben elle est pas mal longue :
//===================================================
// CLASS RadarGraph
// Description: Main container for a spider graph
//===================================================
class RadarGraph extends Graph {
var $posx;
var $posy;
var $len;
var $plots=null, $axis_title=null;
var $grid,$axis=null;
//---------------
// CONSTRUCTOR
function RadarGraph($width=300,$height=200,$cachedName="",$timeout=0,$inline=1) {
$this->Graph($width,$height,$cachedName,$timeout,$inline);
$this->posx=$width/2;
$this->posy=$height/2;
$this->len=min($width,$height)*0.35;
$this->SetColor(array(255,255,255));
$this->SetTickDensity(TICKD_NORMAL);
$this->SetScale("lin");
$this->SetGridDepth(DEPTH_FRONT);
}
//---------------
// PUBLIC METHODS
function SupressTickMarks($f=true) {
if( ERR_DEPRECATED )
JpGraphError::Raise('RadarGraph::SupressTickMarks() is deprecated. Use HideTickMarks() instead.');
$this->axis->scale->ticks->SupressTickMarks($f);
}
function HideTickMarks($aFlag=true) {
$this->axis->scale->ticks->SupressTickMarks($aFlag);
}
function ShowMinorTickmarks($aFlag=true) {
$this->yscale->ticks->SupressMinorTickMarks(!$aFlag);
}
function SetScale($axtype,$ymin=1,$ymax=1) {
if( $axtype != "lin" && $axtype != "log" ) {
JpGraphError::Raise("Illegal scale for spiderplot ($axtype). Must be "lin" or "log"");
}
if( $axtype=="lin" ) {
$this->yscale = & new LinearScale($ymin,$ymax);
$this->yscale->ticks = & new RadarLinearTicks();
$this->yscale->ticks->SupressMinorTickMarks();
}
elseif( $axtype=="log" ) {
$this->yscale = & new LogScale($ymin,$ymax);
$this->yscale->ticks = & new RadarLogTicks();
}
$this->axis = & new RadarAxis($this->img,$this->yscale);
$this->grid = & new RadarGrid();
}
function SetSize($aSize) {
if( $aSize<0.1 || $aSize>1 )
JpGraphError::Raise("Radar Plot size must be between 0.1 and 1. (Your value=$s)");
$this->len=min($this->img->width,$this->img->height)*$aSize/2;
}
function SetPlotSize($aSize) {
$this->SetSize($aSize);
}
function SetTickDensity($densy=TICKD_NORMAL) {
$this->ytick_factor=25;
switch( $densy ) {
case TICKD_DENSE:
$this->ytick_factor=12;
break;
case TICKD_NORMAL:
$this->ytick_factor=25;
break;
case TICKD_SPARSE:
$this->ytick_factor=40;
break;
case TICKD_VERYSPARSE:
$this->ytick_factor=70;
break;
default:
JpGraphError::Raise("RadarPlot Unsupported Tick density: $densy");
}
}
function SetPos($px,$py=0.5) {
$this->SetCenter($px,$py);
}
function SetColor($c) {
$this->SetMarginColor($c);
}
function SetTitles($title) {
$this->axis_title = $title;
}
function Add(&$splot) {
$this->plots[]=$splot;
}
function GetPlotsYMinMax() {
$min=$this->plots[0]->Min();
$max=$this->plots[0]->Max();
foreach( $this->plots as $p ) {
$max=max($max,$p->Max());
$min=min($min,$p->Min());
}
if( $min < 0 )
JpGraphError::Raise("Minimum data $min (Radar plots only makes sence to use when all data points > 0)");
return array($min,$max);
}
// Stroke the Radar graph
function Stroke($aStrokeFileName="") {
// Set Y-scale
if( !$this->yscale->IsSpecified() && count($this->plots)>0 ) {
list($min,$max) = $this->GetPlotsYMinMax();
$this->yscale->AutoScale($this->img,0,$max,$this->len/$this->ytick_factor);
}
// Set start position end length of scale (in absolute pixels)
$this->yscale->SetConstants($this->posx,$this->len);
// We need as many axis as there are data points
$nbrpnts=$this->plots[0]->GetCount();
// If we have no titles just number the axis 1,2,3,...
if( $this->axis_title==null ) {
for($i=0; $i < $nbrpnts; ++$i )
$this->axis_title[$i] = $i+1;
}
elseif(count($this->axis_title)<$nbrpnts)
JpGraphError::Raise("Number of titles does not match number of points in plot.");
for($i=0; $i<count($this->plots); ++$i )
if( $nbrpnts != $this->plots[$i]->GetCount() )
JpGraphError::Raise("Each spider plot must have the same number of data points.");
// If the filename is given as the special "__handle"
// then the image handler is returned and the image is NOT
// streamed back
if( $aStrokeFileName == _IMG_HANDLER ) {
return $this->img->img;
}
else {
// Finally stream the generated picture
$this->cache->PutAndStream($this->img,$this->cache_name,$this->inline,
$aStrokeFileName);
}
}
} // Class