ささっと、要求する仕様のものを作ってみました。
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
}
お礼
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さんは本当に尊敬してやみません 自分でも条件や商品名を変えれば うまくつかえそうです
補足
ymdaさん こんばんは さきほどはありがとうございました。 で、実はお名前をタイプミスしておりました。 yとvを間違えてしまい 申し訳ありませんでした プロフィールを拝見させていただきました。 プログラミングにお強い理由がよくわかりました。 これからも困ったときには「教えて」のお世話になるかと 思いますが、またお教えいただければと思います 本当にありがとうございました