如何从循环中显示结果(Perl cgi)

时间:2011-06-29 09:25:15

标签: perl cgi

我有一个问题!我已经构建了一个cgi文件,它正在执行以下操作:

  • 查询数据库的循环
  • 找到行时,构建图像并将其打印

一切正常。但现在我的问题是:如果我找到太多条目,我不想显示它们。例如:如果我的searchresult找到超过50行,则不显示它们!

伪代码如下所示:

*while row is found*    
{

 *increase counter of found rows*

 *build and print image*

}

如果我发现超过30个条目,网站将加载非常长(显示所有图像),你必须滚动太多。有时我发现超过600个条目,我根本不想显示它们!所以我必须先计算它们然后做出决定,如果我想看到它们。

但是我怎么能在计算它们之后显示行?因为我只能在while循环中打印行。

4 个答案:

答案 0 :(得分:1)

使用分页:

How can I do paging and sorting in a Perl CGI program?

或使用花哨的AJAX表来请求n个结果,并在“页面”之间设置回页和第四个按钮

答案 1 :(得分:1)

执行此操作的最有效方法是在SQL查询中添加LIMIT子句。如果你说,例如,

SELECT foo, bar, baz FROM my_table WHERE foo = 1 LIMIT 25;

然后查询将永远不会返回超过25行。虽然你也可以把一个计数器放到你的Perl循环中,它在第25行之后中止循环,这会使数据库做额外的工作,返回最后被抛弃的行;使用LIMIT可以避免浪费。

答案 2 :(得分:1)

不是在while循环中打印,而是将html存储到缓冲区变量中,然后在循环后打印它。

如果你有这样的事情:

while .... {
   print $html
}

将其更改为:

$LIMIT = 50;
while ... {
   $buf .= $html;
   $count ++;
   last if ($count > $LIMIT;
}
print $buf if ($count <= $LIMIT);

答案 3 :(得分:0)

如果您只想计算行并在完成50后退出循环,则可以使用以下内容:

my $count = 0;
while(*row is found* && $count++ < 50)
{
    *stuff*
}

但是如果它适用于你的情况,那么使用SQL LIMIT之类的东西会更好。