最速怪談選手権

他のご質問読んでもわからなくて笑
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";
とか考えて書いてみて、やったんですが、見事に失敗しました。どうすれば変数だけをわたせますか?教えてください。
不適切な表現とかありましたら勘弁してください。
補足など、待ってます。

A 回答 (4件)

#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行は何をしている?」がある程度
理解できないとやっぱり難しいです。
    • good
    • 0
この回答へのお礼

すいませんでした。
ありがとうございました。

お礼日時:2003/08/06 18:09

既に回答はでていますが、ちょっと趣向を変えて・・・


メインルーチンとサブルーチンを別ファイルとして分けるPerlの手法。
(その他、設定ルーチンと処理ルーチンという分け方もありかな?)

[main.plファイル]
require './sub.pl';
$str = 'abc';
&disp;
exit;

[sub.plファイル]
return(1); #1を返す位置がミソ
sub disp {
print $str;
return;
}

この回答への補足

ごめんなさい、
100%わかりません笑い

補足日時:2003/07/09 16:52
    • good
    • 0

#1さんのでかなり正解に近い気がします。


あたかも、cgi-b側のフォームから値が設定されたようにQUERY_STRINGに
設定すれば、cgi-b側の変更は最小限でできます。
しかし、ちょっと考慮すべきことがあって、知らない人では少々難しいです。
(ほんのちょっとしたことですが)

で、別の方法です。
requireでcgi-bを実行することを考えると、変数とその値はそのまま使えますから、
cgi-a側は
$renraku_flag=1;
$auag = $kuag;
$nowdate = "内容の文字" #他同じ名前の変数は改めてする必要なし
require "./CGI-B.cgi";
とします。

cgi-b側では、フォームのデータを読むところで
if($renraku_flag == 0) {
 従来のフォームデータを読む処理
 (ここに、$adate = xxxといった処理がくるはず)
}
とすれば、$renraku_flag=1の時はフォームから
読まずに、渡ってきた変数をそのまま処理するようにできるはずです。

ただし、requireで行うと
フォーム関係以外でもcgi-aとcgi-bで同じ変数名を使っている場合、
cgi-bにとって、本来初期値と違った値で処理が始まりますので、
結構まずいところがあるかも。

この回答への補足

ごめんなさい・・・わかるようでまったくわかりません(笑)

$nowdateってのはCGI-Bのアンケートフォームの内容を表示する変数で、それをCGI-Aに書くのは何ででしょうか?
ついでに、CGI-AのフォームとCGI-Bのフォームは全く別物で、Aの場合はそのフォームはCGIで出力?されるのに対してCGI-Bのフォームは別にb-foam.htmlというのを作っときます。です。はい。requireでAにBを読み込んで、あってるのでしょうか、というか、俺の説明へたくそ…

Aの変数をBに渡して、BはAの変数の結果と一緒にB-foam.htmlのデータをメールでおくってくれる・・・う~ん、説明が難しい(笑)すいません、劇初心者で・・・(ノ_・。)
とりあえず、それ、コピペして書いて動かしてみます。
で、
$nowdate = "内容の文字" #他同じ名前の変数は改めてする必要なし
って、なんすか?"内容の文字"とは・・・

補足日時:2003/07/09 16:39
    • good
    • 0

ちょっとご質問の意味がよく分かりませんが、cgi_aで一定の条件を満たした場合、その情報をつかってcgi_bを呼び出せば良いのですよね?



#cgi_a
$ENV{'QUERY_STRING'} = " $adate = $adate_a ・・・
require "./CGI-B.cgi";
って感じで、環境変数にセットして渡せは良いのではないですか?

私もあまり詳しくないのですが・・・

この回答への補足

>cgi_aで一定の条件を満たした場合、その情報をつかってcgi_bを呼び出せば良いのですよね?
呼び出すって言うか・・・cgi-Bのメールフォームに書いてもらって送信するときにCGI-Aのその情報を一緒にCGI-Bから送ってほしいという。Aに行ったら必ずBにくるようにしてあるんで。変数は確実にわたるかなって・・・
むりなんですかね・・・

補足日時:2003/07/09 16:53
    • good
    • 0

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