cgi perl里如何改变某些字条符的颜色呀



QUOTE:
<form method=post action="cgi-pl">
  <select name="_date" id="_date" onChange="dosubmit(this);">
     <tmpl_var name=datelist>
  </select>
</form

我的cgi环境没搭好,没法测试。所以给据选择的时间显示列表的代码没写。


QUOTE:
原帖由 ynchnluiti 于 2008-12-31 17:59 发表

我的cgi环境没搭好,没法测试。所以给据选择的时间显示列表的代码没写。

非常感谢,呵呵, 这段放在哪里?
帮忙帮到底嘛

#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use HTML::Template;

use IO::File;

my $data_file = 'Your_file';  # Change it
my $file = IO::File->new($data_file);

my $tmpl_file = 'log.tmpl';  # Change it
my $template = HTML::Template->new(filename => $tmpl_file);

my $q = CGI->new;

my @data = $file->getlines;

my %dates = ();
for (@data) {
        $dates{(split /:/, (split)[0])[0]} = 1;
}

my @dates = sort keys %dates;
my $selected = $q->param('rundate') || shift @dates;
@dates = map { {date => $_} } @dates;

my @log;
for (@data) {
        my %t;
        @t{qw/date computer platform command result/} = (split);        
        push @log, \%t if $t{date} =~ /$selected/;
}

$template->param(selected        => $selected,
                                 log                => \@log,
                                 dates                => \@dates);

print $q->header, $template->output;


————————————————————————
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
  <meta http-equiv="Content-Type" content="text/html; charset=gbk">
  <TITLE> Log </TITLE>
  <script>
      function dosubmit( dateobj ) {
          dateobj.form.submit();
      }
  </script>
</HEAD>

<BODY>

<form>
<select name="rundate" onChange="dosubmit(this);">
<option value=<tmpl_var name="selected"> selected><tmpl_var name="selected"></option>
<tmpl_loop name="dates">
<option value=<tmpl_var name="date"> ><tmpl_var name="date"></option>
</tmpl_loop>

</select>
</form>

  <table border="1">
  <tr><th>日期</th><th>计算机名</th><th>系统平台</th><th>运行命令</th><th>运行结果</th><tr>
  <tmpl_loop name="log">
        <tr>
                <td><tmpl_var name=date></td><td><tmpl_var name=computer></td><td><tmpl_var name=platform></td><td><tmpl_var name=command></td><td><tmpl_var name=result></td>
        </tr>
  </tmpl_loop>
  </table>
</BODY>
</HTML>
默认用 第1天 的数据,当然,可以改,比如用 当天 的数据


QUOTE:
原帖由 huanghaojie 于 2008-12-31 18:22 发表


非常感谢,呵呵, 这段放在哪里?

我只是把你你代码修改了一点。这段已经在模板里了。



QUOTE:
原帖由 cobrawgl 于 2008-12-31 18:29 发表
帮忙帮到底嘛

#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use HTML::Template;

use IO::File;

my $data_file = 'Your_file';  # Change it
my $file = IO::File->new($data_file) ...

哪错了,怎么web里什么也出不来,没改之前还能出来,
我把该改的两个地方的路径都改了呀,没问题,怎么就出来 呢

感谢cobrawgl  和 ynchnluiti  两位达人,呵呵, 我的搞定了, 晚上注意力不集中,老搞错,祝你俩2009快乐。!!!!
下面的小问题再慢慢搞定。
新年新问题!

my @data = $file->getlines;

my %dates = ();
for (@data) {
        $dates{(split /:/, (split)[0])[0]} = 1;
}

my @dates = sort keys %dates;
my $selected = $q->param('rundate') || shift @dates;
@dates = map { {date => $_} } @dates;

这些东东好难懂
$dates{(split /:/, (split)[0])[0]} = 1;  是意思呀,  我在试着把默认的页面改成最后一次运行的日期。而不是第一次运行的日期。



QUOTE:
原帖由 huanghaojie 于 2009-1-4 15:06 发表
$dates{(split /:/, (split)[0])[0]} = 1;  是意思呀

看看split函数

(split)[0] 把$_按空白分隔组成一个列表,取第一个。
(split /:/, (split)[0])[0] $_按空白分割的第一个字段再按:分割的第一个字段
$dates{(split /:/, (split)[0])[0]} = 1; #给以(split /:/, (split)[0])[0]为键值的散列%dates的元素赋值


QUOTE:
原帖由 huanghaojie 于 2009-1-4 15:06 发表
新年新问题!

my @data = $file->getlines;

my %dates = ();
for (@data) {
        $dates{(split /:/, (split)[0])[0]} = 1;
}

my @dates = sort keys %dates;
my $selected = $q->param('runda ...


my $selected = $q->param('rundate') || shift @dates;

改为

my $selected = $q->param('rundate') || pop @dates;