こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Perl(cgi)からPerl(cgi)への引数

(1)Perl(cgi)から(2)Perl(cgi)へ引数(データ)を渡す方法を教えてください。

プログラムの流れとしましては、
(1):データベースを検索&該当結果の番号をリンクで表示
(2):(1)でクリックしたリンクと対応する結果を表示
となっております。

また、セキュリティの事を考えて「POST」で送りたいと考えています。

よろしくお願いいたします。

投稿日時 - 2011-02-28 03:16:12

QNo.6555836

すぐに回答ほしいです

質問者が選んだベストアンサー

表題を見たときに「CGIからCGI」ということで、「そりゃ無理」だと思って内容を見たら普通の処理のことだったので遅まきながら回答させていただきます。

要するにひとつ目のCGIが出力したHTMLリンクから次のCGIを呼び出すということですね。

方法というか書き方はいくつかありますが、わかりやすい例をひとつ
ひとつ目のCGIがリンクをはき出す際にリンク先をJavaScriptにしてJavaScriptからフォームにパラメータをセットしてサブミットする方法です。

お役に立てればさいわいです。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<script language="javascript">
<!--
 function fCallNextCGI(P1,P2,P3,...Pn){
  // パラメータ設定
  document.form.H1.value = P1;
  document.form.H2.value = P2;
  document.form.H3.value = P3;
    :
  document.form.Hn.value = Pn;
  // 送信
  focument.form.submit();
 }
//-->
</script>

<body>

<!-- ここからフォーム -->
<form name="form" method="POST" action="NextCGI.cgi">
 <input type="hidden" name="H1" value="">
 <input type="hidden" name="H2" value="">
 <input type="hidden" name="H3" value="">
   :
 <input type="hidden" name="Hn" value="">
</form>
<!-- ここまでフォーム -->

<!-- ここからリンクリスト -->
<a href="#" onClick="fCallNextCGI('文字列1','文字列2','文字列3',...'文字列n')">リンク1</a><br />
<a href="#" onClick="fCallNextCGI('文字列1','文字列2','文字列3',...'文字列n')">リンク2</a><br />
<a href="#" onClick="fCallNextCGI('文字列1','文字列2','文字列3',...'文字列n')">リンク3</a><br />
   :
<a href="#" onClick="fCallNextCGI('文字列1','文字列2','文字列3',...'文字列n')">リンクn</a><br />
<!-- ここまでリンクリスト -->

</body>
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

蛇足
 1.「そりゃ無理」と思った理由:CGIがCGIを多重に呼び出せる機構があったら無限呼出でサーバを簡単にダウンさせることができるため、サーバサイドのスクリプトを多重に起動することはできないような仕組みになっています(例:CGIで出力されたHTML内にSSIを記述して動作を期待すること)。 ただしCGIから呼び出されたプログラムが別のプログラムを起動して処理を受け渡すことは可能です。
 2.上記例でリンクタグの「href=""」内に直接JavaScriptを書くことも可能ですが、対応していないブラウザがあるので要注意

投稿日時 - 2011-03-01 11:21:44

お礼

説明不足ですみません。
早速やってみます。

ありがとうございました!!!

投稿日時 - 2011-03-01 22:49:07

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

ANo.2です。
たびたびすいません。
忘れていたことをみっつ
1.提示しました例は、一つ目のCGIがはき出すHTMLの例です
2.文字コードには気をつけましょう。文字化けによる誤動作がいやならS-JISは使わないことです。
3.POSTメソッドの方がGETメソッドと違ってセキュリティ上安全ということはありません(多少のリスクは減りますが)。受信する側のCGIの作り方しだいです。

投稿日時 - 2011-03-01 11:52:53

ANo.1

少しイメージがわかりにくいので、的外れかもしれないですが、
ひとつのhtmlに<form></form>は複数かけるので別のCGIにpostしたり、
同じCGIに別のhiddenデータを送ることは可能だと思います。

投稿日時 - 2011-02-28 22:20:04

お礼

アドバイスありがとうございます!
私の書いた内容が分かりにくかったすよね。。。

イメージは↓な感じなんです。
(1)[html]:入力画面
(2)[cgi]:(1)の入力値をデータベース内のデータと比較
&該当する各データのリンクを表示
(3)[cgi]:(2)でクリックしたリンクに該当するデータを表示

それで(2)→(3)でデータを渡す方法が分からず困っています。
データが大きいので無理やりcookieを使うのは難しいので、
URLにパラメータとしてくっつける方法にしようかと考えています。
(見栄えよりも、作る方を優先しまして…)

投稿日時 - 2011-03-01 02:54:08

あなたにオススメの質問