ネットでよくある心理テストもどきの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。
[上に]
[前に]
[次に]