• ベストアンサー

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

(1)Perl(cgi)から(2)Perl(cgi)へ引数(データ)を渡す方法を教えてください。 プログラムの流れとしましては、 (1):データベースを検索&該当結果の番号をリンクで表示 (2):(1)でクリックしたリンクと対応する結果を表示 となっております。 また、セキュリティの事を考えて「POST」で送りたいと考えています。 よろしくお願いいたします。

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

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.2

表題を見たときに「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を書くことも可能ですが、対応していないブラウザがあるので要注意

kk1159
質問者

お礼

説明不足ですみません。 早速やってみます。 ありがとうございました!!!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.3

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

すると、全ての回答が全文表示されます。
回答No.1

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

kk1159
質問者

お礼

アドバイスありがとうございます! 私の書いた内容が分かりにくかったすよね。。。 イメージは↓な感じなんです。 (1)[html]:入力画面 (2)[cgi]:(1)の入力値をデータベース内のデータと比較 &該当する各データのリンクを表示 (3)[cgi]:(2)でクリックしたリンクに該当するデータを表示 それで(2)→(3)でデータを渡す方法が分からず困っています。 データが大きいので無理やりcookieを使うのは難しいので、 URLにパラメータとしてくっつける方法にしようかと考えています。 (見栄えよりも、作る方を優先しまして…)

すると、全ての回答が全文表示されます。