• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:選択式アンケート項目合計点で分岐するCGIを教えて)

選択式アンケートで分岐するCGIを教えて

このQ&Aのポイント
  • ホームページ作成ソフトを購入してホームページが自作できるようになったので、プレゼントの紹介サイトを作りたい。選択肢を点数化し、選択された回答項目の合計点数で分岐し、商品紹介ページを変える。
  • アンケート結果に応じて合計点数で分岐し、プレゼントの商品紹介ページを変える仕組みを作りたい。宝くじセット、ご当地スイーツ、シネコンチケット、ワイン試飲会チケットなどのプレゼントを用意する。
  • ホームページ作成ソフトで作成したサイトの中に、選択式のアンケートを盛り込みたい。しかし、CGIプログラムの作成はできないため、選択アンケートCGIを探している。無料のものを希望している。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ささっと、要求する仕様のものを作ってみました。 http://www.daiba.cx/okwave/q7773869/test.cgi ダウンロードは、こちらより。。。 http://www.daiba.cx/okwave/q7773869/test.zip 注意点 Shift-JIS、EUC、UTF8どのコードでも一応動きます。 (使用する文字で、Shift-JISは化ける場合があります) ですが、できればUTF8にして、htmlのヘッダ部分を 以下のようにして下さい 最初のHTML の・・の部分あたりです。 <html><head> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> あとは、パーミッションを、最低でも 755 に設定し、 この例では、0.htmlとa.htmlからd.htmlまで移動しますので、 ファイルを置いてください。 以下、コード ---------- #!/usr/bin/perl use strict; use CGI; # プレゼントのデータハッシュ my $presents={ 1=>{ name=>"年齢", 1=>{ name=>"20代", score=>10, }, 2=>{ name=>"30代", score=>20, }, 3=>{ name=>"40代", score=>30, }, 4=>{ name=>"50代以上", score=>40, }, }, 2=>{ name=>"予算", 1=>{ name=>"2000円", score=>10, }, 2=>{ name=>"3000円", score=>15, }, 3=>{ name=>"5000円", score=>20, }, 4=>{ name=>"6000円以上", score=>30, }, }, 3=>{ name=>"プレゼントの相手", 1=>{ name=>"男性", score=>10, }, 2=>{ name=>"女性", score=>20, }, }, }; # 合計点数のテーブル my %scoretable=( 0=>"0.html", # 該当なかったので新設 30=>"a.html", # 宝くじセット 40=>"b.html", # ご当地スイーツ 50=>"c.html", # シネコンチケット 60=>"d.html", # ワイン試飲会チケット ); # エラーメッセージ my $errmsg="選択されていません。"; my $errflg=0; my %err; my $score=0; my $cgi=new CGI; # チェック及び計算 if($cgi->param("submit") ne "") { for(my $i=1; $presents->{$i}->{name} ne ""; $i++) { my $parm=$cgi->param("form$i"); if($parm eq "") { $err{$i}=$errmsg; $errflg=1; } else { $score+=$presents->{$i}->{$parm}->{score} } } # スコアに応じてページに飛ぶ # (ここもCGIでもいいのですが、あえて飛ばします) if(!$errflg) { my $page=""; foreach my $stable(sort keys %scoretable) { if($score >= $stable) { $page=$scoretable{$stable}; } } print <<EOM; Location: $page EOM exit; } } if(1) { # HTTPヘッダ print "Content-type: text/html\n\n"; # 最初のHTML print <<EOM; <html><head> <title>プレゼントテスト</title> </head> <body> <h1>あなたのプレゼントについてのアンケートです。</h1> どうぞ条件を選択してください <hr /> <form action="test.cgi"> <table> EOM for(my $i=1; $presents->{$i}->{name} ne ""; $i++) { print <<EOM; <tr><td> $i.@{[$presents->{$i}->{name}]} </td><td> EOM for(my $j=1; $presents->{$i}->{$j}->{name} ne ""; $j++) { print <<EOM; <input type="radio" name="form$i" value="$j"@{[$cgi->param("form$i") eq $j ? ' checked="checked"' : '']} /> @{[$presents->{$i}->{$j}->{name}]} EOM } print <<EOM; </td><td>$err{$i}&nbsp;</td></tr> EOM } print <<EOM; <tr><td>&nbsp;</td><td> <input type="submit" name="submit" value="送信" /> </td></tr> </form> </body> </html> EOM }

resetbrain
質問者

お礼

vmdaさん こんばんは   ご親切に教えていただきありがとうございます。 魔法のようにCGIを書いていただき感謝です。 ロリポップのサーバにアップロードして 属性を変更したら見事に動きました。 自分のやりたかったことがそのまま現実になりました 本当にありがとうございました。 とてもうれしいです。 また、未記入の時にエラーメッセージがでるようにまで 気を使っていただきありがとうございました 最初に htmlのデータをホームページビルダー17で 読み込んで 開いてみるとどういうわけか <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta name="GENERATOR" content="JustSystems Homepage Builder Version 17.0.2.0 for Windows"> が書き込まれてしまい、 chraset=utf-8になりませんでした。 タイトルのところや他の文字が化けてしまったので 無償ソフトのKompozerで読み込み直し、 教えていただいた通りの設定を書き込み 文字エンコードを指定して保存でUTF-8で保存したら うまくいきましたので そちらと差し替えています。 検索してみるとCGIというのは、 PerlとかPHPとか いろいろな言語で書いてあるそうなので こんなに自分の欲しかったものを さくっと作られてしまう vmdaさんは本当に尊敬してやみません 自分でも条件や商品名を変えれば うまくつかえそうです

resetbrain
質問者

補足

ymdaさん こんばんは さきほどはありがとうございました。 で、実はお名前をタイプミスしておりました。 yとvを間違えてしまい 申し訳ありませんでした プロフィールを拝見させていただきました。 プログラミングにお強い理由がよくわかりました。 これからも困ったときには「教えて」のお世話になるかと 思いますが、またお教えいただければと思います 本当にありがとうございました

その他の回答 (1)

回答No.2

実は、偶然たまたま組んでいたもののカケラを 利用したようなものなのですが・・・ その為に、書き方が一部いいかげんな部分があるかもしれません。 後は、これは無料サーバーでは動かない場合があるかもしれません。 (海外だと、文字コードの問題も出ることもありますが) ページを転送する部分を書き換えれば動くかとは思われます。 後は、自分の探しているCGIというのは、見つかるようで見つからない ことも結構あるようです。 ページを転送しない仕様でしたら、既存であるかもしれませんが 今回のは、HPビルダを使うことを前提にしましたので 転送するようにしています。 本当は、勉強して頂くのが一番ですが、最低でも、改造するスキルが あれば良いかもしれません。 最後に (使用する文字で、Shift-JISは化ける場合があります) と書きましたが、その場合、化けている文字の前に、半角の¥を 記述すると、化けがなおることがあります。

resetbrain
質問者

お礼

ymdaさん こんにちは きょうは午後からは時間がとれたので いろいろHPビルダーで試行錯誤していました ymdaさんはPerlでも、 最初の方にuse cgiを書かれているから どうもモジュールとかいうものを使って 簡潔なものを作られたらしいことだけは 検索してわかりました とても偶然のカケラで作られたものなんて... 謙遜されていますが、 ぜんぜんオーダーメードのCGIです あと、言語についてもわからないながら 自分も少し勉強しようと思って 無料のプログラム学習サイト ドットインストール http://dotinstall.com/ を見つけました。 そのうち自分でもできるようにマイペースで 勉強してみたいとおもいます。 のちほど ベストアンサーでお礼を差し上げます

resetbrain
質問者

補足

ymdaさん こんばんは  しばしHPビルダーと格闘しておりました。 CGIについては わからないながらいろいろ 検索して勉強してみました 付け焼刃ですが どうも配列というのをうまく使うと いろいろな条件や配点を組み合わせるのが 容易になるみたいです そのうちに自力でCGIかけるよう頑張っていきたいです