简体   繁体   中英

how to retrieve data from field name and column to generate graph

so the following code is what I am using to try to generate a graph using pchart. I have been able to generate some of the graph. The graph at the moment looks like this: http://befoz.netau.net/charts.php when it should be looking like http://befoz.netau.net/chart2.php The second chart is based on values I manually entered. What I want to do is retrieve the data from the mysql database without manually entering the data so the chart is generated dynamically.

Here is my code. I am not sure if it is the query or incorrect arrays that is causing the chart not to generate the responses.

<?php    
/* CAT:Bar Chart */ 

/* pChart library inclusions */ 
include("pchart/class/pData.class.php"); 
include("pchart/class/pDraw.class.php");
include("pchart/class/pImage.class.php"); 

/* Create and populate the pData object */ 
$myData = new pData();   
$myData->addPoints(array($Yes,$Result)); 
$myData->addPoints(array($No,$Result));
$myData->addPoints(array($Undecided,$Result));
$myData->setAxisName(0,"Number of Responses"); 
$myData->addPoints(array("Yes","No","Undecided"),"Types of Responses"); 
$myData->setSerieDescription("Types of Responses","Types of Responses"); 
$myData->setAbscissa("Types of Responses"); 
$myData->setAbscissaName("Types of Responses"); 

/* Connect to the MySQL database */

$db = mysql_connect("host", "user", "pass");
mysql_select_db("thedatabase",$db);

/* Build the query that will returns the data to graph */

$Requete = "SELECT `Do you have an interest in Green IT` FROM `replies`";

$Result  = mysql_query($Requete,$db);
$Yes=""; $No=""; $Undecided="";
while($row = mysql_fetch_array($Result))
{

/* Push the results of the query in an array */
$Yes[]   = $row["Yes"];
$No[] = $row["No"];
$Undecided[] = $row["Undecided"];
}

/* Create the pChart object */ 
$myPicture = new pImage(500,500,$myData); 
$myPicture->drawGradientArea(0,0,500,500,DIRECTION_VERTICAL,array("StartR"=>240,"StartG"=>240,"StartB"=>240,"EndR"=>180,"EndG"=>180,"EndB"=>180,"Alpha"=>100)); 
$myPicture->drawGradientArea(0,0,500,500,DIRECTION_HORIZONTAL,array("StartR"=>240,"StartG"=>240,"StartB"=>240,"EndR"=>180,"EndG"=>180,"EndB"=>180,"Alpha"=>20)); 
$myPicture->setFontProperties(array("FontName"=>"pchart/fonts/pf_arma_five.ttf","FontSize"=>6)); 

/* Draw the chart scale */  
$myPicture->setGraphArea(100,30,480,480); 
$myPicture->drawScale(array("CycleBackground"=>TRUE,"DrawSubTicks"=>TRUE,"GridR"=>0,"GridG"=>0,"GridB"=>0,"GridAlpha"=>10,"Pos"=>SCALE_POS_TOPBOTTOM)); 

/* Turn on shadow computing */  
$myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10)); 

/* Create the per bar palette */ 
$Palette = array("0"=>array("R"=>188,"G"=>224,"B"=>46,"Alpha"=>100), 
              "1"=>array("R"=>224,"G"=>100,"B"=>46,"Alpha"=>100), 
              "2"=>array("R"=>224,"G"=>214,"B"=>46,"Alpha"=>100), 
              "3"=>array("R"=>46,"G"=>151,"B"=>224,"Alpha"=>100), 
              "4"=>array("R"=>176,"G"=>46,"B"=>224,"Alpha"=>100), 
              "5"=>array("R"=>224,"G"=>46,"B"=>117,"Alpha"=>100), 
              "6"=>array("R"=>92,"G"=>224,"B"=>46,"Alpha"=>100), 
              "7"=>array("R"=>224,"G"=>176,"B"=>46,"Alpha"=>100)); 

 /* Draw the chart */  
 $myPicture->drawBarChart(array("DisplayPos"=>LABEL_POS_INSIDE,"DisplayValues"=>TRUE,"Rounded"=>TRUE,"Surrounding"=>30,"OverrideColors"=>$Palette)); 

/* Write the legend */  
$myPicture->drawLegend(570,215,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL)); 

/* Render the picture (choose the best way) */ 
$myPicture->autoOutput("pictures/example.drawBarChart.palette.png"); 
?>

So my structure looks like this in php my admin

ROWS Do you have an interest in Green IT
9    No
3    Undecided
16   Yes



CREATE TABLE `replies` (
`ID` INTEGER NOT NULL AUTO_INCREMENT, 
`Do you have an interest in Green IT` VARCHAR(50), 
`Do you think Green IT is a good a thing` VARCHAR(50), 
`Would you welcome Green IT if it helped the environment` VARCHAR(255),
`Would you welcome Green IT if you saved money` VARCHAR(255), 
`Incentive for welcoming Green IT` VARCHAR(50),
`Is UEL doing enough to implement Green IT` VARCHAR(255), 
`Do you like Green IT Modules` VARCHAR(50),
`Your rough monthly cost on travel to UEL` VARCHAR(255), 
`Additional comments` VARCHAR(50),
`Should there be more green modules at UEL` VARCHAR(255), 
`What Year of Study Are you In` VARCHAR(50),
`If you did not fill in the quesionnaire, why not` VARCHAR(255), 
PRIMARY KEY (`ID`)
) ENGINE=myisam DEFAULT CHARSET=utf8;

Where am I going wrong?

Thanks

Assuming that there is one record per respondent the query should be something like this -

SELECT `Do you have an interest in Green IT`, COUNT(*) AS num
FROM replies
GROUP BY `Do you have an interest in Green IT`

then each of the rows returned by this query can be added as points in the dataset. As pointed out by others you need to run your query first in order to pass the data to the charting class -

<?php    
/* CAT:Bar Chart */ 

/* pChart library inclusions */ 
include("pchart/class/pData.class.php"); 
include("pchart/class/pDraw.class.php");
include("pchart/class/pImage.class.php"); 

/* Create and populate the pData object */ 
$myData = new pData();   
$myData->setAxisName(0,"Number of Responses"); 
$myData->setSerieDescription("Types of Responses","Types of Responses"); 
$myData->setAbscissa("Types of Responses"); 
$myData->setAbscissaName("Types of Responses"); 

/* Connect to the MySQL database */

$db = mysql_connect("host", "user", "pass");
mysql_select_db("thedatabase",$db);

/* Build the query that will returns the data to graph */

$Requete = "SELECT `Do you have an interest in Green IT` AS resp, COUNT(*) AS num FROM replies GROUP BY resp";

$Result  = mysql_query($Requete,$db);

while($row = mysql_fetch_array($Result))
{
    $myData->addPoints(array($row['resp'], $row['num'])); 
}

I have no idea how this particular charting app works but this should give you some idea.

You are trying to pass data to the addPoints method before you have pulled out the data from the DB. It appears you're also using the data a little oddly. You're using the potential value from the row as a column name. You'd need to employ something like @nnichols post.

What are you trying to pass as the second option in the addPoints method - you are passing the database resource, but I find it odd that a charting app would need that when it's also asking for specific numbers - is it the total number of rows you want to pass?

I'd also suggest renaming the columns in your table, sticking to names like has_interest_in_green_it instead of Do you have an interest in Green IT .

You'd need to use it this way around as far as the getting of data before using it is concerned:

<?php    
/* CAT:Bar Chart */ 

/* pChart library inclusions */ 
include("pchart/class/pData.class.php"); 
include("pchart/class/pDraw.class.php");
include("pchart/class/pImage.class.php");

/* Connect to the MySQL database */

$db = mysql_connect("host", "user", "pass");
mysql_select_db("thedatabase",$db);

/* Build the query that will returns the data to graph */

$Yes = "";
$No = "";
$Undecided = "";

$Requete = "SELECT `Do you have an interest in Green IT` FROM `replies`";

$Result  = mysql_query($Requete,$db);

while($row = mysql_fetch_array($Result))
{
    /* Push the results of the query in an array */
    $Yes[]   = $row["Yes"];
    $No[] = $row["No"];
    $Undecided[] = $row["Undecided"];
}

/* Create and populate the pData object */ 
$myData = new pData();   
$myData->addPoints(array($Yes,$Result)); 
$myData->addPoints(array($No,$Result));
$myData->addPoints(array($Undecided,$Result));
$myData->setAxisName(0,"Number of Responses"); 
$myData->addPoints(array("Yes","No","Undecided"),"Types of Responses"); 
$myData->setSerieDescription("Types of Responses","Types of Responses"); 
$myData->setAbscissa("Types of Responses"); 
$myData->setAbscissaName("Types of Responses"); 

/* Create the pChart object */ 
$myPicture = new pImage(500,500,$myData); 
$myPicture->drawGradientArea(0,0,500,500,DIRECTION_VERTICAL,array("StartR"=>240,"StartG"=>240,"StartB"=>240,"EndR"=>180,"EndG"=>180,"EndB"=>180,"Alpha"=>100)); 
$myPicture->drawGradientArea(0,0,500,500,DIRECTION_HORIZONTAL,array("StartR"=>240,"StartG"=>240,"StartB"=>240,"EndR"=>180,"EndG"=>180,"EndB"=>180,"Alpha"=>20)); 
$myPicture->setFontProperties(array("FontName"=>"pchart/fonts/pf_arma_five.ttf","FontSize"=>6)); 

/* Draw the chart scale */  
$myPicture->setGraphArea(100,30,480,480); 
$myPicture->drawScale(array("CycleBackground"=>TRUE,"DrawSubTicks"=>TRUE,"GridR"=>0,"GridG"=>0,"GridB"=>0,"GridAlpha"=>10,"Pos"=>SCALE_POS_TOPBOTTOM)); 

/* Turn on shadow computing */  
$myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10)); 

/* Create the per bar palette */ 
$Palette = array("0"=>array("R"=>188,"G"=>224,"B"=>46,"Alpha"=>100), 
              "1"=>array("R"=>224,"G"=>100,"B"=>46,"Alpha"=>100), 
              "2"=>array("R"=>224,"G"=>214,"B"=>46,"Alpha"=>100), 
              "3"=>array("R"=>46,"G"=>151,"B"=>224,"Alpha"=>100), 
              "4"=>array("R"=>176,"G"=>46,"B"=>224,"Alpha"=>100), 
              "5"=>array("R"=>224,"G"=>46,"B"=>117,"Alpha"=>100), 
              "6"=>array("R"=>92,"G"=>224,"B"=>46,"Alpha"=>100), 
              "7"=>array("R"=>224,"G"=>176,"B"=>46,"Alpha"=>100)); 

 /* Draw the chart */  
 $myPicture->drawBarChart(array("DisplayPos"=>LABEL_POS_INSIDE,"DisplayValues"=>TRUE,"Rounded"=>TRUE,"Surrounding"=>30,"OverrideColors"=>$Palette)); 

/* Write the legend */  
$myPicture->drawLegend(570,215,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL)); 

/* Render the picture (choose the best way) */ 
$myPicture->autoOutput("pictures/example.drawBarChart.palette.png"); 
?>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM