- 締切済み
PerlでCGIを制作している初学者です。
PerlでCGIを制作している初学者です。 画像付きのアンケートを作ろうとしているのですが、 その際のページの切り替えがうまくいきません。 普通に1ページに、ボタンやフォームを配置したアンケートは作れるのですが、 自身が作りたいのは、紙芝居のごとく、 1ページ目に画像とアンケートの選択肢であるチェックボックスがあり、 チェックボックス入力後に回答を押すと同時に、配列へチェックボックスの答えを格納し、 2ページ目のアンケートへ移るというものです。 1ページ目や2ページ目のhtmlファイルならびにcgiファイルは用意できているのですが、 1ページ目の返答ボタンをおした際の処理の記述がわかりません。 例えば、 1ページ目 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY> <CENTER> <img src="sample.jpg" alt="01" width=800px height=600px> <FORM method="POST" action="post.cgi"><BR> <INPUT type="radio" name="answer" value="010" checked>complete mismatch <INPUT type="radio" name="answer" value="011">mismatch <INPUT type="radio" name="answer" value="012">neutral <INPUT type="radio" name="answer" value="013">match <INPUT type="radio" name="answer" value="014">complete match <BR> <BR> <INPUT type="submit" name="submit" value=" SEND "> <BR> </FORM> </CENTER> </BODY> </HTML> と記述し、 post.cgi #!/perl/bin/perl print "Content-type: text/html\n"; print "\n"; read(STDIN, $data, $ENV{'CONTENT_LENGTH'}); print "REQUEST_METHOD : $ENV{'REQUEST_METHOD'}<br>\n"; print "CONTENT_LENGTH : $ENV{'CONTENT_LENGTH'}<br>\n"; print "DATA : $data<br>\n"; としたとき、 1ページ目でsample.jpgについての意見をラジオボタンで選択し、それをpost.cgiにて表示させるというサンプル(ここを後で変数の格納に変えます)ですが、この時、1ページに似た構成の2ページ目のアンケートへのリンクの仕方がわかりません。 イメージ的には、 1ページ目表示→回答を配列[0]に格納→2ページ目表示→回答を配列[1]に格納→・・・ 最終的には、各ページの回答を記録した配列を出力します。 以上のようなことを実現したいのです。 WEBなどを探してみたのですが、1ページにボタンやフォームがたくさん埋め込まれたものは発見したのですが、この紙芝居的なアンケートのヒントになりそうなものが見つかりませんでした。 アドバイスや、忠告などで結構ですので、回答を頂けると幸いです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ORUKA1951
- ベストアンサー率45% (5062/11036)
HTMLが間違っているけど主題ではないのでスルーします。 →Another HTML-lint gateway ( http://openlab.ring.gr.jp/k16/htmllint/htmllint.html ) それらの一連のページがほとんど同じものなら、HTMLはスクリプトの末尾の__END__の後にテンプレートを置くか、別ファイルにしておくとよいです。 # ここまでスクリプト __END__ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> ・・・【中略】・・・ </head> <body> <h1>title</h1> <!-- subTitle --> <p> <img src="sample.jpg" alt="01" width=800px height=600px> </p> <div id="form"> <form method="post" action="post.cgi"> ・・・【中略】・・・ </div> </body> </html> そのうえで、送られたデータを解析してデータベース(簡単なものなら配列をCSVにでも変換したテキストファイルでもよい)に追記して、テンプレートをパターンマッチを使って要素要素を書き変えて出力するとよい。 スマートなのは、PATH_INFOやQUERY_STRINGSで渡すとよいでしょう。 action="post.cgi/p2.html" とか、action="post.cgi?page=2"とか・・
- taka451213
- ベストアンサー率47% (436/922)
こんばんは。 ご質問の意図がよくわからないので、変な回答かも知れませんが・・・、 >2ページ目のアンケートへのリンクの仕方がわかりません。 2ページ目のHTMLをprintします。
- nine999
- ベストアンサー率44% (512/1140)
アンケートフォームの中に <INPUT type="hidden" name="page" value="1"> このように現在のページを示すものを入れておきます。 画面には表示されませんが、送信するとpage=1というデータが送信されます。 これを他のアンケート項目と一緒に取り出しておけば、現在処理しているページがハッキリ判ります。 次はこれに+1して、2ページ目のフォームを表示します。
補足
ご回答ありがとうございます。 フォーム内にINPUTでページ番号を記入するのは理解しました。 ありがとうございまず。 ですが、このページ切り替えのための、 カウントアップは、どの段階でどのように行うのでしょうか? 実際に、SENDの部分で、page=2に変更してみたのですが、 うまくいきませんでした。 +1でなければいけなかったのでしょうか? それとも、カウントアップする場所や方法がまずかったのでしょうか。 お手数ですが、ご教授願います。
お礼
ご回答ありがとうございます。 HTMLのチェッカーや詳しいソースのサンプルまで 書いてくださってありがとうございます。 教わった仕組みで少し試行錯誤してみます。 また、解決しませんでしたら書き込むと思いますのでその時は 何とぞよろしくお願いいたします。