0

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

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

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

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

在此先感谢您的帮助。

编辑以包含一些代码:

从先前的子程序中获取搜索类型和搜索关键字,并基于此运行 sql 查询。将表格输出返回到显示结果的不同子例程中。我在表格输出中发生了奇怪的多链接事情,因为我有一些 css 样式,使得鼠标悬停时看起来整行都突出显示。

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

}
4

1 回答 1

1

如果不想使用查询字符串,可以使用 POST,见:

如何隐藏我的网址参数?

您还可以使用 cookie:

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

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

于 2013-05-16T06:12:19.063 回答