ネットでよくある心理テストもどきのCGIの作り方って?

[上に] [前に] [次に]
うらうら [E-Mail] 1999/10/23(土) 01:49:43
ネットでよく見かける心理テストのプログラムもどきでは
ありませんが・・・・

チェックボックスのチェックされたの数によって、
ジャンプするページを変えるには、
どのようなプログラムを組めば良いのでしょうか?

例えば、
チェックが0〜5個だと、Aページへジャンプ。
チェックが、6〜10個だと、Bページへジャンプとか、
そういう感じです。

すみません、助言をよろしくお願いします。

1999/10/23(土) 02:08:03
チェックされてたら1されてなかったら0
$ans = $ans1+$ans2...+$ans10;
if($ans <= 5){
print "Location: $Apage\n\n";
}elsif($ans > 6){
print "Location: $Apage\n\n";
}
かな?

1999/10/23(土) 02:10:50
if($ans <= 5){
print "Location: $Apage\n\n";
}elsif($ans > 5){
print "Location: $Bpage\n\n";
}
だな・・。

1999/10/23(土) 02:21:07
なんどもごめんなさい
$ans = $ans1+$ans2...+$ans10;
if($ans <= 5){
print "Location: $Apage\n\n";
exit;
}elsif($ans > 5){
print "Location: $Bpage\n\n";
exit;
}
でないと上手く行きませんね。

って、言っておいてなんですけど、こういうことはサーバ通さずに
JavaScript等のクライアントサイドで処理したほうが良いのでは
と思います。

うらうら 1999/10/28(木) 11:51:17
早速のレスをありがとうございましたm(_ _)m
猫さんのすばやい対応に比べ、反応が鈍くてすみません(^^;)

$ans = $ans1+$ans2...+$ans10;
if($ans <= 5){
print "Location: $Apage\n\n";
exit;
}elsif($ans > 5){
print "Location: $Bpage\n\n";
exit;
}

と、いう事ですが、
$Bpageは、

$Bpage = http://www.xxx.zzz/';
という感じで、上の辺に表記することに成るのでしょうか?

後、当所の質問では、
>チェックが0〜5個だと、Aページへジャンプ。
>チェックが、6〜10個だと、Bページへジャンプとか、

と、記していましたが、
正確には、
チェックが、1〜5個でAページ
6〜10個でBページ
11〜15個でCページ
16〜20個でDページ

という感じで、4項目にしたいと思っています。
こういう場合、また、当所の2選択と比べ、
表記の仕方がゼンゼン変わって来ますよね?
恐らく・・・・

こういう場合、どの様に表記したら良いのでしょうか?
教えてください m(_ _)m。

うらうら 1999/10/28(木) 11:53:08
あ・・・
>$Bpage = http://www.xxx.zzz/';
>という感じで、上の辺に表記することに成るのでしょうか?

じゃなくって、
$Bpage = 'http://www.xxx.zzz/';
でしょうか?

1999/10/29(金) 01:20:34
と言うか、別に変数に格納する必要なし。

print "Location: http://www.xxx.zzz/\n\n";

で良いです。

みなみ 1999/10/29(金) 02:59:00
>(略)
>という感じで、4項目にしたいと思っています。
>こういう場合、また、当所の2選択と比べ、
>表記の仕方がゼンゼン変わって来ますよね?
>恐らく・・・・

if($ans <= 5){
print "Location: $Apage\n\n";
exit;
}elsif($ans <= 10){
print "Location: $Bpage\n\n";
exit;
}elsif($ans <= 15){
print "Location: $Cpage\n\n";
exit;
}else{
print "Location: $Dpage\n\n";
exit;
}
というふうにelsif文を増殖させればいいのではないでしょうか。

うらうら 1999/11/03(水) 20:29:14
質問に答えていただき、
どうもありがとうございます。

#!/usr/local/bin/perl
require '../jcode.pl';

if($ans <= 5){
print "Location: $Apage\n\n";
exit;
}elsif($ans <= 10){
print "Location: $Bpage\n\n";
exit;
}elsif($ans <= 15){
print "Location: $Cpage\n\n";
exit;
}else{
print "Location: $Dpage\n\n";
exit;
}

とCGIの方に表記し、
HTMLの方を
<FORM ACTION="test.cgi">
</FORM>
でくくったのですが、

チェックボックスを幾つチェックしても、
$Apageにしか、ジャンプしませんでした。

フリーの掲示板を改造するくらいで、
実際自分でプログラムを作った事が無いので、
全体の表記の仕方がいまいち良く分かりません。
上の方法で良いのでしょうか?
CGIのパーミッションは755にしています。

みなみ 1999/11/04(木) 08:07:14
フォームのデータを受け取っていないのではないでしょうか。
<FORM METHOD=POST ACTION="test.cgi">
として、チェックボックスをそれぞれ
<INPUT TYPE=checkbox VALUE=1 NAME=ans1>
のように1から20まで作り、
CGIを次のように書くとうまくいきました。

#!/usr/bin/perl

if ($ENV{'REQUEST_METHOD'} eq "POST") {
 read(STDIN, $in, $ENV{'CONTENT_LENGTH'});
 @a = split(/&/, $in);
 foreach $x (@a) {
  ($name, $value) = split(/=/, $x);
  $FORM{$name} = $value;
 }
}

$ans = 0;
foreach (1..20) {
 $ans += $FORM{"ans$_"};
}

if($ans <= 5){
 print "Location: http://xxx/yyy/zzz.html\n\n";
 exit;
}(以下略)

本当はもっと綺麗に書けそうですが・・。

うらうら 1999/11/06(土) 04:31:49
レスをありがとうございますm(_ _)m

<FORM METHOD=POST ACTION="test.cgi">
と直して、
<INPUT TYPE=checkbox VALUE=1 NAME=ans1>
<INPUT TYPE=checkbox VALUE=2 NAME=ans2>
<INPUT TYPE=checkbox VALUE=3 NAME=ans3>
:
:(以下略..)

と記したのですが・・・

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@tako.ne.jp and inform them of the time the error occurred, and anything you might have done that may have caused the error.

以上の様なエラーが出てしまいました。

今度は、
<INPUT TYPE=checkbox VALUE=1 NAME=ans1>
<INPUT TYPE=checkbox VALUE=1 NAME=ans1>
<INPUT TYPE=checkbox VALUE=1 NAME=ans1>
:
:(以下略..)
と記したら・・・
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@tako.ne.jp and inform them of the time the error occurred, and anything you might have done that may have caused the error.

というエラーが出てしまいました(T-T)。

うらうら 1999/11/06(土) 04:37:02
CGIの方は・・・

#!/usr/local/bin/perl

if ($ENV{'REQUEST_METHOD'} eq "POST") {
 read(STDIN, $in, $ENV{'CONTENT_LENGTH'});
 @a = split(/&/, $in);
 foreach $x (@a) {
  ($name, $value) = split(/=/, $x);
  $FORM{$name} = $value;
 }
}

$ans = 0;
foreach (1..20) {
 $ans += $FORM{"ans$_"};
}

if($ans <= 5){
print "Location: http://xxx/yyy/zzzA.html\n\n";
exit;
}elsif($ans <= 10){
print "Location: http://xxx/yyy/zzzB.html\n\n";
exit;
}elsif($ans <= 15){
print "Location: http://xxx/yyy/zzzC.html\n\n";
exit;
}else{
print "Location: http://xxx/yyy/zzzD.html\n\n";
exit;
}

としました(そのまんまやっているつもりなのですが・・・^^;)。
HTMLファイルの方は、パーミッションは、
644で良いのでしょうか?

みなみ 1999/11/06(土) 05:18:19
<INPUT TYPE=checkbox VALUE=1 NAME=ans1>
<INPUT TYPE=checkbox VALUE=1 NAME=ans2>
<INPUT TYPE=checkbox VALUE=1 NAME=ans3>
というつもりで書きました。
VALUEを全部1にすると20点満点です。
VALUEを変えると配点(?)が変えられます。

エラーの原因ですが、
CGIのほうに全角スペースをそのまま使っていませんか?
(私の前回の書き込みでは字下げに全角スペースを使っています。
そのままコピーペーストするとエラーになると思います。
タブか半角スペースに置き換えてください。)

別の原因だったらごめんなさい。

うらうら 1999/11/06(土) 05:35:54
[[解決]]
>(私の前回の書き込みでは字下げに全角スペースを使っています。
>そのままコピーペーストするとエラーになると思います。
>タブか半角スペースに置き換えてください。)

これが、どんぴしゃだったようです。
お陰様で、見事に動くようになりました。

お二方とも、私のかなり的外れな質問にも
本当に丁寧に答えて下さり、ありがとうございましたm(_ _)m。

[上に] [前に] [次に]