電子書籍の厳選無料作品が豊富!

アンケートCGI作成について、form actionの呼びだし等について質問です。
初めまして、CGIアンケートを作成しようとしているPerl初心者です。

説明ページ(ex01.html)

フォーム付きアンケートページ(enk01.html)

説明ページ(ex02.html)

以下略

という流れでアンケートを続かせたいのですが
(だいたい、ex.htmlとenk.htmlが各20ずつくらいです。)

フォーム付きアンケートのフォーム
<form action="form.cgi" method="post">
<input type="radio" name="Emotion_Body" value="0" checked> 選択肢1
<input type="radio" name="Emotion_Body" value="1"> 選択肢2
<input type="radio" name="Emotion_Body" value="2"> 選択肢3
<input type="submit" value="次のアンケート">
となっていて、actionに次のページのhtmlをいれ込むことができませんでした。
(form.cgi:formから受け取ったデータを外部ファイルへ書きだすCGIファイルです。)
フォームの「次のアンケートボタン」を押すと、
form.cgiにフォームのデータを送りつつ、ex02.htmlを表示させるということはできないものでしょうか?
過去ログによるCGIに表示させる方法を書くのだと、
フォームページの間に、ただのhtmlファイルを挟むので、
(例:enk01.html→ex02.html→enk02.html→…)
各ページに対応したCGIファイルを書かなければならないということなのでしょうか?

よろしくお願いいたいします。

A 回答 (2件)

セッション管理の問題です。

だいたい3つぐらい方法があります。
1) 隠しフォームを使う
2) クッキーを使う
3) クエリーを使う( 1)と技術的には同じ )

1) の方法を説明すると
form.cgiが出力するフォームにhidden状態なパーツを追加しておきます。

例えば
<input type="hidden" name="next_page" value="enk02.html" />
などとします。

これでフォームを返したときに次に表示するページがわかります。
valueをその次に表示するページを出しておけば、順番に表示できます。
この例で言えば、next_pageがenk02.htmlという値を受け取ったら、
次の隠しフォームはex02.htmlにすればよいです。

リダイレクトといっているのは、form.cgiから別のURLに飛ばすということを言っています。
print "Location: http://xxx/enkxx01.html\n\n";
とするか、CGI.pmを使っているのなら
use CGI;
my $q = CGI->new();
print $q->redirect('http://xxx/enkxx01.html');
でもいいのでしょう。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
無事、隠しフォームとリダイレクトで、目的を達成できました。
今回は、クッキーの使い方はわかりませんでしたが、
今後勉強していきたいと思います。
また、質問をすることが多々あると思いますが、
その時は、また返答していただけると嬉しいです。
今回は、丁寧なソースでの解説まで本当にありがとうございました。

お礼日時:2010/11/08 18:49

ex??.html と enk??.html の表示と同じものを form.cgi で返せば?


あるいはform.cgiでリダイレクトするとか

この回答への補足

ご回答大変ありがとうございます。

enk01.htmlからform.cgiを呼びだした場合、
form.cgiにex02.htmlの表示をさせることはできると思います。
そこで、ex02.htmlからenk02.htmlへは、ただのリンクなので良いですが、
enk02.htmlからform.cgiを呼びだした場合、
form.cgiには、ex02.htmlの表示が書かれていると思います。
この、enk01.htmlから呼びだされたか、enk02.htmlから呼び出されたかの
区別というのは、できるのでしょうか?
あと、ここで言うリダイレクトと言うのは、何をファイル出力させるものなのでしょうか。

enk01.html表示

form.cgi呼びだし(enk01.html内容を外部ファイルに書き出し&ex02.htmlの出力)

ex02.html表示
↓単純なリンク処理
enk02.html表示

form.cgi呼びだし(enk02.html内容を外部ファイルに書き出し&ex02.htmlの出力)

ex02.html表示

になってしまいました。

補足日時:2010/11/01 00:17
    • good
    • 0

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