在Perl中,我有一个脚本,它根据包含供应商列表的数据库创建一个下拉列表。我想使用第一个列表的选择来填充第二个列表,其中包含给定特定供应商的不同联系人的值。
即。 Haliburton是供应商......一旦被选中,请联系Jim,Paul,George,可以在旁边的联系人列表中找到。
目前我正在分别获取供应商列表和联系人列表。 如何根据要在CGI popup_menu中填充的数据库中的供应商获取联系人列表?
以下是我目前的代码:
#!c:\perl\bin\perl.exe
use CGI;
use strict;
use warnings;
require ("data_eXchangeSubs.pm");
$query = new CGI;
print $query->header(-expires=>'-1d');
print $query->start_html(-title=>'Dex Vendor Testing',
-bgcolor=>'white'
);
my $dataX = ${ConnectToDatabase($main::DB1, $main::DBEnv)};
$resultSet = $dataX->Execute("select vendor from vendor_info group by vendor");
my @list_of_vendors;
while(!$resultSet->EOF) {
push @list_of_vendors, $resultSet->Fields("vendor")->Value;
$resultSet->MoveNext;
}
从这里开始,我想从vendor_info数据表填充另一个带有联系人的下拉列表。目前我正在进行单独的查询执行,但我想从前一个数组中选择一个给定的供应商,并仅填充特定于所选供应商的那些联系人。
我知道我必须改变联系人的价值但不知道如何:(
$resultContact = $dataX->Execute("select contact from vendor_info");
my @list_of_contacts;
while(!$resultContact->EOF) {
push @list_of_contacts, $resultContact->Fields("contact")->Value;
$resultContact->MoveNext;
}
print $query->popup_menu(
-name => 'vendors'
, -values =>\@list_of_vendors
, -default => $default_vendor
, -style=> 'width:200px'
);
print $query->popup_menu(
-name => 'contacts'
, -values => \@list_of_contacts
, -default => $default_vendor
);
print $query->end_html;
答案 0 :(得分:0)
使用CGI,您需要使用CGI::param
方法。
# I know the name of the select is "vendors",
# but it makes more sense calling it here with 'vendor'
# *you would have to change the name of the element*
my $vendor_name = $query->param( 'vendor' );
我不确定您的数据库对象是如何工作的(看起来像Microsoft迭代模型),但在DBI中使用正确的参数化查询方式,它看起来像这样:
my $stmt = $dbh->prepare( 'select contact from vendor_info where vendor_name=?' );
$stmt->execute( $vendor_name ); # binds the variable to the query.
然后,您逐步查看查询行并构建联系人列表。当然,您很可能会使用fetchrow_array
或fetchrow_arrayref
方法来浏览它们。
虽然通过获取JavaScript的供应商和联系人的组合列表或使用Ajax查询供应商的联系人,可能会更好地利用更现代的策略。
没有"连接"基本Perl CGI中的结构。您必须使用更现代的Web框架。
答案 1 :(得分:0)
这是一个非常广泛的问题。你有几个简单的选择。
1)创建一个包含供应商列表的HTML表单,接受(并清理!)用户的选择,然后返回联系人列表。这是一种传统的动态CGI形式。
2)使用JavaScript。这仅适用于合理数量的数据。有几种方法可以做到,但这个想法的要点是:a)将每个联系人与正确的供应商联系起来,b)最初隐藏所有联系人,c)选择供应商时,显示正确的联系人。
JQuery是一种用于此类操作的便捷JavaScript工具,可以神奇地隐藏许多浏览器不兼容问题。
3)你可以创建一个花哨的,现代的AJAX-ified形式,但是根据你的问题,这可能是过度的。
对不起,没有快速和肮脏的解决方案,但我希望能够在这里给你足够的信息,开始谷歌正确的方向!最好!