如何使用Perl在URL中放置过滤器表达式?

时间:2010-10-06 12:42:54

标签: perl hyperlink

我有关于使用filterexpression进行分页的问题。 这是用于过滤的代码:

     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>];

问题是我想在SORTORDER VARIABLE之后将过滤器表达式放在此HREF中,以便在我进行分页后进行过滤后,只显示限制在过滤器表达式中的那些记录。 我试着以这种方式合并..

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

但在网址中我得看到类似的内容:

            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”值放在如下的变量中:

             $string =~ m/^$Id/;  

但是当我尝试打印这个变量时,我什么也没得到。 请帮我解决一下。谢谢。

2 个答案:

答案 0 :(得分:1)

我认为你只需要逃避变量的输出。 URL保留某些变量%是其中之一,因此您最终会请求与您预期不同的内容。将您的链接输出代码更改为以下内容:

$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>];

答案 1 :(得分:0)

我不确定你是否正确存储你的变量。 这一行是搜索:

$string =~ m/^$Id/;

这是试图在$ string中搜索给定的$ Id。

如果你想像你说的那样“将$ Id值放在变量中”,它将如下所示:

$string = $Id;