プロが教えるわが家の防犯対策術!

アクセス元がアドレス1だった場合は<FORM name="form" action="1.cgi" method="POST">を表示
アクセス元がアドレス2だった場合は<FORM name="form" action="2.cgi" method="POST">を表示
アクセス元がアドレス3だった場合は<FORM name="form" action="3.cgi" method="POST">を表示
アクセス元がアドレス4だった場合は<FORM name="form" action="4.cgi" method="POST">を表示
アクセス元がアドレス5だった場合は<FORM name="form" action="5.cgi" method="POST">を表示

というように、50以上のアクセス元によって別々のCGIに送信するよう全振り分けたいのですが、方法がわかりません。
どなたかご教授宜しくお願いいたします。

A 回答 (4件)

>エラーになってしまいます


ちょっと手抜きで書いたので
アドレス1→'アドレス1'
1.cgi→'1.cgi'
addrX→'addrX'
みたいに「'」で括ってみてください。

それでもエラーになるなら、
CGIの2行目あたりに、
use CGI::Carp qw(fatalsToBrowser);
と、入れるとエラーの出る行番号なんかが出るはずなので場所を特定してください。
    • good
    • 0
この回答へのお礼

おかげさまで解決することができました。本当にありがとうございました。

お礼日時:2006/12/14 15:34

こんな感じで。


リファラーと送信先CGIの名前の関連性みたいのがはっきりしていれば、
50以上のリストをバカ正直に書かなくてもいいかもしれないけど。

# リファラーと送信先のリスト定義
%ref_addr=(
アドレス1 => 1.cgi,
アドレス2 => 2.cgi,
~~
アドレス50 => 50.cgi,
);

# 環境変数HTTP_REFERERに合わせた送信先の設定
$cgiaddr = $ref_addr{$ENV{HTTP_REFERER}};

# 値が空だったら未定義のリファラー、送信先をaddrXに設定
$cgiaddr = addrX unless($cgiaddr);

print qq|<FORM name="form" action="$cgiaddr" method="POST">|;
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
何度か試してみましたが、エラーになってしまいます。cgiスクリプトとの相性がわるいのでしょうか?No.2で教えていただいた内容では動作しました。お手数ですが、宜しくお願いいたします。

お礼日時:2006/12/14 14:16

>リファラーは正常に取得できております。


でしたら、

@adr = ('アドレス1','アドレス2',・・・

for($i = 0; $i <= $#adr; $i++){
if($ENV{'HTTP_REFERER'} eq $adr[$i]){
print('<FORM name="form" action="'.($i+1).'.cgi" method="POST">');
last;
}
}

こんな感じでどうでしょう?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
実際に使う送信先のcgi名が数字でないのですが、その場合はどのようにすればよろしいのでしょうか。
また、リファラーが取得できなかった場合の送信さきも指定できますでしょうか。わからないことばかりで申し訳ございません。

お礼日時:2006/12/14 13:19

$ENV{'HTTP_REFERER'}



環境変数でアクセス元を調べる手が有ります。
しかし、プロバイダによっては、内容が入ってないことも、違うアドレスが入ることもあります。

まず、これが使えるか確認してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。リファラーは正常に取得できております。

お礼日時:2006/12/14 12:17

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