wwwmailの送信結果の表示をフォームごとに変更したい

[上に] [前に] [次に]
素人管理人 1999/09/13(月) 11:54:29
素人管理人です。前回はB-Cusさんにお世話になりました。
すみませんが、質問がもう一つあります。

メール送信後の結果をhtmlで表示するため、
# ブラウザ画面に送信結果を書き出す
という箇所で、
print "Location: http://www.hogehoge.co.jp/hoge.html\n\n";
といった形に設定しています。

wwwmailを汎用的に使いたいので、このurlの部分を送信フォームの
中にinput type="hidden"という形で埋め込んで、wwwmailがその
urlを拾って、メール送信後に、そのurlを表示する、といった形にしたい
のですが、うまくいきませんでした。

具体的には、
wwwmail.cgiの
# ブラウザ画面に送信結果を書き出す
という箇所で、
print "Location: $FORM{'result'}\n\n";
と設定して、フォームの中に
input type="hidden" name="result" value="http://www.hogehoge.co.jp/hoge.html"
というタグを埋め込んだのですが、メールは送信されるものの、送信結果画面が
表示されなくなりました。

わかりにくい説明だと思いますが、アドバイスお願いします。

ふじ 1999/09/13(月) 13:16:41
$FORM{'result'} に値がちゃんと入っているかどうを確認しました?

まず、
>print "Location: $FORM{'result'}\n\n";
の代わりに
print "Content-Type: text/plain\n\n";
print $FORM{'result'};
として、$FORM{'result'} の値が望むようなものになっているか
確認しましょう。

素人管理人 1999/09/13(月) 14:46:51
ふじさん、ありがとうございます。
さっそく試してみたところ、問題なく
input type="hidden"で指定された文字列が表示されました。
さて、このあとは何をすればよろしいのでしょうか?

B-Cus 1999/09/13(月) 15:25:45
では、Locationの前にContent-typeを出力していないかどうか
(本当は「Locationの前に空行を出力していないかどうか」かな)
調べてください。

それでも解決できない場合は、実際のURL、ソースを公開してください。

素人管理人 1999/09/13(月) 17:16:35
>では、Locationの前にContent-typeを出力していないかどうか
>(本当は「Locationの前に空行を出力していないかどうか」かな)
>調べてください。

できました!! 問題なくinput type="hidden"で指定された
URLが表示されました。

#しかし、前回なぜうまく行かなかったんだろう、、、
#日頃の行いかな?

ふじさん、B-Cusさん、本当にありがとうございます。

あと、もう一つ質問があります。
このURLを送信したメールに表示しないことは可能でしょうか?
しつこい様ですが、宜しくお願いします。

B-Cus 1999/09/13(月) 17:32:33
> このURLを送信したメールに表示しないことは可能でしょうか?
まずは自分でどうやったらできるのか考えてみて下さい。
ヒントを言うと、
 ・メールで送信する文章を作っている部分がどこか調べる
 ・その中でFORMの内容を書き出している部分を調べる
 ・その中で $FORM{result} だけを書き出さないようにする。
ってな感じ。

素人管理人 1999/09/13(月) 19:07:28
>まずは自分でどうやったらできるのか考えてみて下さい。

すみません。わからなかったです。
多分
# 入力値を読み取る
という箇所でフォームデータを全て読み込んで、それを
メールのボディに張り付けているのだと思いますが、
はっきりいって分からないです。

恥ずかしながら、私パールは全くダメで、今まで
「ここかな?」と思った箇所をちょこちょこ修正
していただけなのです。勉強しなければならないのは
わかっておりますが。

こんな愚か者に愛の手を、、、

B-Cus 1999/09/13(月) 19:24:14
うーん。こういう場合は素直に教えた方がいいんだろうか。
教えるのは簡単だけど、答えだけを教えられた方は進歩
しないからなぁ…。
# という例を最近身近で見たので。

それでも敢えてヒントだけ出してみよう。いじるのは
 http://www.tohoho-web.com/cgi-bin/wwwmail.txt
 # メールボディを作成する
 for ($i = 0; $i < $cnt; $i++) {
  $mailbody .= "$FORM[$i] = $FORM{$FORM[$i]}\n";
 }
ここ。上のをわかりやすく書くと(…わかりやすいかなぁ?)
 foreach $_ (@FORM){
  $mailbody = $mailbody . "$_ = $FORM{$_}\n";
 }
こう。このループの中で $FORM{result} なら $mailbody に
追加しなければよい、と。

素人管理人 1999/09/13(月) 19:48:53
すみません。やっぱりわからないです。

B-Cusさんに指定された箇所をみて、とほほさんのパール
の説明を読んでif関数の記述方法を読んだのですが、
やっぱりわからないです。

#PerlよりHTMLを勉強しなければならない、大たわけです。

宜しくお願いします。

B-Cus 1999/09/13(月) 23:17:47
本題についてはどなたかが答えて下さると思うので、
僕は「ちゃんと本を買って勉強した方がよい」とだけ言っておきます。
# できれば3日くらいは悩んで欲しかった。

うふ! 1999/09/14(火) 00:48:55
まず、変数ってなに?とか、連想配列って何?とかあたりを
理解して、if文とかを覚えれば良いかと思います。
「急がば回れ」ってことで。

「もし、$FORM{$i} が "result" でなければ、$mailbodyに追加する。」
というのをif文で書ければ、できたも同然かと思います。
http://www.tohoho-web.com/wwwperl1.htm#Value
こことか
http://www.tohoho-web.com/wwwperl1.htm#Syntax
ここをじっくり読んでみてはいかがでしょう?

素人管理人 1999/09/14(火) 14:47:16
># できれば3日くらいは悩んで欲しかった。

すみません。ちょっと皆さんに甘えていました。
やはり、自分で答えを探さないと、何事もものには
ならないのですね。

うふ!さんのアドバイスを見て、もう少し自分なりに
考えてみます。

次に投稿するときは、自分なりに答えを提示して、それを
皆さんに見てもらうようにします。

本当にありがとうございました。

[上に] [前に] [次に]