Hi guys. I am a newbie triying to do grown-up people stuff :)
I am trying to write a function to create a bar chart using JPGraph where I
have to pass two variables (query name, and x axis column name) and the
function creates the graphic. It is because I have several queries with
diferent length, so I would like to have a function to create lots of graphics
without to much coding.
I have two questions:
a) How could I create an array which collects the result of a
mysql_fetch_array() function (excluding only the first column).
b) How can I execute the string from a variable as if it where part of the
script:
For example I have the following variable
var1 = '$y_'.$row_query[$org_field_name].' = new BarPlot('.($row_query).');';
which creates a string like this:
$y_org1=new BarPlot(array);
/* "$y_org1" is the result of the query "$row_query[$org_field_name]" and
"$row_query" is the array which contains the result of
"$row_query=mysql_fetch_assoc($sql)*/
Any clue will be very, very, very appreciated.
Best regards,
Alvaro
Following is the whole code.
1. The sample table is as follows
+----------+--------+--------+--------+
| org_name | field1 | field2 | field3 |
+----------+--------+--------+--------+
| org1 | 1 | 5 | 10 |
| org2 | 12 | 4 | 8 |
| org3 | 45 | 12 | 20 |
| org4 | 40 | 30 | 4 |
+----------+--------+--------+--------+
2. The script as far as I've got it is:
FILE: functions.inc.php
<?php
include ( "../../addons/jpgraph/src/jpgraph.php");
include ("../../addons/jpgraph/src/jpgraph_bar.php");
function fnc_y_name($query_name, $org_field_name)
{
$row_query=mysql_fetch_assoc($query_name);//Array que recoge los datos de las
filas de la consulta.
$total_rows=mysql_num_rows($query_name); //Número total de filas que devuelve
la consulta
$total_fields=mysql_num_fields($query_name);//Número total de campos en la
consulta
for($i=1; $i<$total_fields; $i++)
{
$fieldname = mysql_field_name($query_name,$i);
$array_fieldname[] = $fieldname;
};
do
{
for($i=0; $i<$total_fields-1; $i++)
{
$y_data[] = $row_query[$array_fieldname[$i]]; //Here is my bigger problem.
}
} while ($row_query=mysql_fetch_assoc($query_name));
//STARTS THE GRAPHIC CREATION
//Creates the graphic
$graph = new Graph(900,400,"auto");
$graph->SetScale("textlin");
$graph->SetShadow();
$graph->img->SetMargin(40,30,20,40);
//I will try to build this calls with a do..while loop from the data collected
from the y_data array. This is why I need to pass the variable or array
contents directly to the script.
$b1plot = new BarPlot($y_data);
$b1plot->SetFillColor("olivedrab3");
$b2plot = new BarPlot($y_data);
$b2plot->SetFillColor("orange");
// Joins the plots
$gbplot = new GroupBarPlot(array($b1plot, $b2plot));
// Executes the graphic
$graph->Add($gbplot);
$graph->title->Set("Graphic Title");
$graph->subtitle->Set("Sales");
$graph->xaxis->title->Set("Organization");
$graph->yaxis->title->Set("Sales amount in thousands");
$graph->img->SetMargin(75,30,80,80);
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
// Displays the graph
$graph->Stroke();
}; //End of the function
?>
FILE: function_test.php (executes the function)
<?php
require_once('../Connections/sis_mon_conn.php');
include('../Connections/my_connection.php');
include ("functions.inc.php");
?>
<?php
mysql_select_db($database_sis_mon_conn, $sis_mon_conn);
$query_rec_sql = "SELECT * FROM test";
$rec_sql = mysql_query($query_rec_sql, $sis_mon_conn) or die(mysql_error());
$row_rec_sql = mysql_fetch_assoc($rec_sql);
$totalRows_rec_sql = mysql_num_rows($rec_sql);
mysql_data_seek($rec_sql, 0);
fnc_y_name($rec_sql, "org_name");
?>
<?php
mysql_free_result($rec_sql);
?>
//I know, the code is awful, but is the best I have got with my poor experience