けっこうどの文献みても、htmlのinputからのデータ引渡しについては結構書いてあるのですが、cgiで使用した変数を、次のcgiへ引き継ぐ方法はあまり書かれていません。(見ている文献が初心者用ばかりだという理由もあるかと思いますし、どっちにしろちんぷんかんぷんなのですが・・)
以下のような例の場合に、abc.cgiおよび、xyz.cgiには、どのような記述をすればよろしいのでしょうか?


abc.cgi csvデータの取り込み $a="Iam2888" $b=2888
 ↓
 ↓ $a、$bのデータを受け渡し
 ↓
xyz.cgi 変数の引継ぎ

質問が、初歩的すぎて申し訳ありません

A 回答 (3件)

 abc.cgi、xyz.cgi は、それぞれ HTML を出力するのですか?


だとすれば、直接変数の値を渡す方法はないと思います。

 やはり出力する HTML に HIDDEN データとして変数名と値を持たせ、画面遷移を行うボタンで(リンクで遷移するならJavaScriptで)送信するようにすれば、POST で渡せますよね。

 あるいは、init.pl などに csv データの取り込みルーチンを書き、両 CGI から require すれば、引継ぎではないですが値は共有できると思います。
(csv が、リアルタイムに更新されなければの話ですが)
    • good
    • 0

容量が小さいのであれば、abc.cgiの出力として、<input type="hidden">タグを送り出し、xyz.cgiを呼び出すときにデータを渡すようにすればいいと思います。


容量が大きくて、ブラウザを経由して渡すのが難しい場合には、たとえば、クッキーかhiddenタグで、abc.cgiで作成したデータファイルの名前をブラウザに渡し、xyz.cgiでそのファイル名のデータファイルを読み出して処理すればうまく行くと思います。
データファイルの名前は、たとえば
time . $$
というような値を使えば、重複の可能性はほとんどないと思います。$$は、プロセス番号を表す特殊変数です。
なお、ファイル名がおかしくなっていないかどうかきちんとチェックしないと、セキュリティホールになりかねないのでご注意を。

この回答への補足

ブラウザを経由してってことは、それってたぶんGETですよね?
postで渡すっていうのは無理なのでしょうか、やり方としてやっぱりクッキーしかないんでしょうかねぇ。
クッキーもちんぷんかんぷんですけど(涙)
なんか、初心者でも明朗に理解できる、get以外の手っ取り早い方法ってありませんでしょうか?雛形書いてくれたら助かるなぁ。

補足日時:2001/07/09 07:58
    • good
    • 0

一回、別のデータファイルにCGIから書き込んで


次のCGIファイルを使うときにまた読み出せばいいのではないでしょうか?

この回答への補足

そうすると、多数の人が利用していた場合、タイミングによっては、一度書き換えた別のデータファイルが、他人によって作業が終了しないうちに書き換えられるって可能性ありませんか?
どなたか、POSTによるperlの雛型を提示していただくと助かります。

補足日時:2001/07/07 23:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCGI1からCGI2への変数の受け渡しと表示

他のご質問読んでもわからなくて笑
CGIの知識は、書いてあるとおりに設定を変えたりhtmlとか書き出すところの内容変えたり…いらないところに#を付けて、うごくかなぁってドキドキしている程度です(笑)わかりにく。

今回は、まず、キリ番のCGI-Aがあります。そのCGI-Aはキリ番GETしたら登録formが出てきます。登録があったらメールが管理人宛てにくるんです、その時、変数で、フォームで書いてもらった内容+その人の取ったカウント数・時間・エージェント・HOSTが、一緒に記載されてきます。
CGIではこんな感じ↓

print MAIL "時間 : $adate\n";
print MAIL "ホスト: $ahost\n";
print MAIL "使用PC: $kuag\n";
print MAIL "名前 : $aname\n";
print MAIL "カウント : $acount\n";
print MAIL "メール: $email\n";

ってちゃんと送られてきます。
で、この変数なんですが、同ディレクトリにあるメールフォームのCGI-Bに渡して(CGI-Aで登録したら必ずCGI-Bにくると)、CGI-Bが送るメールにも乗せたいのです。CGI-Bのなかのメールの雛型?の部分に
ここです↓
#メール内容
$body.="取得時間 : $adate\n";
$body.="ホスト : $ahost\n";
$body.="使用PC : $auag\n";
$body.="メール : $email\n";
$body.="内容 : $nowdate\n";

内容ってのはCGI-Bのメールフォームに書いてもらったことを表示します。でその上の4つなんですが、それがCGI-Aの変数で、これをCGI-Bのメールに一緒に送らせたいわけです。

そこで、CGI-Aの変数をCGI-Bに持ってくるにはどうするか、素人なりに考えて

#キリ番からの情報取得
require "./CGI-A.cgi";
とか考えて書いてみて、やったんですが、見事に失敗しました。どうすれば変数だけをわたせますか?教えてください。
不適切な表現とかありましたら勘弁してください。
補足など、待ってます。

他のご質問読んでもわからなくて笑
CGIの知識は、書いてあるとおりに設定を変えたりhtmlとか書き出すところの内容変えたり…いらないところに#を付けて、うごくかなぁってドキドキしている程度です(笑)わかりにく。

今回は、まず、キリ番のCGI-Aがあります。そのCGI-Aはキリ番GETしたら登録formが出てきます。登録があったらメールが管理人宛てにくるんです、その時、変数で、フォームで書いてもらった内容+その人の取ったカウント数・時間・エージェント・HOSTが、一緒に記載されてきます。
CGIではこんな...続きを読む

Aベストアンサー

#2です
>ごめんなさい・・・わかるようでまったくわかりません(笑)
のようですので、ピンとくるところがなかったようですね。
それにプログラムの修正個所を完全に書いた訳ではないでの
コピペしても全く動かないです。

で、別の方法です。
質問者さんのしたいことは、
 従来のcgi-aの処理のあと(メールを送った後)
 cgi-bでやっているメール送信も行いたい。
ですよね。

cgi-bの中で、実際にメールを送っている処理部分はどこか解りますか?
その部分をcgi-aに継ぎ足すのはどうでしょう。
当然、送る内容は変数から作っていますから
これにcgi-aの変数をコピーするなり、新たに値を設定してください。
 すなわち
 $body.="取得時間 : $adate\n";
 $body.="ホスト : $ahost\n";
 $body.="使用PC : $auag\n";
 $body.="メール : $email\n";
 $body.="内容 : $nowdate\n";
 の、$adateや、$ahostなどの変数のこと。

cgi-aに継ぎ足す際に、メールを送る処理以外を含めると
正しく動作しない可能性が高いです。
ですから、「この1行は何をしている?」がある程度
理解できないとやっぱり難しいです。

#2です
>ごめんなさい・・・わかるようでまったくわかりません(笑)
のようですので、ピンとくるところがなかったようですね。
それにプログラムの修正個所を完全に書いた訳ではないでの
コピペしても全く動かないです。

で、別の方法です。
質問者さんのしたいことは、
 従来のcgi-aの処理のあと(メールを送った後)
 cgi-bでやっているメール送信も行いたい。
ですよね。

cgi-bの中で、実際にメールを送っている処理部分はどこか解りますか?
その部分をcgi-aに継ぎ足すのはどうでしょう。
...続きを読む

QCGI→CGI変数の引き継ぎはどうするのですか?

初歩的な質問ですがよろしくお願いします。
画面から入力した変数は「GET」などでCGIに値を引き継ぎますが、CGIから別のCGIを起動して最初のCGIでファイルから読み込んだ値や代入された変数を次のCGIに引き継ぐにはどのようにすればよろしいのでしょうか?よろしくお願いします。

Aベストアンサー

CGI→CGIなどのファイル間では
require './xxx.cgi';
を記述しておけば参照可能です。

CGI→HTML(ブラウザ)→CGIなどの場合は
FORMで変数や値を渡します。
隠しフィールドなどを使うとスムーズに変数をCGIへ送信することができます。
<input type=hidden name=変数名 value=値>
※基本的にはGETよりPOSTの方がよいです。理由は省略します

Q$abc == 0;

フリ-CGIを使ってCGIの勉強中です、
今使っているフリ-CGI掲示板の中に下記のコ-ドがあります、
$abc == 0;

$abc = 0; の間違いだと思うのですが別の意味があるのですか。

Aベストアンサー

こんにちは。

cgiの勉強中ということですが。
質問される前に本などごらんになりましたか??
どういったことから間違いだと思うのでしょうか??

$abc == 0;
は間違いではありません。
==と=の違いをご存知ですか??

$abc == 0;
は「$abcが0である」
$abc = 0;
は「$abcに0を代入する」
ということです。

参考URL:http://tohoho.wakusei.ne.jp/www.htm

Qcgiから別のcgiへの変数の渡し方

cgiからべつのcgiを起動するとき、
アドレス/a.cgi?xxx=aaa
で変数xxxにaaaを入れてa.cgiに渡せると聞きましたが
a.cgiでは、どのように受け取ればいいのでしょうか?
コーディング例とかをお願いします。

Aベストアンサー

この方法はGET方式と言われるデータの受け渡し方法で、<FORM method=POST ACTION=a.cgi>で渡すPOST方式があります。

どちらも、受け取る場合は環境変数を解析してCGIの変数にする必要があります。

自分で一からコーディングするのはかなりしんどいと思いますので、簡単にできる方法をお教えします。

cgi-lib.plというライブラリを使う事によって、簡単に受け取る事が可能です。
例えば、a.cgi?name=kimvとすると、渡されたCGI内部では $in{'name'}にkimvが代入されています。

コーディングでは
require 'cgi-lib.pl';
&ReadParse(*in);
とするだけです。

cgi-lib.plの入手場所は様々なサイトからダウンロードできますし、参考書の付録CDにもあります。
以下にダウンロードできるサイトを掲載します。

また最新版は、ケンブリッジ大にある、作者Steven Brenner 氏のHPからダウンロード可能です。

http://cgi-lib.berkeley.edu/

参考URL:http://www.net-easy.com/perl/perl.html

この方法はGET方式と言われるデータの受け渡し方法で、<FORM method=POST ACTION=a.cgi>で渡すPOST方式があります。

どちらも、受け取る場合は環境変数を解析してCGIの変数にする必要があります。

自分で一からコーディングするのはかなりしんどいと思いますので、簡単にできる方法をお教えします。

cgi-lib.plというライブラリを使う事によって、簡単に受け取る事が可能です。
例えば、a.cgi?name=kimvとすると、渡されたCGI内部では $in{'name'}にkimvが代入されています。

コ...続きを読む

Q再度:cgiから別のcgiへの変数の渡し方

再度教えていただきたいのですが。
前回 http://oshiete1.goo.ne.jp/kotaeru.php3?q=111919
で 1階層目は動いたのですが、2階層目では動きませんでした
ブラウザ(IE)のアドレスで何かをさわって更新すると受け取れます。
TOP.CGIより
<frame src=\"./B.cgi?UserID=$USR\" name=\"ue\" > A.CGIで受け取れました
A.CGI より
<FORM METHOD=POST ACTION=\"WT.CGI?U=$USR\" TARGET=\"_top\">
WT_CGIで受け取れませんでした。(ここでアドレス欄をさわって更新)
WT_CGIより
Location: ./TOP.CGI?U=$USR TOP.CGIで受け取れました。

Aベストアンサー

ごめんなさい。
質問の意味が判らないのですが・・・

要はGET方式では動いて、POST方式では上手く動かなかったと言う事なんでしょうか?

ちなみに
<FORM METHOD=POST ACTION=\"WT.CGI?U=$USR\" TARGET=\"_top\">
は無意味です。

これをやるとすると、


<FORM METHOD=POST ACTION="WT.CGI" TARGET="_top">

<INPUT TYPE=hidden name="U" value=$USR>
<INPUT TYPE=submit name=button value="送信する">
</FORM>

とすべきです。

チェックすべき点は
<FORM>~</FORM>が一対である事
送信用のボタンが存在している事

です。


このカテゴリの人気Q&Aランキング

おすすめ情報