
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ページにボタンやフォームがたくさん埋め込まれたものは発見したのですが、この紙芝居的なアンケートのヒントになりそうなものが見つかりませんでした。
アドバイスや、忠告などで結構ですので、回答を頂けると幸いです。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
HTMLが間違っているけど主題ではないのでスルーします。
→Another HTML-lint gateway ( http://openlab.ring.gr.jp/k16/htmllint/htmllint. … )
それらの一連のページがほとんど同じものなら、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"とか・・
ご回答ありがとうございます。
HTMLのチェッカーや詳しいソースのサンプルまで
書いてくださってありがとうございます。
教わった仕組みで少し試行錯誤してみます。
また、解決しませんでしたら書き込むと思いますのでその時は
何とぞよろしくお願いいたします。
No.2
- 回答日時:
こんばんは。
ご質問の意図がよくわからないので、変な回答かも知れませんが・・・、
>2ページ目のアンケートへのリンクの仕方がわかりません。
2ページ目のHTMLをprintします。
No.1
- 回答日時:
アンケートフォームの中に
<INPUT type="hidden" name="page" value="1">
このように現在のページを示すものを入れておきます。
画面には表示されませんが、送信するとpage=1というデータが送信されます。
これを他のアンケート項目と一緒に取り出しておけば、現在処理しているページがハッキリ判ります。
次はこれに+1して、2ページ目のフォームを表示します。
この回答への補足
ご回答ありがとうございます。
フォーム内にINPUTでページ番号を記入するのは理解しました。
ありがとうございまず。
ですが、このページ切り替えのための、
カウントアップは、どの段階でどのように行うのでしょうか?
実際に、SENDの部分で、page=2に変更してみたのですが、
うまくいきませんでした。
+1でなければいけなかったのでしょうか?
それとも、カウントアップする場所や方法がまずかったのでしょうか。
お手数ですが、ご教授願います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGIでテキストボックスの内容に...
-
掲示板(kentさんの所のsunbbs...
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
select値をhiddenのvalueに渡し...
-
チェックボックスの返す値
-
【ASP.NET MVC】フォームヘルパ...
-
横スクロールを縦スクロールに...
-
別formのhidden項目を自form値...
-
左右のフレームを同時にスクロ...
-
WEBページを強制的に横画面で見...
-
フォームの入力内容の後ろに文...
-
INPUT TYPE
-
VB.net データーグリッドビュー...
-
「value」に2つの値をセットす...
-
オイラー法の誤差
-
python subprocessに関する質問
-
proftpdで困ってます。
-
拡張子'html'と'htm'はどっちが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
掲示板(kentさんの所のsunbbs...
-
ダブルクオテーションは使うべ...
-
Perlでメール送信機能
-
htmlからパラメータで、cgiに渡...
-
CGIがうまく作動せず困っていま...
-
ezwebにおける POSTメソッドで...
-
CGIでテキストボックスの内容に...
-
希望した番号に更新マークを表...
-
cgi+htmlテンプレート使用
-
テキストファイルを読んで次のc...
-
レンタルサーバーでperlのcgiフ...
-
PC・携帯等のアクセス時の自動...
-
sendmailで送信すると、迷惑メ...
-
sendmail 送信先を複数設定す...
-
substrで数値を抽出してのマッ...
-
Spreadsheet::WriteExcelについ...
-
CGIから表生成(1行に数件のデ...
-
サーバー上のPDFにCGIでパスワ...
-
【perl/cgi】文字列を検索して...
-
CSVを読み込んでメニューを作成...
おすすめ情報