2010-10-06 52 views
0

我有关于使用filterexpression进行分页的问题。 这里的用于过滤的一段代码:如何使用Perl在URL中添加过滤器表达式?

 if ($q->param("Filter")) 
     { 
     $Id=$q->param('User_Id'); 
     $Name=$q->param('User_Name'); 

     if ($Id ne "") 
      { 
      $filterexpression= $filterexpression." UserId like '" .$Id. "%' and " ; 
      } 
     if ($Name ne "") 
      { 
     $filterexpression= $filterexpression." UserName like '" .$Name. "%' and " ; 
      } 
      } 
     $filterexpression= $filterexpression. " UserId > 0" 

和这里的传呼代码块:

print qq[<td><a href="UsersList.cgi? 
    pageNum=$pageN&limit=$limit&SortBy=$SortBy&SortOrder=$SortOrder">&lt;</a></td>]; 

的问题是,我希望把过滤器表达式在这HREF后排序顺序变量,从而使过滤后,当我去分页,那么只有那些限制在过滤器表达式的记录应显示。 我想这种方式合并..

  print qq[<td><a href="UsersList.cgi? 
      pageNum=$pageN&limit=$limit&SortBy=$SortBy&SortOrder=$SortOrder 
      &Filter=$filterexpression">&lt;</a></td>]; 

但在URL我看到这样的事情:

  http://localhost/cgi-bin/UsersList.cgi? 
       pageNum=1&limit=3&SortBy=UserId&SortOrder=Asc&filter=%20%20UserId%20like% 
       20'1%'%20and%20%20UserId%20>%200 

后来我试图把“$ ID”值在像varible:

   $string =~ m/^$Id/; 

但是,当我试图打印这个变量,我什么都没有。 请帮助我解决方案。谢谢。

回答

1

我想你只是需要逃避你的变量的输出。 URLs保留了一定的变量%,所以你最终要求的东西与你期望的不同。请将您的链接输出代码更改为以下内容:

$limitEnc = urlencode($limit); 
$pageNEnc = urlencode($pageN); 
$SortByEnc = urlencode($SortBy); 
$SortOrderEnc = urlencode($SortOrder); 
$filterexpressionEnc = urlencode($filterexpression); 
print qq[<td><a href="UsersList.cgi? 
      pageNum=$pageNEnc&limit=$limitEnc&SortBy=$SortByEnc&SortOrder=$SortOrderEnc&Filter=$filterexpressionEnc">&lt;</a></td>]; 
+0

我修改了代码,但只要我给过滤p21蛋白表达了其捐赠我这个错误“未定义的子程序和main :: urlencode在第277行调用。” – SUSH 2010-10-06 13:26:24

+1

这是拼写['uri_escape'](http://p3rl.org/URI::Escape)。 – daxim 2010-10-06 13:34:07

0

我不确定您是否正在存储变量。 这条线是一个搜索:

$string =~ m/^$Id/; 

这是试图寻找给定的$ id的$字符串。

如果你想“把$ Id值在varible”就像你说的,它应该是这样的:

$string = $Id; 
+0

但是,如果我把这个值,那么我将得到的记录只限于这个值。我的意思是说“如果我给1然后根据上面的语法我会得到记录限于userId 1,但我想USERID从1开始的记录(如1,10,11,12..SO ON).. – SUSH 2010-10-07 05:39:11

相关问题