0

私はPerlが初めてです。プログラミング初心者。「エージェント」を作成、検索、および表示するための CGI 画面をいくつか作成しました。Create はレコードをデータベース テーブルに挿入し、Search はレコードの詳細を表示し、ユーザーが操作したいレコードを選択できるようにし、View はレコードを引き出して、検索で選択した 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 を使用できます。以下を参照してください。

URL パラメータを非表示にする方法は?

Cookie を使用することもできます。

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

始めたばかりの場合は、クエリ文字列が最も簡単です。

于 2013-05-16T06:12:19.063 に答える