By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
429,301 Members | 3,575 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 429,301 IT Pros & Developers. It's quick & easy.

Creating Gantt Chart in PHP

P: n/a
Hi All,

I am trying to create a gantt chart in php by getting data from
database. I am using WindowsXp OS and having php-4 and my-sql DB. I
have installed the JPGRAPH package to my system and including the
jpgraph modules accordingly. I am able to create a gantt chart by
hardcoding the datas but when I am trying to get the data from database
then I am not able to get the chart it is showing errors. I think thre
might be some problem in my code . So please rectify my code I have
posted here.

Thanks,
Kuna
<?php
include ("C:/Program
Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph.php");
include ("C:/Program
Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_gantt.php");

// Basic Gantt graph
$graph = new GanttGraph();
$graph->title->Set("Project StartDate and EndDate");

// Explicitely set the date range
// (Autoscaling will of course also work)
$graph->SetDateRange('2006-01-01','2007-12-31');
// 1.5 line spacing to make more room
$graph->SetVMarginFactor(1.5);

// Setup some nonstandard colors
$graph->SetMarginColor('l*********@0.8');
$graph->SetBox(true,'yellow:0.6',2);
$graph->SetFrame(true,'darkgreen',4);
$graph->scale->divider->SetColor('yellow:0.6');
$graph->scale->dividerh->SetColor('yellow:0.6');

// Display month and year scale with the gridlines
$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR);
$graph->scale->month->grid->SetColor('gray');
$graph->scale->month->grid->Show(true);
$graph->scale->year->grid->SetColor('gray');
$graph->scale->year->grid->Show(true);

// For the titles we also add a minimum width of 100 pixels for the
Task name column
$graph->scale->actinfo->SetColTitles(
array('Note','Task','Duration','Start','Finish'),a rray(30,100));
$graph->scale->actinfo->SetBackgroundColor('green:0.*@0.5');
$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10);
$graph->scale->actinfo->vgrid->SetStyle('solid');
$graph->scale->actinfo->vgrid->SetColor('gray');

// Uncomment this to keep the columns but show no headers
//$graph->scale->actinfo->Show(false);

// Setup the icons we want to use
$erricon = new IconImage(GICON_FOLDER,0.8);
$startconicon = new IconImage(GICON_FOLDEROPEN,0.6);
$endconicon = new IconImage(GICON_TEXTIMPORTANT,0.5);

// Set the variables for the database access:
$Host = "localhost";
$User = "root";
$Password = "";
$DBName = "zend";
$TableName = "tbl_projects";

$Link = mysql_connect ($Host, $User, $Password);
$Query = "SELECT * from $TableName ";
$Result = mysql_db_query($DBName, $Query);

$j=0;
while ($Row=mysql_fetch_array($Result)) {

$duration=$Row["Project_End"]-$Row["Project_Start"];
$data[] =
array(array($j,array($erricon,$Row["ProjectName"],$duration,$Row["Project_Start"],$Row["Project_End"])
,
$Row["Project_Start"],$Row["Project_End"],FF_ARIAL,FS_NORMAL,8));
++$j;
print $j;
}

// Create the bars and add them to the gantt chart
for($i=0; $i<count($data); ++$i) {
$bar = new
GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3]);
//if( count($data[$i])>4 )
//$bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
$bar->SetPattern(BAND_RDIAG,"yellow");
$bar->SetFillColor("gray");
$bar->progress->Set(0.5);
$bar->progress->SetPattern(GANTT_SOLID,"darkgreen");

//$bar->title->SetCSIMTarget(array('#1'.$i,'#2'.$i,'#3'.$i,'#4'. $i,'#5'.$i),array('11'.$i,'22'.$i,'33'.$i));
$graph->Add($bar);
}

// Output the chart
$graph->Stroke();

?>

Nov 7 '06 #1
Share this Question
Share on Google+
5 Replies


P: n/a
Kuna schreef:
I am able to create a gantt chart by
hardcoding the datas but when I am trying to get the data from database
then I am not able to get the chart it is showing errors.
What errors are you getting?
JW
Nov 7 '06 #2

P: n/a
Kuna wrote:
Hi All,

I am trying to create a gantt chart in php by getting data from
database. I am using WindowsXp OS and having php-4 and my-sql DB. I
have installed the JPGRAPH package to my system and including the
jpgraph modules accordingly. I am able to create a gantt chart by
hardcoding the datas but when I am trying to get the data from database
then I am not able to get the chart it is showing errors. I think thre
might be some problem in my code . So please rectify my code I have
posted here.

Thanks,
Kuna
<?php
include ("C:/Program
Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph.php");
include ("C:/Program
Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_gantt.php");

// Basic Gantt graph
$graph = new GanttGraph();
$graph->title->Set("Project StartDate and EndDate");

// Explicitely set the date range
// (Autoscaling will of course also work)
$graph->SetDateRange('2006-01-01','2007-12-31');
// 1.5 line spacing to make more room
$graph->SetVMarginFactor(1.5);

// Setup some nonstandard colors
$graph->SetMarginColor('l*********@0.8');
$graph->SetBox(true,'yellow:0.6',2);
$graph->SetFrame(true,'darkgreen',4);
$graph->scale->divider->SetColor('yellow:0.6');
$graph->scale->dividerh->SetColor('yellow:0.6');

// Display month and year scale with the gridlines
$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR);
$graph->scale->month->grid->SetColor('gray');
$graph->scale->month->grid->Show(true);
$graph->scale->year->grid->SetColor('gray');
$graph->scale->year->grid->Show(true);

// For the titles we also add a minimum width of 100 pixels for the
Task name column
$graph->scale->actinfo->SetColTitles(
array('Note','Task','Duration','Start','Finish'),a rray(30,100));
$graph->scale->actinfo->SetBackgroundColor('green:0.*@0.5');
$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10);
$graph->scale->actinfo->vgrid->SetStyle('solid');
$graph->scale->actinfo->vgrid->SetColor('gray');

// Uncomment this to keep the columns but show no headers
//$graph->scale->actinfo->Show(false);

// Setup the icons we want to use
$erricon = new IconImage(GICON_FOLDER,0.8);
$startconicon = new IconImage(GICON_FOLDEROPEN,0.6);
$endconicon = new IconImage(GICON_TEXTIMPORTANT,0.5);

// Set the variables for the database access:
$Host = "localhost";
$User = "root";
$Password = "";
$DBName = "zend";
$TableName = "tbl_projects";

$Link = mysql_connect ($Host, $User, $Password);
$Query = "SELECT * from $TableName ";
$Result = mysql_db_query($DBName, $Query);

$j=0;
while ($Row=mysql_fetch_array($Result)) {

$duration=$Row["Project_End"]-$Row["Project_Start"];
$data[] =
array(array($j,array($erricon,$Row["ProjectName"],$duration,$Row["Project_Start"],$Row["Project_End"])
,
$Row["Project_Start"],$Row["Project_End"],FF_ARIAL,FS_NORMAL,8));
++$j;
print $j;
}

// Create the bars and add them to the gantt chart
for($i=0; $i<count($data); ++$i) {
$bar = new
GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3]);
//if( count($data[$i])>4 )
//$bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
$bar->SetPattern(BAND_RDIAG,"yellow");
$bar->SetFillColor("gray");
$bar->progress->Set(0.5);
$bar->progress->SetPattern(GANTT_SOLID,"darkgreen");

//$bar->title->SetCSIMTarget(array('#1'.$i,'#2'.$i,'#3'.$i,'#4'. $i,'#5'.$i),array('11'.$i,'22'.$i,'33'.$i));
$graph->Add($bar);
}

// Output the chart
$graph->Stroke();

?>
You forgot three important parts here:

1. What do you expect to get?
2. What do you get? (No output because of the errors?)
3. Exactly what errors are you getting?

Also, have you checked the data you got from the database to ensure it
is right (reasonable values, correct type, etc.)?

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
js*******@attglobal.net
==================
Nov 7 '06 #3

P: n/a
You forgot three important parts here:

1. What do you expect to get?
2. What do you get? (No output because of the errors?)
3. Exactly what errors are you getting?

Also, have you checked the data you got from the database to ensure it
is right (reasonable values, correct type, etc.)?
Thanks for replying me and I am really sorry I forgot to post the error
message. But now I am able to get into some solutions but the problem
is that still I am getting an error. I have populated the database with
all fields. I am again posting the new code and this is the erro
message I am getting. So please help me its urgent and important for
me. I will be grateful to you.

<?php
// Gantt dyaminc from MySQL example
include ("C:/Program
Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph.php");
include ("C:/Program
Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_gantt.php");
include ("C:/Program
Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_date.php");

$host="localhost";
$user="root";
$password="";
$db="zend";

mysql_connect($host,$user,$password) or die("Could not connect: " .
mysql_error());
mysql_select_db($db) or die("Could not select database: " .
mysql_error());

$tasks = mysql_query("SELECT
task_position,
task_type_value,
task_name,
start_date,
end_date,
DATE_FORMAT(start_date, '%e/%m') as fstart_date,
DATE_FORMAT(end_date, '%e/%m') as fend_date,
CONCAT((end_date - start_date), ' ','days') as duration
FROM tasks, task_type
WHERE tasks.task_type_id=task_type.task_type_id");

if ($row = mysql_fetch_array($tasks)) {
do {
$position[] = $row["task_position"];
$type[] = $row["task_type_value"];
$name[] = $row["task_name"];
$start_date[] = $row["start_date"];
$end_date[] = $row["end_date"];
$fstart_date[] = $row["fstart_date"];
$fend_date[] = $row["fend_date"];
$duration[] = $row["duration"];
}while($row = mysql_fetch_array($tasks));
}
$lines = mysql_num_rows($tasks);
error_reporting(E_ALL);
$graph = new GanttGraph(800,640);
$graph->SetFrame(true,'white',.1);
$graph->SetMarginColor('white:1.7');
//$graph->SetShadow();
$graph->SetColor('white');
//$graph->SetBackgroundGradient('darkblue','white',GRAD_HOR ,BGRAD_MARGIN);

//$graph->title->SetColor('white');
$graph->title->Set("SimpleGantt");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);

$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
$graph->scale->week->SetFont(FF_ARIAL, FS_NORMAL, 8);
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
$graph->scale->month->SetFont(FF_ARIAL, FS_BOLD, 8);

$graph->scale->actinfo->SetColTitles (array('ID','Tasks',
'Duration','Start','End'),array(0,0));
$graph->scale->actinfo->SetFont(FF_ARIAL, FS_ITALIC, 8);

for($i=0; $i< $lines; ++$i) {
$activity = new GanttBar ($position[$i], array($position[$i],
$name[$i], $duration[$i],$fstart_date[$i],$fend_date[$i]),
$start_date[$i], $end_date[$i]);
// $activity = array($position[$i], $type[$i], $name[$i],
$start_date[$i], $end_date[$i]);
$activity ->SetPattern(BAND_RDIAG,"yellow");
$activity ->SetFillColor("red");
$activity->title->SetFont(FF_ARIAL, FS_NORMAL, 8);
$graph->Add($activity);
// $graph->CreateSimple($activity);
}
$graph->Stroke();
?>

Here is the Error Message :-
"Cannot autoscale Gantt chart. No dated activities exist.
[GetBarMinMax() start >= n]"

I will be waiting for your reply :)

Thanks and Regards,
Kuna

Nov 7 '06 #4

P: n/a
Kuna wrote:
>>You forgot three important parts here:

1. What do you expect to get?
2. What do you get? (No output because of the errors?)
3. Exactly what errors are you getting?

Also, have you checked the data you got from the database to ensure it
is right (reasonable values, correct type, etc.)?


Thanks for replying me and I am really sorry I forgot to post the error
message. But now I am able to get into some solutions but the problem
is that still I am getting an error. I have populated the database with
all fields. I am again posting the new code and this is the erro
message I am getting. So please help me its urgent and important for
me. I will be grateful to you.

<?php
// Gantt dyaminc from MySQL example
include ("C:/Program
Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph.php");
include ("C:/Program
Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_gantt.php");
include ("C:/Program
Files/xampp/htdocs/Graph/jpgraph-1.20.5/src/jpgraph_date.php");

$host="localhost";
$user="root";
$password="";
$db="zend";

mysql_connect($host,$user,$password) or die("Could not connect: " .
mysql_error());
mysql_select_db($db) or die("Could not select database: " .
mysql_error());

$tasks = mysql_query("SELECT
task_position,
task_type_value,
task_name,
start_date,
end_date,
DATE_FORMAT(start_date, '%e/%m') as fstart_date,
DATE_FORMAT(end_date, '%e/%m') as fend_date,
CONCAT((end_date - start_date), ' ','days') as duration
FROM tasks, task_type
WHERE tasks.task_type_id=task_type.task_type_id");

if ($row = mysql_fetch_array($tasks)) {
do {
$position[] = $row["task_position"];
$type[] = $row["task_type_value"];
$name[] = $row["task_name"];
$start_date[] = $row["start_date"];
$end_date[] = $row["end_date"];
$fstart_date[] = $row["fstart_date"];
$fend_date[] = $row["fend_date"];
$duration[] = $row["duration"];
}while($row = mysql_fetch_array($tasks));
}
$lines = mysql_num_rows($tasks);
error_reporting(E_ALL);
$graph = new GanttGraph(800,640);
$graph->SetFrame(true,'white',.1);
$graph->SetMarginColor('white:1.7');
//$graph->SetShadow();
$graph->SetColor('white');
//$graph->SetBackgroundGradient('darkblue','white',GRAD_HOR ,BGRAD_MARGIN);

//$graph->title->SetColor('white');
$graph->title->Set("SimpleGantt");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);

$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
$graph->scale->week->SetFont(FF_ARIAL, FS_NORMAL, 8);
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
$graph->scale->month->SetFont(FF_ARIAL, FS_BOLD, 8);

$graph->scale->actinfo->SetColTitles (array('ID','Tasks',
'Duration','Start','End'),array(0,0));
$graph->scale->actinfo->SetFont(FF_ARIAL, FS_ITALIC, 8);

for($i=0; $i< $lines; ++$i) {
$activity = new GanttBar ($position[$i], array($position[$i],
$name[$i], $duration[$i],$fstart_date[$i],$fend_date[$i]),
$start_date[$i], $end_date[$i]);
// $activity = array($position[$i], $type[$i], $name[$i],
$start_date[$i], $end_date[$i]);
$activity ->SetPattern(BAND_RDIAG,"yellow");
$activity ->SetFillColor("red");
$activity->title->SetFont(FF_ARIAL, FS_NORMAL, 8);
$graph->Add($activity);
// $graph->CreateSimple($activity);
}
$graph->Stroke();
?>

Here is the Error Message :-
"Cannot autoscale Gantt chart. No dated activities exist.
[GetBarMinMax() start >= n]"

I will be waiting for your reply :)

Thanks and Regards,
Kuna
OK, I'm not familiar with this specific package, but I looked at the
documentation.

The first thing which comes to mind is are your start and end dates in
the correct format? Have you tried echoing them to the screen to see
what's in them? According to the doc, they should be in the format
'2006-11-07' as a string. That's the default date format for MySQL in
my system, but yours may be different.

Also, I don't like your line:

$activity = new GanttBar ($position[$i], array($position[$i],
$name[$i], $duration[$i],$fstart_date[$i],$fend_date[$i]),
$start_date[$i], $end_date[$i]);

The second parameter according to the doc should be a text label; you're
passing it an array. That may be causing problems. But since you are
getting a chart with hardcoded data, it should be OK.

I'd recommend echoing all of your parameters to the screen to see if
they are really what you expect.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
js*******@attglobal.net
==================
Nov 7 '06 #5

P: n/a
Thanks Jerry,

Thanks a lot for helping I am able to solve it. Actually the problem is
that I have not inserted data in database I thought that first of all
it will show me the blank graph and after entering data it will show
the gantt charts accordingly but I was wrong I need to insert data in
the database so finally I am able to solve it. Thanks again for
cooperating me a lot.

Kuna. :)

Nov 8 '06 #6

This discussion thread is closed

Replies have been disabled for this discussion.