

表題わかりにくくてすいません。
商品ごとの申し込みフォームを作成しています。
まず、
$ENV{'HTTP_REFERER'};でどのURLのページから来たか判別させて、
その最初に入ってきたリファラーの値をページ遷移のときに最後の
ページまでもっていきたいのです。
■1ページ目(HTML)名まえ年齢、商品番号などを記入 <A.HTML>
■2ページ目(CGI)住所 <B.CGI> sub page2{}
■3ページ目(CGI)確認画面。<C.CGI> sub page3{}
■4ページ目(CGI)サンクスページ <D.CGI> sub thanks{}
以上の4ページの構成ですが、最初の1ページ目のHTMLが商品ごとにちがっていて、どの商品のページのHTMLからきているのか判別させて、サンクスページで、URLごとに別の件名の確認メールを自分あてに送信できるようにしたいので、最初のページがどのURLなのかをリファラーで判断させたいのです。商品によって、入力項目を変えるたりもしています。(POSTで商品ごとのhiddenタグを送ればいいと思うかもしれませんが、今回は$ENV{'HTTP_REFERER'};についてのやり方でやりたいのです。)
ですが、$ENV{'HTTP_REFERER'};を2ページ目のサブルーチンのなかに記述しても2ページ目ではどこからきているのか$ref = $ENV{'HTTP_REFERER'};などと記述すればわかるのですが、この最初のリファラーの値を3ページ目、4ページ目に持っていくのにはどうしたらいいのでしょうか?全部のページのサブルーチンに$ref = $ENV{'HTTP_REFERER'};を書いてしまうと、そのひとつまえのURLが認識されてしまいます。ですが、最初のリファラーの値をずっと最後のページまで持っていたいのです。
どなたか、方法がわかりましたらご教授願います。よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
no.2の補足です。
2ページ目の「B.CGI」での記述は
$ref=$ENV{'HTTP_REFERER'};
と
<input type="hidden" name="ref" value="$ref">
でOKです。
3ページ目以降は、そのhiddenで渡されたものをvalueに記述してあげます。
ユーザーが入力したものやhiddenで渡されるものをどのように受け取っているかわからないので正確なお答えは出来ませんが、cgi-lib.plと&ReadParse;を使っているなら3ページ目のCGIでは
<input type="hidden" name="ref" value="$in{'ref'}">
という感じになると思います。
cgi-lib.plを使っていないのなら
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/, $pair);
$FORM{$name} = $value;
}
のようなロジックをご自分で書いているでしょうから(上記の場合は)
<input type="hidden" name="ref" value="$FORM{'ref'}">
というようになります。
danmarino様のおかげで無事に解決しました。
素人に対して親切丁寧な回答をして
いただきまして非常に感謝しております。
ありがとうございました。
No.4
- 回答日時:
水を差すような回答ですが、リファラーは必ず送信されるわけではありません。
以前に読んだ「CGI プログラミング 第2版」(O'Reilly) に書いてあったのですが、
URL をキーボードから入力したりブックマークから選択した場合はリファラーは
送信されないとあります。実際に簡単なテストをしてみましたが、リンクをクリ
ックした場合はリファラーは設定されましたが、ブックマークから選択した場合は
設定されませんでした。別の方法を考えるべきと思います。
No.2
- 回答日時:
2番目のCGI「B.CGI」で取得した$ENV{'HTTP_REFERER'}をhiddenで次に送ってあげる方法ではダメなのでしょうか?
$ENV{'HTTP_REFERER'}の取得にこだわるのであれば何か特別な理由があるのでしょうか?
この回答への補足
回答ありがとうございます。
>>2番目のCGI「B.CGI」で取得した$ENV{'HTTP_REFERER'}をhiddenで次に送ってあげる方法ではダメなのでしょうか?
全然ダメじゃないです。説明不足でごめんなさい。
その場合、hiddenにはどのような記述をすればいいのかわかりません。
$ref=$ENV{'HTTP_REFERER'};をCGIの最初のほうに記述してから、
フォームボタンの上に
<input type="hidden" name="ref" value="$ref">\n";
とやってみましたが、これでは3ページ目以降のvalueの値は空になってしまいました。各ページへの持ち回りがうまくできません。
ご教授お願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- PHP PHP MySql ページング 2 2022/09/20 06:38
- その他(プログラミング・Web制作) パイソンでのプログラミングについて 3 2022/08/11 20:31
- Amazon 新規でAmazon商品ページ作成方法について 1 2022/03/28 00:22
- SEO googleサーチコンソールでの重複ページ(ダブルスラッシュ) 3 2023/06/12 15:00
- Perl Perlのエラーについてご教授ください。初心者です。 CGIを別サーバに移したところ、Perlのバー 5 2023/05/31 10:48
- Amazon Amazonの中古品で記載ミスの消費は買って大丈夫? 今、PLAYSTATION 3の40GBの中古 1 2023/04/12 17:21
- Amazon Amazon 1 2023/02/13 16:07
- Excel(エクセル) Excel 在庫管理について 3 2023/02/09 10:00
- 美術・アート トレパク疑惑をかけられにくくするには ここ最近いわゆるトレパク警察のいいがかりがが厳しくなったようで 1 2023/08/21 09:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
渡された引数の型を判別する
-
VBのReturnの使い方
-
fortran77教えてください
-
「偶数・奇数の和」のフローチ...
-
DOSコマンドのループ内のTIMEコ...
-
ダブりを消す
-
連想配列について
-
二次元配列のつかいかた。
-
ハッシュのソート
-
二つの配列から連想配列を作る方法
-
VBAでの一時停止と再開の方法
-
基本情報午後問題について
-
[perl] $xxx == 1 or $xxx == 5...
-
画面を強制的に再描画させる方法
-
UWSCに制限時間を付けたいです
-
透磁率
-
python質問
-
流れ図(フローチャート)が分か...
-
フォームから値を配列に渡すと...
-
vb.netです。2次元配列の要素を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBのReturnの使い方
-
ExcelVBAでのデータ型変換、も...
-
クッキーが無効のとき処理
-
foreachでループした変数を他の...
-
サブルーチン(共通の処理)の...
-
パターンマチングについて(CGI)
-
$#{スカラー変数}とは何を意味...
-
サブルーチンの使い方
-
Perl・DBIでの汎用selectサブル...
-
Perl実行時のメモリ不足について
-
サブルーチンについて
-
プロシージャとは
-
流れ図・・・
-
サブルーチンの引数の、呼び出...
-
マイコンに詳しい方教えてくだ...
-
picアセンブラ ビルドは完了す...
-
RFC822形式の日付を生成するサ...
-
定数についての質問です
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
おすすめ情報