• 締切済み

選択アンケートから結果表示のCGIが欲しい

やや具体的な例を挙げます。質問は10。内容と順番はいつも同じ。選択肢はYESかNO。特に大切なのは次で「そのYESとNOが、解答と(例えば)8個以上合っていたらAのページ、7個以下ならBのページを表示する」・・・そんなアンケートプログラムが欲しいです。 でも私はCGIが作れません。どこかに該当するものはありませんか。或いは作成していただけるところはありませんか。ご存知の方、ぜひ教えて下さい。よろしくお願いします。

みんなの回答

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.4

ご自身のPCなどで作業することをローカルで作業するといいますが、 CGIをウンヌンするためにご自分のマシンの環境を整えます。 Windowsマシンなどを例にとって  1.FTPソフト(サーバにCGIファイルなどをアップロードするために必要です):例:FFFTPがおすすめ  2.CGIの内容を編集するため各種マルチバイトコード(Shift-JIS・EUC・Unicodeなど)に対応した「テキストエディター」が必要です。:例:EmEditorなど(メモ帳などは不可)  3.ブラウザ(これはありますね)  4.サーバ(これも・・・) 以上を準備して作業を行います。 まず、先だってのCGIをあなたの環境に合わせてテキストエディタで編集します。 index.cgiをEmEditorなどで開いてください。日本語が文字化けしていたら対応コードが自動で認識できていないのでEUCを指定して読み直しします。 まず、一行目のPerl言語を処理してくれるプログラムの指定が「#!/usr/local/bin/perl -w」記述されています。これを適切な形、サーバがRedHat系のLinuxというOSとかですと「#!/usr/bin/perl」などに変更(サーバの設定によって異なります)します。 問題なども設定可能ですが、まずはそこで保存します。 もうあるとは思いますが、FTPソフトでサーバに接続して、先ほどのファイルをアップロードします。 「cgi-bin」では、他のCGIとファイル名がかぶるおそれがあるので、「cgi-bin」の中に「test_200612」などのディレクトリ(フォルダ)を作成しそこにアップロードします。 アップロードできたなら、CGIファイルの属性(パーミッション)を変えてやります。 FTPサーバ設定にもよりますが通常は以下のような状態になっています。 rw- r-- r-- (持ち主 グループ 全て の順に割り当てられています。通常Webの場合誰もが特殊な場合を除き認証なしでアクセスしますので全ての部分が大事です) r:読み込み権限が有効 w:書き込み権限が有効 x:実行権限が有効 rwx r-x r-x にしてやればよいわけです。 文字のあるところを「1」無いところを「0」として数値で表現すると 2進数「111 101 101」=>10進数「7 5 5」 となります。 実行権限をつけるにはもうご存知の通りにしてください。 「http://www.******.net/cgi-bin/test_200612/index.cgi」などとして動作を確認します。 正常に動作しない場合は、テスト用に簡単なCGIを用意して試して見ます。 例としてファイル名「test.cgi」で以下の内容のファイルを作成し同様のことをします。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ここから #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML><BODY>\n"; print "Hello... TEST OK !\n"; print "</BODY></HTML>"; ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ここまで 「http://www.******.net/cgi-bin/test_200612/test.cgi」で動けばOK 動かなければエラーメッセージ次第ですが、1行目の「#!/usr/bin/perl」が異なっていたりするケースや、CGIのファイルアップロード時にバイナリ形式でアップされている可能性(FFFTPなら「オプション」→「環境設定」→「転送1」の設定)、またはサーバ側の規制(ちょっと無いかな?)などを疑って確認します。 トライしてみてください。

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.3

ANo.1です。 動くまでがんばってください。 パーミッション(実行属性)はOKですか? もしそうなら、WebサーバのCGIの実行環境がデフォルトでは出来ない様になっていますね。 1.もしかしたらpublic_html内で出来るかもしれないやり方 「.htaccess」という名前のファイルに以下の3行を記述してCGIと同じディレクトリにアップすると動くかもしれません。 ## ----------------------------------------- AddType application/x-httpd-cgi .cgi Options FollowSymLinks ExecCGI Includes DirectoryIndex index.html index.htm index.cgi ## ----------------------------------------- 2.cgi-binの場合 通常作成しなくてもすでに出来ている場合がほとんどです。 プロバイダからの指示でしたら指示された場所に作成してください。 アクセスの際、URLがわからないので仮に「www.test.jp」としておきます。 このサーバが貸切なら「http://www.test.jp/cgi-bin/index.cgi」でいけるかと… 単なる間借りユーザ(USR01→プロバイダか管理者に聞いてください)なら「http://www.test.jp/~USR01/cgi-bin/index.cgi」かなと思います。 HTML側でリンクを貼るなら <HTML><BODY><A HREF="http://www.test.jp/~USR01/cgi-bin/index.cgi">リンク</A></BODY></HTML> をindex.htmlとして置けば良いかと。ただし上記URLは直にたたいて動作するほうになります。

noname#113758
質問者

お礼

ありがとうございました。しかし何度試してもダメでした。あんまり動かないので、2ヶ月近くもココを放置してしまいました。わざわざ教えていただいたのに、ごめんなさい。 本当に初心者ですので、いただいた回答をあまり理解できませんでしたが、とにかくindex.cgiのファイルを/public_htmlの中にあったフォルダcgi-binに転送し、パーミッションを755にすることはできました。その結果・・・ Script Error The script did not produce proper HTTP headers. Please see the error log to see the detail of the errors. Depending on the server configuration, you can also run thisscript under CGIWrap debugging. Usually, either rename or linkthe script temporarily to a file which ends with .cgidextension, or add a AddHandler cgi-script-debug .cgiline to your .htaccess file. http://www.******.net/cgi-bin/index.cgiで上記のエラーが表示されます。ちなみにこのcgi-binの中には別のファイルも入っていて、その別ファイルは問題なく起動します。サーバーは専用(貸切)です。 自分なりにも頭が割れそうなぐらい試しました(実際その後何日か寝込みました^^;)ので、正直あきらめています・・・が、もし簡単に解決しそうでしたら回答をいただければ心よりさいわいです。

  • mflow
  • ベストアンサー率63% (42/66)
回答No.2

こんな感じかと。 #!/usr/bin/perl use CGI qw(:cgi); use strict; my @ans = ('dammy',1,2,1,2,1,2,1,2,1,2);# YESの場合は1Noの場合は2を順番に並べる my $q = new CGI; main(); sub main { my $func = $q->param('func'); if($func eq 'check'){ check_ans(); }else{ form(); } } sub check_ans { my $yes; for my $i(1..10){ ++$yes if $q->param($i) eq $ans[$i]; } if($yes <= 8){ a_page($yes); }else{ b_page($yes); } } sub a_page { print "Location: hogea.html\n\n"; } sub b_page { print "Location: hogeb.html\n\n"; } sub form { #ほげ?を適切に書き換える print "Content-type: text/html\n\n"; print <<"EOL"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>あんけーと</title> </head> <body> <form name="form1" method="post" action="hoge.cgi"> <p>Q1: ほげ? </p> <p> <input type="radio" name="1" value="1"> YES <input type="radio" name="1" value="2"> NO </p> <p> Q2: ほげ? </p> <p> <input type="radio" name="2" value="1"> YES <input type="radio" name="2" value="2"> NO</p> <p>Q3: ほげ?</p> <p> <input type="radio" name="3" value="1"> YES <input type="radio" name="3" value="2"> NO</p> <p>Q4: ほげ?</p> <p> <input type="radio" name="4" value="1"> YES <input type="radio" name="4" value="2"> NO</p> <p>Q5: ほげ?</p> <p> <input type="radio" name="5" value="1"> YES <input type="radio" name="5" value="2"> NO</p> <p>Q6: ほげ?</p> <p> <input type="radio" name="6" value="1"> YES <input type="radio" name="6" value="2"> NO</p> <p>Q7: ほげ?</p> <p> <input type="radio" name="7" value="1"> YES <input type="radio" name="7" value="2"> NO</p> <p>Q8: ほげ?</p> <p> <input type="radio" name="8" value="1"> YES <input type="radio" name="8" value="2"> NO</p> <p>Q9: ほげ?</p> <p> <input type="radio" name="9" value="1"> YES <input type="radio" name="9" value="2"> NO</p> <p>Q10: ほげ?</p> <p> <input type="radio" name="10" value="1"> YES <input type="radio" name="10" value="2"> NO</p> <p> <input type="submit" name="Submit" value="送信"> <input name="func" type="hidden" id="func" value="check"> </p> </form> </body> </html> EOL }

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.1

プログラムを書き込むと入りきらないので http://www.vago.jp/cgi_okwave/ からダウンロードしてください。 不具合があっても、とりあえず自己責任と自助努力で・・・

noname#113758
質問者

お礼

これで十分です。ありがとうございます。これから組み込みに挑戦しますが、もしわからなかったら再度質問させて下さい。本当にありがとうございました。

noname#113758
質問者

補足

できませんでした。随分がんばったのですが・・・送信ボタンを押すとエラーが出ます。ちなみにこのindex.cgiだけをpublic_htmlのフォルダ内に入れるだけではダメなんですね。あとindex.cgiをcgi-binという別フォルダを作成してそちらに入れ、別のhtmlファイルでこれを呼び出して?実行しようとしましたが、その方法が全くわからないのでダメでした・・・お時間に余裕ができた際にでも、アドバイスをいただければさいわいです。よろしくお願いします。