PHPmyGraph: отправить массив с GET - PullRequest
0 голосов
/ 14 декабря 2011

Я не смог найти ответа на свой вопрос.Я использую 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?Проблема в объекте изображения, я действительно не знаю, как это сделать!

ОБНОВЛЕНИЕ: Я почти нашел решение, мой код теперь:

in 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"] => string (1) "0" ["13/12/2011"] => string (2)" 11 "[" 12.12.2011 "] => string (1)" 0 "[" 12.11.2011 "] => string (1)" 2 "[" 10/ 12/2011 "] => string (1)" 9 "[" 12.09.2011 "] => string (1)" 3 "[" 12/12/2011 "] => string (1)" 6"[" 12.07.2011 "] => 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 синтаксического анализа должен быть правильным ... Я не вижу, что не так

Я наконец сдался и загрузил свои массивы в граф.php:

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

И я называю файл так:

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

Спасибо за вашу помощь в любом случае

Ответы [ 3 ]

1 голос
/ 25 июня 2014

Мне ранее была нужна страница для отображения нескольких графиков с использованием phpMyGraph, и я выбрал подход, заключающийся в использовании URI данных и php ob_start () и ob_get_clean ()

Просто используйте это для каждого графика:

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

Я рекомендую использовать gif для формата, так как таким образом размер вашей страницы не будет огромным, вы можете сделать это, установив $ cfg ["type"] в "gif" (см. Здесь http://phpmygraph.abisvmm.nl/#ConfigDirectives)

Это также уменьшит накладные расходы на несколько запросов и предотвратит хотлинкинг к изображениям.

Вы можете узнать больше о данных URI здесь http://en.wikipedia.org/wiki/Data_URI_scheme

0 голосов
/ 15 декабря 2011

Попробуйте использовать json вместо сериализации

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

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

Я не вижу причин для этого, чтобы выдать ошибку.

0 голосов
/ 14 декабря 2011

вы можете попробовать

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

Однако, возможно, я неправильно понимаю, какой скрипт выдает ошибку (я предполагаю, что это graph.php, предоставляющий вам предоставленные данные, а не массив).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...