Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JPGraph + MySQL, выводит только 1 элемент массива 
V
    Опции темы
hemp_smile
Дата 13.3.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 13.3.2008

Репутация: -1
Всего: нет



А кто подскажет как мне быть  ? smile Сделать нужно следуещее : Есть база данных на MySQL .Требуется выбрать числовые значения из таблицы и вывести на график. Делаю следующее :
Код

<?php

include ("Graph/jpgraph.php");
include ("Graph/jpgraph_line.php");
$hostname = "localhost";
$hostuser = "ODBC";
$hostpass = "";
$dbname = "BD";
$tablename = "Table";
$connection=mysql_connect($hostname,$hostuser,$hostpass);
$db=mysql_select_db($dbname, $connection);
$query = "SELECT howmany FROM `Table` LIMIT 7  ";
$res = mysql_query($query)  or die(mysql_error());
while($row=mysql_fetch_array($res)){




$graph = new Graph(300,200,"auto"); 
$graph->img->SetMargin(40,40,40,40);     
$graph->img->SetAntiAliasing(); 
$graph->SetScale("textlin",0,10); 
$graph->SetShadow(); 
$graph->title->Set("Example of line centered plot"); 
$graph->title->SetFont(FF_FONT1,FS_BOLD); 


// Use 20% "grace" to get slightly larger scale then min/max of 
// data 
$graph->yscale->SetGrace(20); 


$p1 = new LinePlot($row['howmany']); 
$p1->mark->SetType(MARK_FILLEDCIRCLE); 
$p1->mark->SetFillColor("red"); 
$p1->mark->SetWidth(4); 
$p1->SetColor("blue"); 
$p1->SetCenter(); 
$graph->Add($p1); 


$graph->Stroke(); 

}


?>
 
Результат - на график выводится только одно значение из массива =(
Помогите пожалуйста 

Это сообщение отредактировал(а) hemp_smile - 13.3.2008, 15:50
PM MAIL   Вверх
topy
Дата 13.3.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 18.2.2008

Репутация: нет
Всего: 1



посмотрите мой, рабочий код и поймите, что у Вас не массив:
Код

include_once("jpgraph.php");
include_once("jpgraph_line.php");
$select7=mysql_query("SELECT * FROM table");
        while($arow7=mysql_fetch_array($select7, MYSQL_BOTH))
                {
                    $actives[] = $arow7['actives'];
                    $date[] = $arow7['date'];
                }
$datay=$actives; // тут массив
$datax=$date; // и тут массив
// дальше не интересно это стандарт
$graph = new Graph(800,500,"auto");
$graph->img->SetMargin(70,30,30,60);    
$graph->SetScale("textlin");
$graph->img->SetAntiAliasing();
$graph->ygrid->SetFill(true,'#[email protected]','#[email protected]');
$graph->ygrid->SetLineStyle('dashed');
$graph->ygrid->SetColor('gray');
$graph->xgrid->Show();
$graph->xgrid->SetLineStyle('dashed');
$graph->xgrid->SetColor('gray');
$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,6);
$graph->xaxis->SetLabelAngle(90);
$graph->xaxis->SetPos("min");
$p1 = new LinePlot($datay);
$p1->mark->SetType(MARK_FILLEDCIRCLE);
$p1->mark->SetFillColor("red");
$p1->mark->SetWidth(2);
$p1->SetColor("blue");
$p1->SetFillColor("[email protected]");
$p1->SetCenter();
$p1->value->SetFormat('%d');
$p1->value->SetFont(FF_ARIAL,FS_NORMAL,7);
$p1->value->SetColor("black");
$p1->value->SetAngle(60);
$p1->value->Show();
$graph->Add($p1);
$graph->Stroke();


Это сообщение отредактировал(а) topy - 13.3.2008, 17:20
PM MAIL   Вверх
hemp_smile
Дата 13.3.2008, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 13.3.2008

Репутация: -1
Всего: нет



Спасибо огромнейшее !!! Заработало !Но у  меня задача немного расшириласьsmile : У меня в таблице хранятся курсы валют на определённые даты. Как организовать запрос чтобы он выводил значения допустим за последние 20 дней. А на графике по оси Х вместо чисел от 1 до 20 выводились даты  ? Заранее спасибо 
PM MAIL   Вверх
topy
Дата 13.3.2008, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 18.2.2008

Репутация: нет
Всего: 1



Ну тут уже надо массив обрезать до "последние 20"....
У меня в общем-то примерно такая же задача стояла, решение у вас перед глазами..
Если интересно как я работал с датами, то так:
Код

$select7=mysql_query("SELECT * FROM table");
        while($arow7=mysql_fetch_array($select7, MYSQL_BOTH))
                {
                    $activesr = $arow7['actives'];
                    $dater = $arow7['date'];
                    $actives[]=$activesr;
                    $dater = substr("$dater", 0, 12); 
                    $timestamp = strtotime("$dater");
                    $dater = date('d.m.Y', $timestamp);
                    $date[]=$dater;
                }
$datay=$actives;
$datax=$date;


Дата в базе в формате:    Feb 22 2008 12:00:00:000AM превращается в дд.мм.гггг

PS конечно можно все сделать более красиво, но время дороже, а усовершенствовать можно до бесконечности.
PM MAIL   Вверх
hemp_smile
Дата 13.3.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 13.3.2008

Репутация: -1
Всего: нет



Попробовал сделать так как вы описали. В результате получил то что все даты одинаковы (01.01.1970 по чему именно эта дата ума не приложу smile у меня в базе записи с такой дотой нет smile ) и выводится всего 8 точек хотя в запросе к базе указал LIMIT 40 . Дата в  базе записана в формате : 2008-02-07. Пожалуста подскажите как решить эту проблему
PM MAIL   Вверх
bars80080
Дата 14.3.2008, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



которые даты?

если эти $dater = date('d.m.Y', $timestamp);
то попробуйте написать var_dump($timestamp);
скорее всего у вас получится что в в переменной ничего нет или не число int, следовательно вы получаете закономерный результат
PM MAIL WWW   Вверх
hemp_smile
Дата 14.3.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 13.3.2008

Репутация: -1
Всего: нет



Уважаемый bars80080 . Попытался сделать так как Вы описали т.е. следущее 
 $dater = var_dump($timestamp); в результате не выводится график и 8 раз  выводится сообщение  "bool(false)". Что это может значить и как с этим бороться ? smile  
PM MAIL   Вверх
bars80080
Дата 14.3.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



график естесственно выводится не будет, я вас попросил сделать проверку,

в результате проверки видно, что значение даты - bool(false), а дата от несуществующего значения - минимально возможная 1 января 1970 года, проверьте, есть ли у вас даты вообще в базе, если есть, пошагово проверьте что все переменные, так вы узнаете где она теряется

если же окажется, что в некоторых случаях значение даты несуществует, то надо делать соответственную проверку и присвоение значения по умолчанию (скажем текущая дата) или (у вас ведь график) неиспользовать это значение вообще, то есть не включать в массив

Добавлено через 3 минуты и 14 секунд
вах! только сейчас заметил:
Цитата
Дата в  базе записана в формате : 2008-02-07.

в смысле? поле тип date? text? или int
думаю второе, это ж строка, её просто выводить следует, без засовывания в функцию date()

функция date() принимает только числа int
PM MAIL WWW   Вверх
hemp_smile
Дата 14.3.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 13.3.2008

Репутация: -1
Всего: нет



 Эта  проблема решена ! Ошибка была во мне ! smile Я просто  неправильный запрос на БД  давал т.е.  код который привёл Уважаемый topy , абсолютно правильный и рабочий   ! smile Так что прошу прощения за свою невнимательность .  Уважаемый bars80080 Вам тоже огромное спасибо за советы .  Но так ещё и не понял как решить праблему с ограничением количества точек на график , он по прежднему рисует только 8 точек. Буду благодарен если кто-нибудь откликнется и подскажет в чём проблема.   
PM MAIL   Вверх
bars80080
Дата 14.3.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



так приведите существующий код с реальными запросами,

т.к. этот запрос:
Код
$query = "SELECT howmany FROM `Table` LIMIT 7  ";
 и выдаст вам семь точек + одна начальная наверно
PM MAIL WWW   Вверх
hemp_smile
Дата 14.3.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 13.3.2008

Репутация: -1
Всего: нет



Вот код :
Код

<?php

include ("Graph/jpgraph.php");
include ("Graph/jpgraph_line.php");

$hostname = "localhost";
$hostuser = "ODBC";
$hostpass = "";
$dbname = "BD";
$tablename = "Table";
$connection=mysql_connect($hostname,$hostuser,$hostpass);
$db=mysql_select_db($dbname, $connection);
$query = "SELECT * FROM `Table`  LIMIT 40";
$res = mysql_query($query)  or die(mysql_error());


while ($row=mysql_fetch_array($res))
{
                    $h_usd = $row['howmany']  ;
                    $dater = $row['ondate'];
                    $h_usds[]=$h_usd;
                    $dater = substr("$dater", 0, 12); 
                    $timestamp = strtotime("$dater");
                    $dater = date('d.m.Y', $timestamp);
                    $date[]=$dater;



}

$datax = $date;
$datay = $h_usds;

$graph = new Graph(800,500,"auto");
$graph->img->SetMargin(70,30,30,60);    
$graph->SetScale("textlin");
$graph->img->SetAntiAliasing();
$graph->ygrid->SetFill(true,'#[email protected]','#[email protected]');
$graph->ygrid->SetLineStyle('dashed');
$graph->ygrid->SetColor('gray');
$graph->xgrid->Show();
$graph->xgrid->SetLineStyle('dashed');
$graph->xgrid->SetColor('gray');
$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,6);
$graph->xaxis->SetLabelAngle(90);
$graph->xaxis->SetPos("min");
$p1 = new LinePlot($datay);
$p1->mark->SetType(MARK_FILLEDCIRCLE);
$p1->mark->SetFillColor("red");
$p1->mark->SetWidth(2);
$p1->SetColor("blue");
$p1->SetFillColor("[email protected]");
$p1->SetCenter();
$p1->value->SetFormat('%d');
$p1->value->SetFont(FF_ARIAL,FS_NORMAL,7);
$p1->value->SetColor("black");
$p1->value->SetAngle(60);
$p1->value->Show();
$graph->Add($p1);
$graph->Stroke();

?>

В результате выводит только 8 точек 
PM MAIL   Вверх
bars80080
Дата 14.3.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



судя по всему у вас там всего восемь строк в таблице

для проверки если есть возможность в командной строке mysql сделайте запрос: 
Код
SELECT * FROM `Table`;


ну или здесь в коде :
Код
$query = "SELECT * FROM `Table`";
$res = mysql_query($query)  or die(mysql_error());

$i = 0;
while ($row=mysql_fetch_array($res))
{
echo $i.'<br />'; $i++;
                    $h_usd = $row['howmany']  ;
                    $dater = $row['ondate'];
                    $h_usds[]=$h_usd;
                    $dater = substr("$dater", 0, 12); 
                    $timestamp = strtotime("$dater");
                    $dater = date('d.m.Y', $timestamp);
                    $date[]=$dater;
}
 узнаете сколько строк в таблице
PM MAIL WWW   Вверх
hemp_smile
Дата 14.3.2008, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 13.3.2008

Репутация: -1
Всего: нет



to bars80080 Спасибо Вам огромнейшее ! Так и есть . Прошу простить меня за проявленную мной глупость и невнимательнось smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.0528 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.