我刚刚开始使用Perl CGI和MySQL数据库与html模板。我有一个表称为“保留”和模板称为显示。html。现在我显示最大的reserve_id。但如何显示在之间的id和只有id当reserve_status是3。
1.表数据[预留]:
reserve_id reserve_status
34001 2
34002 2
34003 3
34004 3
35001 3
35002 3
35003 2
36000 3
36000 2
37000 3
37001 3
37002 2
40000 1
40001 3
40002 1
1.文件[教科书公用学生]:
sub GetReceiptNumber(){
my $self = shift;
my $status = shift;
my $dbh = $self->{'dbh'};
my $sql = "select *, MAX(reserve_id) as id from reserve where reserve_status = ? ";
my @keys = ('reserve_status');
return $dbh->selectall_hashref($sql, @keys, undef, $status);
}
1.文件[索引.cgi]:
use TextBookCommonStudent;
use Data::Dumper;
use CGI;
my $TextBookCommonStudent = TextBookCommonStudent->_new()->DBConnect();
get '/Show' => sub {
my $self = shift;
my @breadcrumb = ('Show');
my $ReceiptNumber = $TextBookCommonStudent->GetReceiptNumber('3');
my $number = $ReceiptNumber->{'3'}->{'id'};
$self->stash('ReceiptNumber'=> $number);
$self->stash('breadcrumb'=> \@breadcrumb);
$self->render('Show');
};
1.模板[Show.html]:
<%
use Data::Dumper;
my $ReceiptNumber = stash('ReceiptNumber');
%>
<div class="row">
reserve numbers: <%= $ReceiptNumber %>
</div>
输出当前显示:
reserve numbers: 40001
但我想通过以下几点来说明:
reserve numbers: 34003~35002,36000,37001~37002,40001
我怎样用perl cgi显示上面的数据?
1条答案
按热度按时间92dk7w1h1#
我刚开始使用Perl CGI
你不知道在2022年读到这篇文章有多令人沮丧。请阅读CGI::Alternatives并重新考虑。
请告诉我们您使用的是什么Perl模块。我无法识别您模板中的
<%= $ReceiptNumber %>
语法。是什么提供了您在CGI代码中使用的get => '/Show' { ... }
语法?它不是标准的CGI功能。但是,最主要的问题似乎是需要更改SQL。您当前的SQL是:
这将返回三列,其中第三列将始终是相同的值。这似乎是一种相当奇怪的查询所需数据的方式-特别是在代码中,您忽略了大多数数据,而只是从数据结构中提取了一个
receipt_id
。我刚刚注意到,您使用了
selectall_hashref()
,并将其作为键列。因此,您为每个状态为3的保留选择了一行。但是,由于DBI在处理结果集时,每次都会覆盖散列中的相同值,因此散列中最终只会有一个键/值对。总而言之,你的代码看起来相当混乱,而且如果你不知道你要做什么和你要使用的工具,你的问题很难回答。