Perl在脚本之间传递数据而不使用查询字符串

时间:2013-03-06 15:23:35

标签: mysql perl

我是Perl的新手。编程新手。我为创建,搜索和查看“代理”编写了一些CGI屏幕。创建将记录插入到数据库表中,搜索显示记录的一些细节,允许用户选择他们希望使用的记录,并查看将记录拉出来并根据从搜索中选择的ID将其显示给用户(不是但它没有)。

在我的搜索页面上,我根据用户定义的搜索类型和搜索关键字显示页面。我希望根据用户搜索的记录选择将用户带到“查看代理”页面。

我希望通过从搜索屏幕上的用户选择的记录的数据库表中传递记录ID来实现此目的。有没有办法让我可以在不使用查询字符串的情况下可靠地传递脚本之间选择的ID(searchagent.pl到agent.pl)?此脚本仅供内部使用,不会发挥任何私人信息。

我确实环顾了一下,看到了全局变量和包,但我不太确定这些是我需要的。

提前感谢您的帮助。

编辑包含一些代码:

从以前的子例程中获取搜索类型和搜索关键字,并根据该查询运行SQL查询。将tabled输出返回到显示结果的不同子例程。我在表格输出中发生了奇怪的多链接事情,因为我有一些css样式,看起来整个行在moused时突出显示。

sub GetResults {

my $searchtype = $form{'radio'}; 
my $searchfor = $form{'searchby'};
my ($selectID, $selectname, $selectphone, $selectstate, $selectzip);

given ($searchtype) {
    when('a.agentid') { $selectID = "CHECKED"; }
    when('a.name') { $selectname = "CHECKED"; }
    when('c.phonenumber') { $selectphone = "CHECKED"; }
    when('addy.state') { $selectstate = "CHECKED"; }
    when('addy.zipcode') { $selectzip = "CHECKED"; }
    default { $selectID = "", $selectname = "", $selectphone     = "",$selectstate = "", $selectzip = "";  }
}



my $sth = $dbh->prepare("select a.AgentID, a.name, c.phonenumber, addy.state,   addy.zipcode from agent a inner join entity e on entityid = agentid inner join contact c on contactid = billingcontactid inner join address addy on addressid = physicaladdressid where $searchtype like '%$searchfor%' order by $searchtype;") or die "prepare statement failed: $DBI::errstr\n";


$sth->execute;

my ($table, $f1, $f2, $f3, $f4, $f5);


while (($f1, $f2, $f3, $f4, $f5) = $sth->fetchrow_array)
{
$table .= "<tr><td align=center><font size=\"4\" color=\"black\"><a name=\"idagent\" href=\"agent.pl?agentid=$f1\">$f1</a></font></td><td align=center><font size=\"4\" color=\"black\"><a name=\"idagent\" href=\"agent.pl?agentid=$f1\">$f2</a></font></td><td align=center><font size=\"4\" color=\"black\"><a name=\"idagent\" href=\"agent.pl?agentid=$f1\">$f3</a></font></td><td align=center><font size=\"4\" color=\"black\"><a name=\"idagent\" href=\"agent.pl?agentid=$f1\">$f4</a></font></td><td align=center><font size=\"4\" color=\"black\"><a name=\"idagent\" href=\"agent.pl?agentid=$f1\">$f5</a></font></td></tr>";
}

$sth->finish;

return ($table, $searchfor, $selectID, $selectname, $selectphone, $selectstate, $selectzip);

}

当选择记录时,我使用查询字符串传递所选记录的ID并运行此子例程并在另一个子例程中显示结果。我正在使用数组的值将值打印到文本字段中,并使用一些给定的语句来确定下拉列表。 有人说我有更快的方法来确定使用给定和列出所有50个州的州选择吗?

sub GetAgent {

my $sth = $dbh->prepare("select a.name, a.paidcommission, a.paidreferral, paddy.address1, paddy.address2, paddy.city, paddy.state, paddy.zipcode, maddy.address1, maddy.address2, maddy.city, maddy.state, maddy.zipcode, bc.name, bc.phonenumber, bc.phoneext, bc.phonenumber2, bc.phoneext2, bc.fax, bc.email, sc.name, sc.phonenumber, sc.phoneext, sc.phonenumber2, sc.phoneext2, sc.fax, sc.email from agent a inner join entity e on entityid = agentid inner join address paddy on paddy.addressid = physicaladdressid inner join address maddy on maddy.addressid = mailingaddressid inner join contact bc on bc.contactid = billingcontactid inner join contact sc on sc.contactid = salescontactid where a.agentid = $form{agentid};") or die "prepare statement failed: $DBI::errstr\n";


$sth->execute;

my @agentval = $sth->fetchrow_array;

$sth->finish;

return (@agentval);

}

1 个答案:

答案 0 :(得分:1)

如果您不想使用查询字符串,可以使用POST,请参阅:

How to hide my url params?

您也可以使用cookies:

http://perldoc.perl.org/CGI/Cookie.html

如果您刚刚开始,查询字符串是最简单的。