お世話になっております。よろしくお願いします。
if 文の分岐が期待どおりにできませんので、教えていただければ幸いです。
あるメール送信フォーム (ソースは (1) )
(1) http://www.niji.or.jp/home/ashizuka/data/postmail01.htm
に、次のような if 文を記述しています。
(2) if ($in{'language'} eq english)
{
(a)
}
else
{
(b)
}
この cgi を呼び出すのに、
(ア) http://www.niji.or.jp/home/ashizuka/postmail01/postmail01.cgi
(イ) http://www.niji.or.jp/home/ashizuka/postmail01/postmail01.cgi/?
language=english
という2つの呼び出しかたを試すと、(ア) はもちろん『偽』ですが、 (イ) の呼び出しかたで
も (b) を実行、つまり『偽』と判定されてしまいます。
もちろん、このスクリプトの中には、ここ以外にも if 文がたくさんあり、これらは私が思っ
たとおりに動いていますので、構文、文法で間違った理解をしていないように思うのですが、何
か原因がおわかりになりましたらお教えいただけないでしょうか。どうかよろしくお願いいたし
ます。
他にも参照しているスクリプトがあるようですが……
POSTでパラメータを読み取っている場合、URLにあるパラメータ読むようになっていない
のでは?
まずは、渡されたパラメータを表示するだけのcgiにして、
うまく受け取っているか確認してみてはどうでしょうか?
瀬戸っぷさん、ありがとうございます。
まず前回の (イ) は間違いで、正しくは
(ウ) http://www.niji.or.jp/home/ashizuka/postmail01/postmail01.cgi?
language=english
です。すみません。
(ウ) をクリックすると、このフォームの第一画面が表示されますが、この画面のソースを見る
と、パラメータを第二画面に引き継ぐための
(エ) <input type=hidden name=language value=english>
というタグができていることがわかります。
また、
(オ) http://www.niji.or.jp/home/ashizuka/postmail01/postmail01.cgi?
language=english&subject=ホームページから
でアクセスすると、第一画面に
(カ) <input type=hidden name=subject value=ホームページから><input
type=hidden name=language value=english>
というタグができます。subject はメールの件名を指定するパラメータで、 (オ) でメールを
送信すると、あるホームページの管理者に『ホームページから』という件名のメールがとどきま
す。
なお、 (2) の if 文を取り去って、(a) の命令つまり、
$dict{'head01'} = MAIL TRANSMISSION FORM;
等を無条件に実行し、 (b) を実行しないようにしたスクリプトが
(キ) http://www.niji.or.jp/home/ashizuka/postmail01_e/postmail01.cgi
で、これは意図した結果が得られます。
以上やってみた限りでは、私には if 文の分岐以外でおかしいところが見つけられないので
す。
以上を読んでいただいていかがでしょうか。何かおわかりになることがありましたら教えていた
だければ幸いです。どうかよろしくお願いします。
瀬戸っぷさん、すみません。
瀬戸っぷさんがおっしゃるように、$in の定義ができていなかったようです。
#ア require './cgi-lib.pl';
#ア &ReadParse ( *in) ;
のコメントをはずすと、意図した結果が得られました。でもお恥ずかしいんですが、このスクリ
プトから遠ざかっていたので、どうしてこんなことをしたのか覚えていないのです。すみませ
ん。
どうもありがとうございました。