dポイントプレゼントキャンペーン実施中!

こんにちは、お世話になります。

ホームページ作成ソフトを購入して
ホームページがすこしづつ自作できるように
なってきたので
プレゼントの紹介サイトを作りたいと思っています。

具体的には次のようなことがしたいです


次のようなアンケートをとり
それぞれの選択肢を点数化して配点しておき、
選択された回答項目の合計点数で分岐して
プレゼントの商品紹介のページを
変えるように表示したいと思います。



たとえば次の3項目の質問をして、
それぞれの選択肢にそれぞれ配点をしてみた場合ですが

 注.(配点部分)はホームページには表示しません

===============================
●あなたのプレゼントについてのアンケートです。
 どうぞ条件を選択してください

1.年齢: 20代(10点) 30代(20点) 40代(30点) 50代以上(30点)
2.予算: 2000円(10点) 3000円(15点) 5000円(20点) 6000円以上(30点)
3.プレゼントの相手: 女性(20点) 男性(10点)

================================


この結果 
訪問者が20代、予算は3000円、相手は女性を選択した
アンケート結果とすれば合計点45点になりますが

合計点数のテーブルは
あらかじめ次のように設定してあるとします。

30点台:宝くじセット      →分岐先A.html
40点台:ご当地スイーツ     →分岐先B.html
50点台:シネコンチケット    →分岐先C.html 
60点以上:ワイン試飲会チケット →分岐先D.html


結果、表示するのはB.htmlになります。



ホームページそのものは自分でホームページ作成ソフトで
作れるようになりましたが
このようなアンケートを取って、合計点数をつけ
このように条件分岐するには
そのような動作をする選択アンケートCGIが必要らしいと
聞きました。


自分ではCGIというプログラムを書くことは
できませんので
どなたか、このような選択アンケートを使えるCGIを
ご存知でしたら
教えていただけませんでしょうか。
(できたら無料のものがありがたいのですが)

サーバーはロリポップさんというところを借りて
います。FTPというのは少しわかります。

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

A 回答 (2件)

ささっと、要求する仕様のものを作ってみました。



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}</td></tr>
EOM
}
print <<EOM;
<tr><td></td><td>
<input type="submit" name="submit" value="送信" />
</td></tr>
</form>
</body>
</html>
EOM
}

この回答への補足

ymdaさん こんばんは


さきほどはありがとうございました。

で、実はお名前をタイプミスしておりました。

yとvを間違えてしまい

申し訳ありませんでした

プロフィールを拝見させていただきました。

プログラミングにお強い理由がよくわかりました。

これからも困ったときには「教えて」のお世話になるかと

思いますが、またお教えいただければと思います

本当にありがとうございました

補足日時:2012/10/30 22:43
    • good
    • 0
この回答へのお礼

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さんは本当に尊敬してやみません

自分でも条件や商品名を変えれば
うまくつかえそうです

お礼日時:2012/10/30 22:29

実は、偶然たまたま組んでいたもののカケラを


利用したようなものなのですが・・・

その為に、書き方が一部いいかげんな部分があるかもしれません。

後は、これは無料サーバーでは動かない場合があるかもしれません。
(海外だと、文字コードの問題も出ることもありますが)
ページを転送する部分を書き換えれば動くかとは思われます。

後は、自分の探しているCGIというのは、見つかるようで見つからない
ことも結構あるようです。

ページを転送しない仕様でしたら、既存であるかもしれませんが
今回のは、HPビルダを使うことを前提にしましたので
転送するようにしています。

本当は、勉強して頂くのが一番ですが、最低でも、改造するスキルが
あれば良いかもしれません。

最後に
(使用する文字で、Shift-JISは化ける場合があります)

と書きましたが、その場合、化けている文字の前に、半角の¥を
記述すると、化けがなおることがあります。

この回答への補足

ymdaさん こんばんは 

しばしHPビルダーと格闘しておりました。
CGIについては
わからないながらいろいろ
検索して勉強してみました


付け焼刃ですが
どうも配列というのをうまく使うと
いろいろな条件や配点を組み合わせるのが
容易になるみたいです

そのうちに自力でCGIかけるよう頑張っていきたいです

補足日時:2012/11/01 00:02
    • good
    • 0
この回答へのお礼

ymdaさん こんにちは

きょうは午後からは時間がとれたので
いろいろHPビルダーで試行錯誤していました


ymdaさんはPerlでも、
最初の方にuse cgiを書かれているから
どうもモジュールとかいうものを使って
簡潔なものを作られたらしいことだけは
検索してわかりました


とても偶然のカケラで作られたものなんて...
謙遜されていますが、
ぜんぜんオーダーメードのCGIです


あと、言語についてもわからないながら
自分も少し勉強しようと思って
無料のプログラム学習サイト

ドットインストール
http://dotinstall.com/

を見つけました。

そのうち自分でもできるようにマイペースで
勉強してみたいとおもいます。

のちほど
ベストアンサーでお礼を差し上げます

お礼日時:2012/10/31 15:58

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