PHPmyGraph:使用GET发送数组

时间:2011-12-14 18:04:41

标签: php graph load

我找不到任何问题的答案。 我正在使用PhPmyGraph(http://phpmygraph.abisvmm.nl/)来显示我的数据库中的一些数据的图表。 问题是我必须在文件本身中创建我的数组,如果我想在页面上有2个图形,我需要创建2个不同的文件。 显然,该文件更易于与CMS一起使用,但我没有使用它。

这是文件graph.php:

<?php

//Set content-type header for the graphs
header("Content-type: image/png");
//Include phpMyGraph5.0.php
include_once('../phpMyGraph5.0.php');

//Set config directives
$cfg['title'] = 'Example graph';
$cfg['width'] = 500;
$cfg['height'] = 250;

//Set data
$data = array(
    'Jan' => 12,
    'Nov' => 78,
    'Dec' => 23
);

//Create phpMyGraph instance
$graph = new phpMyGraph();
//Parse
$graph->parseVerticalPolygonGraph($data, $cfg);
?>

我在我的页面index.php中调用它:

echo " < img src=\"graph.php\"> ";

还有其他办法吗?并将数据从index.php发送到graph.php? 或者可能将代码graph.php移动到index.php中?问题出在图像对象上,我真的不知道怎么做!

更新 我几乎找到了解决方案,我的代码现在是:

在graph.php中:

//Parse
$graph->parseVerticalPolygonGraph(unserialize($_GET['data']), $cfg);

index.php:

$select_daily = mysql_query("SELECT * FROM table");
    while ($row_daily = mysql_fetch_assoc($select_daily) ){     
        $y = substr($row_daily['ymd'], 0, -4);  // Year
        $m = substr($row_daily['ymd'], 4, -2);  // Month
        $d = substr($row_daily['ymd'], -2); // Day

        $key = $d."/".$m."/".$y;
        $data_daily [$key] = $row_daily['members'];
    }
    foreach($data_daily as $key => $value) {
        echo $key ,' : ', $value ,'<br/>';
    }

echo "< img src=\"graph.php?data=".serialize($data_daily)."\">";

但我收到错误“提供的数据不是数组”

我看不出它有什么问题? 如果我做var_dump($ data_daily)我得到:

  

array(8){[“14/12/2011”] =&gt; string(1)“0”[“13/12/2011”] =&gt;串(2)   “11”[“12/12/2011”] =&gt; string(1)“0”[“11/12/2011”] =&gt; string(1)“2”   [ “10/12/2011”] =&GT; string(1)“9”[“09/12/2011”] =&gt; string(1)“3”   [ “08/12/2011”] =&GT; string(1)“6”[“07/12/2011”] =&gt; string(1)“6”}

UPDATE2:

的var_dump($ DATA1);给出:

array(12) { ["Jan"]=> int(12) ["Feb"]=>
int(25) ["Mar"]=> int(0) ["Apr"]=> int(7) ["May"]=> int(80) ["Jun"]=>
int(67) ["Jul"]=> int(45) ["Aug"]=> int(66) ["Sep"]=> int(23)
["Oct"]=> int(23) ["Nov"]=> int(78) ["Dec"]=> int(23) }

和var_dump($ s_data1 = serialize($ data1))给出:

a:12:s:3:"Jan";i:12;s:3:"Feb";i:25;s:3:"Mar";i:0;s:3:"Apr";i:7;s:3:"May";i:80;s:3:"Jun";i:67;s:3:"Jul";i:45;s:3:"Aug";i:66;s:3:"Sep";i:23;s:3:"Oct";i:23;s:3:"Nov";i:78;s:3:"Dec";i:23;}

然后反序列化($ s_data1);给出与$ data1相同的东西

所以解析的参数1应该是正确的......我看不出有什么问题

我终于放弃并在graph.php中加载了我的数组:

if ($_GET['data'] == 'daily'){
    $cfg['title'] = 'daily';
    $graph->parseVerticalPolygonGraph($data_daily, $cfg);
}

我称之为文件:

echo "<img src=\"graph.php?data=daily\">";

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

我以前需要一个页面来显示使用phpMyGraph的多个图形,我采用的方法是使用数据URI&php和ob_get_clean()

只需在每个图表中使用它:

ob_start();
$graph->parseVerticalPolygonGraph($data, $cfg);
$img = ob_get_clean();
echo "<img src='data:image/gif;base64," . base64_encode($img) . "/>";

我建议使用gif&#39; s,因为这样你的页面大小不会很大,你可以通过设置$ cfg [&#34; type&#34;]到&#34; gif&#来做到这一点34; (见http://phpmygraph.abisvmm.nl/#ConfigDirectives

这也将减少多个请求的开销,并防止热链接到图像。

您可以在此处详细了解数据URI http://en.wikipedia.org/wiki/Data_URI_scheme

答案 1 :(得分:0)

您可能想尝试

echo "< img src=\"graph.php?data=".urlencode(serialize($data_daily))."\">"

我可能会误解哪个脚本会抛出错误,但是(我假设它的graph.php给你提供的数据不是数组)。

答案 2 :(得分:0)

尝试使用json而不是序列化

echo "< img src=\"graph.php?data=".urlencode(json_encode($data_daily))."\">"

$graph->parseVerticalPolygonGraph(json_decode($_GET['data'],true), $cfg);

我认为没有理由抛出错误。