实例:HTML用户输入,自动生成柱状图(初学CGI)

实例:HTML用户输入,自动生成柱状图(初学CGI)

最近公司加域,为直观显示工作量,偶用刚学的一点CGI,做了如下一个报表,希望对需要的朋友有所帮助,同时也请大牛们帮看看,偶感觉CODE不够简洁(尤其在获取表单数据然后如何传递给CGI程序这个方面),纯属不咋懂瞎拼凑。初学,不要见笑!
     经测试,可行!注意在notepad编辑时,选择编码类型“UTF-8”。

运行环境:WINXP-SP2,IIS,notepad.
gd-html.html:

<html>
<head><title>**公司之办公PC加域状况</title></head>
<body>

<form METHOD=GET ACTION="http://localhost/CGI_Perl/gd.cgi">


<tr>
     <td nowrap><b>*老  大*</b><br>
     完成总量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     今日完成数量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     
</tr><hr>

<tr>
     <td nowrap><b>*老  二*</b><br>
     完成总量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     今日完成数量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     
</tr><hr>

<tr>
     <td nowrap><b>*老  三*</b><br>
     完成总量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     今日完成数量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     
</tr><hr>

<tr>
     <td nowrap><b>*老  四*</b><br>
     完成总量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     今日完成数量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     
</tr><hr>

<tr>
     <td nowrap><b>*老  五*</b><br>
     完成总量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     今日完成数量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     
</tr><hr>

<tr>
     <td nowrap><b>*老  六*</b><br>
     完成总量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     今日完成数量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     
</tr><hr>

<tr>
     <td nowrap><b>*老  七*</b><br>
     完成总量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     今日完成数量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     
</tr><hr>

<tr>
     <td nowrap><b>*老  八*</b><br>
     完成总量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     今日完成数量:</td>
     <td nowrap><input SIZE=1 MAXLENGTH=3 NAME="value"></td>
     
</tr><hr>


<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</html>

gd.cgi:
$QuerystringFromEnv=$ENV{QUERY_STRING};
@NameAndValuelists=split /&/,$QuerystringFromEnv;
foreach $NameAndValue(@NameAndValuelists)
{
   ($Name,$Value)=split /=/,$NameAndValue;
   $Name=~tr/+//;
   $Value=~s/%([\dA-Fa-f][\dA-Fa-f])/pack("c",hex($1))/eg;
push @values,$Value;
}

my ($whT,$whP,$lszT,$lszP,$lllT,$lllP,$dhT,$dhP,$yshT,$yshP,$zkT,$zkP,$fyT,$fyP,$lpT,$lpP)
= ($values[0],$values[1],$values[2],$values[3],$values[4],$values[5],$values[6],$values[7],
$values[8],$values[9],$values[10],$values[11],$values[12],$values[13],$values[14],$values[15]);


use GD::Graph3D;
use GD::Graph::bars3d;

print "Content-type: image/png;\n\n";


@data = (
    ["老大","老二","老三","老四","老五","老六","老七", "老八"],
    [ $whT, $lszT, $lllT, $dhT, $yshT, $zkT, $fyT, $lpT],
    [ $whP, $lszP, $lllP, $dhP, $yshP, $zkP, $fyP, $lpP]
  );
my $graph = GD::Graph::bars3d->new(800, 600);

$graph->set_x_label_font("C:/WINDOWS/Fonts/SURSONG.TTF",10);
$graph->set_y_label_font("C:/WINDOWS/Fonts/SURSONG.TTF",10);
$graph->set_x_axis_font("C:/WINDOWS/Fonts/SURSONG.TTF",10);
$graph->set_title_font("C:/WINDOWS/Fonts/SURSONG.TTF",16);
$graph->set_legend_font("C:/WINDOWS/Fonts/SURSONG.TTF",8);

$graph->set_legend("加域总量","今日加域数量");

$graph->set(
      x_label           => '-----加域成员-----',
      y_label           => '-----加域数量-----',
      title             => '**公司之办公PC加域状况图',
      y_max_value       => 120,
      y_tick_number     => 20,
      y_label_skip      => 2
  ) or die $graph->error;


my $gd = $graph->plot(\@data) or die $graph->error;
binmode STDOUT;
print $gd->png;
没看见你的cgi程序
兄弟,2楼不知是不是CGI程序
我进来的时候也只是看到html部分,没看到程序部分。
进来的早了点
获取表单数据然后如何传递给CGI程序这个方面 建议使用 CGI模块。。。
多谢#7!这ID应该是perlchina.org版主吧?


QUOTE:
原帖由 mouse.rice 于 2008-9-8 16:51 发表
多谢#7!这ID应该是perlchina.org版主吧?

不客气。

我的确在PerlChina挂名斑竹,但是用的不是Osment这个ID..

PS: PerlChina 貌似我最近登陆不上去 。。。
perl china 现在人气不行啊