将一个下拉列表连接到另一个perl

时间:2014-06-13 14:41:39

标签: html sql perl drop-down-menu cgi

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

2 个答案:

答案 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_arrayfetchrow_arrayref方法来浏览它们。

虽然通过获取JavaScript的供应商和联系人的组合列表或使用Ajax查询供应商的联系人,可能会更好地利用更现代的策略。

没有"连接"基本Perl CGI中的结构。您必须使用更现代的Web框架。

答案 1 :(得分:0)

这是一个非常广泛的问题。你有几个简单的选择。

1)创建一个包含供应商列表的HTML表单,接受(并清理!)用户的选择,然后返回联系人列表。这是一种传统的动态CGI形式。

2)使用JavaScript。这仅适用于合理数量的数据。有几种方法可以做到,但这个想法的要点是:a)将每个联系人与正确的供应商联系起来,b)最初隐藏所有联系人,c)选择供应商时,显示正确的联系人。

JQuery是一种用于此类操作的便捷JavaScript工具,可以神奇地隐藏许多浏览器不兼容问题。

3)你可以创建一个花哨的,现代的AJAX-ified形式,但是根据你的问题,这可能是过度的。

对不起,没有快速和肮脏的解决方案,但我希望能够在这里给你足够的信息,开始谷歌正确的方向!最好!