CGI-BBS > CGI > Perl > 日付とカウンタで作った受注NOを次ページにも表示


カレッヂ
カレッヂ


質問者 y−y  投稿日 12/12(水) 00:11:10
ショッピングのCGI(こちらのじゃないです、すみません)で、受注NOを、日付とカウンタを繋げて作りました。
ショッピングのCGIは一つで、その中に商品を見るページ、注文ページ、確認ページ、受付終了ページ等があります。
確認ページに受注NOを表示させるため、サブルーチンで受注NOを作り、それを呼び出しています。きちんと表示されるのですが、それを同じ番号のまま受付終了のページにも表示させたいのですが、そこでサブルーチンを呼び出すと番号が増えてしまいます。
サブルーチンじゃなくページの最初に受注NOを書き出すと、注文されなくても番号が増えてしまうので、確認ページに直接受注NOが表示されるよう書いてみましたが、ローカル変数の中なので、$uketuke #受注NOです は、受付終了ページでは表示されません。
確認ページで表示される受注NOを、受付終了のページでも同じ番号で表示させたいのですが、どうすればいいのかアドバイスいただけたらと思い書き込んでみました。
CGI初心者で、こちらのページやいろんな本を読んだりして勉強してるのですが、言葉の使い方が間違ってましたらすみません。もしかしたらサブルーチンを使うこと事態、常識はずれなのかもしれませんが、ここまでたどり着き,そして行き詰まってしまいました。質問の意味がわかりづらかったり失礼がありましたらご指摘ください。
どうぞよろしくお願いいたします。
回答者 しあわせのツボ  [削除]  投稿日 12/12(水) 02:22:25
CGIは「1ページ表示したら終了」という動作をします。
従って、(たとえグローバル変数でも)変数の内容を次のページに持ち越すことはできません。
# もし持ち越していたら、他の人が同時にアクセスした時、個人情報が見えてしまうかもしれません。それは困りますよね。
番号を取得するために改めてカウンタを呼び出せば、それによってカウンタの値が増えるのは当然です。

で、先達はどうしているかと言うと、
○ページ出力時に何らかの方法で書き込んでおき、それを読み取る
○クッキーに焼く
○テンポラリファイルに保存し、それを読み込む
など、何らかの方法でそのデータを保存しています。

それなりに知識はお持ちのようなので、もう少しです。
質問者 y−y  [削除]  投稿日 12/12(水) 21:55:57
お返事にすごく励まされました。有り難うございます。

>ページ出力時に何らかの方法で書き込んでおき、それを読み取る
発想を変えて print "<input type=hidden name=uketuke value=$uketuke>\n";
として、次ページに渡すことに成功しました!(当り前のことなのでしょうが、全く思い浮かびませんでした)
どのページも同じ伝票番号になり感激したのも束の間、センドメールで届く確認ページのメールにはNOが入っていなくてショック!

>クッキーに焼く
名前や住所をクッキーに焼いてると思われる場所があったので、そこへ受注NOも紛れ込ませました(^^ゞ これもうまい具合にどのページにも同じ受注番号が表示されました!!
しかし、上と同じくセンドメールで届く確認ページにはNOがないのでした。
確認ページがそのままセンドメールで送られるのですが、届いたメールにはなぜかNOがないのです。
ローカル変数の外に受注NOを書き出すと表示されるのですが、それじゃあ番号が変わってしまいますし...

>テンポラリファイルに保存し、それを読み込む
上記の挑戦(?)だけで、1日かかってしまいました。これは、カウンタを作るときのようにファイルを一つ作って、そこに受注NOを書き込んで使うってことですよね。
Perlが全くわからない状態からのスタートでしたので、今頭の中は腐ったウニのような状態で四苦八苦してますが、これにも挑戦してがんばってみます。
回答者 しあわせのツボ  [削除]  投稿日 12/13(木) 00:19:53
確認ページを出力する部分とは別に、sendmailにデータを渡すための部分があるはずです。
まずはそれを探してください。場所さえ見つかれば、追加するのは難しくないと思います。
質問者 y−y  [削除]  投稿日 12/15(土) 00:45:17
お待たせしました(っ誰も待ってないって)ようやく思い通りに動いてくれました!!(^o^)丿
もう感動で顔がにやけてしまいます。有り難うございます!!
上記の試した二つとも、きっと同じ原因なのだろうと二日間CGIとにらめっこでした。
センドメールの所に、$uketukeと入れると、画面上は全て表示されるのに届くメールには記入されていないア、$QERY{uketuke}とすれば、画面に出ないけど、メールには記入されてる、この繰り返しで、わけがわからなくなっていました。こちらがよければあちらが…で。。。
で、思い切って(?)センドメールの受け付け番号を入れたい場所に、
$QERY{uketuke}$uketukeと二つ並べて書いてみたら、これでうまくいったのです。こんなのあり?ってかんじです。
ゼロからのスタートでまさか本当にできるとは思いませんでしたが、たっぷり2週間使いました。(T_T) でもすごくCGIに勉強意欲が高まって面白くなってきました!
いただいたお返事、落ち込んでいただけにとても励みになり、意欲に火をつけていただきました。
これを機に、何か簡単なものから作ってみたいなぁと思います。
わからなくなったときには、またどうぞアドバイスお願いいたします

返信(回答)する


Web裏技