CGI-BBS > 情報収集 > フォームメール > 超初心者にはわからないちょっとした改造


カレッヂ
カレッヂ


質問者 しっぴい  投稿日 1/12(金) 18:17:49
本当に申し訳ないのですが,まだあまりPerlの勉強は出来ていません。
その上で,少し改造しようとしているのですから,分からなくてあたりまえ
なのですが、そんな私に教えていただける方いらっしゃいましたらよろしく
お願いします。

CGIレスキューPerlプログラミングのフォームメールのプログラムを
持ってきて,本にあるように,配信先を選択可能にするようにしました。
ここまでは本どおりにしたので成功したのですが、問題は,私がメール送信時
の件名も選択枠を作って選んでもらえるようにしたいと思っていることです。
考え方は"mailto"の改造のと一緒かなと"subject"も同じように変えてみました。

先に配信先を設定し,

#■受け取るメールアドレス
$def = '####@yahoo.com';
%mailto = (

        tokyo    => '*****@yahoo.com',
        saitama => '?????@yahoo.com',
);
__________________________________
そして配信先を決定させます。
$mailto = $mailto{$check{'_mailto'}};
unless ($mailto =~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/)
        { $mailto = $def;}

最初は全く同じにしました。

#■メールの件名
$def = 'お問い合わせ';
$subject = (

        one  => 'お問い合わせ1',
        two => 'お問い合わせ2',
);

_______________________________________

$subject = $subject{$check{'_subject'}};
unless ($subject =~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/)
        { $subject = $def;}


”mailto”では、最低限の構文確認する機能がついていることは知っていますが、
これでもプログラムは動くのですね。しかし、件名には"お問い合わせ1"と出ないで,
"one"と出てしまいます。



脳なしな考えですので,動かなくて当然なのですが、知識を発展させたい
気持ちは変わりませんので,そのためには人に聞く以外ほかに方法が見つかり
ませんでした。誰かご協力くださいませんか?
回答者 まさ  [削除]  投稿日 1/12(金) 18:56:46
>$subject = (

>         one  => 'お問い合わせ1',
>         two => 'お問い合わせ2',
>);

これは

%subject = (

         one  => 'お問い合わせ1',
         two => 'お問い合わせ2',
);

ですね。
回答者 しあわせのツボ  [削除]  投稿日 1/12(金) 19:01:39
#■メールの件名
$def = 'お問い合わせ';
%subject = ( # $subjectでなく%subjectにして下さい
one=> 'お問い合わせ1',
two => 'お問い合わせ2',
);
_______________________________________
$subject = $subject{$check{'_subject'}};
# unless ($subject =~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/) # この行を
if ($subject eq "") # に直します
{ $subject = $def;}

あとは対応するHTMLを記述して下さい。
質問者 しっぴい  [削除]  投稿日 1/12(金) 21:11:18
とても早いレスありがとうございます!
初めて参加したもので,カンドウ!しています。

ご指摘,ありがとうございました。
が、

#■メールの件名
$def = 'お問い合わせ';
$subject = (

を$subject ではなく%subjectにするのは以前
試していて,それ以外に試しているうちに書き直し
忘れていたものでした。

>if ($subject eq "") # に直します
っていうのはなるほどーーーーそうだーーと
思い,これで完璧だーと思ったのですが,
やっぱり結果は一緒です。
メールの件名には"one" と出てしまいます。
ここ以外に問題があるということでしょうか?
ほかにどんな問題が考えられますか?
ちなみにHTMLの記述は間違ってないはずですが...

引き続きおねがいします!
回答者 まさ  [削除]  投稿日 1/12(金) 21:53:45
そうすると一番問題になるのは以下の部分じゃないでしょうか。

$subject = $subject{$check{'_subject'}};

この$check{'_subject'}がoneならば、絶対に$subjectは「お問い合わせ1」に
なりますよね。

一度試してみてもらいたいのは、
1.$subject = $subject{'one'};
   として、正常に「お問い合わせ1」になることを確認。

2.$check{'_subject'}の値を出力して、何になっているか調べる。

こうすれば自ずと答えは見つかるはずです。
質問者 しっぴい  [削除]  投稿日 1/14(日) 00:04:59
んんんん〜
色々考えてみましたけど,やっぱりわかりません。

確かに
$subject = $subject{'one'};
としても、正常にお問い合わせ1とは出ません。
$check{'_subject'}の値の出力の仕方がいまいちわからない
私は他の方法で,出してみようと思いましたが,やっぱり
お問い合わせ1とは出ません。
ちなみにmailtoの方は,同じように変えてみたらちゃんとでます。

配信先の書き方とか、絶対mailtoと同じように書いていると思う
のに。。。 なんででないのでしょうか?!
どうしたらいいでしょうか??
回答者 まさ  [削除]  投稿日 1/14(日) 06:48:38
$subject = $subject{'one'};
の出力がおかしいのなら、問題なのはハッシュの宣言です。

one  => 'お問い合わせ1',
としているところを
'one'  => 'お問い合わせ1',
にして下さい。

ところでPerl5ですよね?
質問者 しっぴい  [削除]  投稿日 1/14(日) 12:38:49
早速試してみました。
が、結果は同じでした。

バージョンは、Perl5 ですが。。。。

ほかに何か考えられますか?
回答者 まさ  [削除]  投稿日 1/14(日) 19:27:35
わたしなら、もっと徹底的になぜ正常にハッシュの値が出力しないのかを追及しますが、
ただ、それを述べるとややこしいし、ケースバイケースなので、一概には言えません。

もういっそのことハッシュを止めて、配列にすればどうですか?
ハッシュにする意味って何かあるんでしょうか?
質問者 しっぴい  [削除]  投稿日 1/15(月) 21:42:33
なるほど、配列にすればよいわけですね。
これでちゃんと動いてくれました。

これから少しずつ勉強していって,もっと融通が利くように
頑張っていきたいです。
なぜハッシュが動かないのかという問題は解決されていませんが,
とりあえずありがとうございました!!!!!
また分からないところが出てきたらこちらで力を貸してください!
よろしくお願いします。

このページは終了したので返信(回答)は書きこめません

Web裏技