ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

超初心者向けCGI講座コミュの心理テストの集計〜結果の表示ができません

  • mixiチェック
  • このエントリーをはてなブックマークに追加
・テストの概要
指標は6つ(r,i,a,s,e,cの6つ)ありまして,その各指標について2択式(Yes or No)の質問が18問ずつあります(計108問)。
大問1で各指標について,11問ずつ(計66問)
大問2で各指標について7問ずつ(計42問)
問題を置いています。

・集計の仕方
全ての選択肢にチェックした後,送信ボタンを押すと結果が見られるようにしたいと考えています。
各指標(r,i,a,s,e,c)において,Yesの数が多いTop3の名前のHTMLファイル(120個全て作ってあります)を結果として出力したいと考えています。
(例えばYesの数がr:18個,i:15個,a:13個である3つがTop3だったら"ria.html"というファイルを結果として出力)

としたいのですが・・・
うまく動きません・・・

ソースは以下です。
是非間違っている所を教えて下さい。


↓【トップページのphpファイル】↓

<html>

#中略

<FORM METHOD="POST" ACTION='shuukei.php'>

<body>
<div align=center>
<TABLE WIDTH=84% BORDER=0 cellspacing=2 cellpadding=3>
<WBR><BR>

<TR bgcolor=#ffc0cb>
<TD COLSPAN=3 nowrap HEIGHT=21>
<B>大問1.何をしてみたい?</B><BR>
</TD>
</TR>

<TR bgcolor=#FFFFFF><TD COLSPAN=3 nowrap HEIGHT=21><div ALIGN=left>"自分がしてみたいと思う活動"には,「やってみたい」のところに,"したくない,あるいはどちらとも言えないと思う活動"には,「やりたくない」のところに,それぞれチェックしていきましょう。<BR>
</div></TD></TR>

<TR bgcolor=#90ee90><TD WIDTH=4% nowrap HEIGHT=21><DIV ALIGN=right>
1.</DIV></TD><TD WIDTH=63% nowrap HEIGHT=21> 
電気器具を修理する</TD><TD WIDTH=33% nowrap HEIGHT=21><input type="radio" name="r[1]" value="1">やってみたい
<input type="radio" name="r[1]" value="0">やりたくない</TD></TR>

#中略

<TR bgcolor=#90ee90><TD WIDTH=4% nowrap HEIGHT=21><DIV ALIGN=right>
11.</DIV></TD><TD WIDTH=63% nowrap HEIGHT=21> 
動力のついた機械や装置を操作する</TD><TD WIDTH=33% nowrap HEIGHT=21><input type="radio" name="r[11]" value="1">やってみたい
<input type="radio" name="r[11]" value="0">やりたくない</TD></TR>

#以下同様にi,a,s,e,cの質問が各11問ずつ

<TR bgcolor=#ffc0cb>
<TD COLSPAN=3 nowrap HEIGHT=21>
<B>大問2.何ができる?</B><BR>
</TD>
</TR>

<TR bgcolor=#FFFFFF><TD COLSPAN=3 nowrap HEIGHT=21><div ALIGN=left>次からの質問は「はい」「いいえ」の2択になります。<BR></div></TD></TR>

<TR bgcolor=#FFFFCC><TD WIDTH=4% nowrap HEIGHT=21><DIV ALIGN=right>
1.</DIV></TD><TD WIDTH=63% nowrap HEIGHT=21> 
電気器具(電気のこぎりなど)を使ったことがある</TD><TD WIDTH=33% nowrap HEIGHT=21><input type="radio" name="r[12]" value="1">はい
<input type="radio" name="r[12]" value="0">いいえ</TD></TR>

#中略

<TR bgcolor=#FFFFCC><TD WIDTH=4% nowrap HEIGHT=21><DIV ALIGN=right>7.</DIV></TD><TD WIDTH=63% nowrap HEIGHT=21>
家やアパートの部屋のペンキ塗りができる</TD><TD WIDTH=33% nowrap HEIGHT=21><input type="radio" name="r[18]" value="1">はい<input type="radio" name="r[18]" value="0">いいえ</TD></TR>

#以下同様にi,a,s,e,cの質問が各7問ずつ

</TABLE>
<DIV ALIGN=center>
<INPUT TYPE=submit NAME=Submit VALUE=結果を見る>
<INPUT TYPE=reset NAME=Submit2 VALUE=リセット>
<INPUT TYPE=hidden NAME=Select VALUE=AB>
</DIV>
</FORM>
</body>
</html>

以上がトップページのソースです。


そして集計ファイルは以下です。
↓【shuukei.php】↓

<?php
foreach(array('r','i','a','s','e','c') as $v){
$hash[$v] = array_sum($_POST[$v]);
}
foreach(array('r','i',a','s','e','c') as $v){
if($hash[$v] > $out[0]){
$out[2] = $out[1];
$out[1] = $out[0];
$out[0][$v] = $hash[$v];
}
else if($hash[$v] > $out[1]){
$out[2] = $out[1];
$out[1][$v] = $hash[$v];
}
else if($hash[$v] > $out[2]){
$out[2][$v] = $hash[$v];
}
}
for($i=0;$i<3;$i++){
list($key,$value) = each($out[$i]);
$fileName .= $key;
}
header("Location:http://hostname/user/{$fileName}.html");
?>

としているのですが,うまく結果のHTMLファイルが表示されません・・・

コメント(7)

なぜ
header("Location:http://hostname/user/{$fileName}.html");

なの?
これだと集計したものを取り出すロジックがどこにもないような気がします。
どのように上手く動かないのでしょうか?
PHPのエラーが出るのでしょうか?
それとも404エラーになるのでしょうか?

下記の物で動かすとどうなりますか?

もし404が出るようでしたら、$fileNameにどのような文字が入ってるか調べてみてください。

echo $fileName;exit;
のような物をheader("Location:http://hostname/user/{$fileName}.html"); の前に書けばどのような文字が入っている確認できると思います。

<?php
foreach(array('r','i','a','s','e','c') as $v){
$hash[$v] = array_sum($_POST[$v]);
}
foreach(array('r','i','a','s','e','c') as $v){
if($hash[$v] > $out[0]){
$out[2] = $out[1];
$out[1] = $out[0];
$out[0][$v] = $hash[$v];
}elseif($hash[$v] > $out[1]){
$out[2] = $out[1];
$out[1][$v] = $hash[$v];
} elseif($hash[$v] > $out[2]){
$out[2][$v] = $hash[$v];
}
}
for($i=0;$i<3;$i++){
list($key,$value) = each($out[$i]);
$fileName .= $key;
}
header("Location:http://hostname/user/{$fileName}.html");
?>
コメントどうもありがとうございます。

> KIDD@慢性眠不足さん
header("Location:http://hostname/user/{$fileName}.html");
で、例えばそれ以前に集計された結果、$filenameがriaだった場合、ria.htmlのファイルが表示されるのではないのですか??
PHPの参考書を読んでもイマイチ理解が出来ませんでして、物凄く間違ったこと言っているかもしれません・・・

>みずのさん
エラーの出方は、トップページで全て2択のアンケートを応えた後に、【結果を見る】ボタンを押すと、
http://…(中略)…/shuukei.phpのURLに飛ぶのですが、画面は白紙状態になってしまうのです。
早速明日、echo $fileName;exit;をheader();の前においてもう一度同じ動作をしてみます。
echo $fileName;exit;をheader();の前に置いても,アンケート回答した後に【結果を見る】ボタンを押すと,(http://・・・(中略)・・・shuukei.php)には飛ぶんですが,画面は白紙状態になってしまいます。
shuukei.phpのソースの中にprint("ここまでOK1")とかを細かく入れても,同じように白紙の画面になってしまいます。
ではどこかにPHP上のエラーがあり、エラー表示が出来ない設定になっているのかも知れないですね。

最初に

error_reporting(ALL ^ E_NOTICE);

こんなのを入れるとエラーが表示されるかも知れません。

私が記述したPHPをそのまま保存して使ってみてはいかがでしょうか?
#俺のもエラーがあるかも知れませんが。
>みずのさん
コメントありがとうございます。
是非明日、error_reporting(ALL ^ E_NOTICE); を試してみます。
今さっき気付いたのですが、
<FORM METHOD="POST" ACTION='shuukei.php'> を
<BODY>の中ではなく外に記述していました・・・
もしかしてこのせいでデータが飛ばなかったとか・・・
明日修正して試してみます。
あぁそしてごめんなさ

> 各指標(r,i,a,s,e,c)において,Yesの数が多いTop3の名前のHTMLファイル(120個全て作ってあります)を結果として出力したいと考えています。

こういう設計だったんですね・・・
勘違いしてました

#それはいろんな意味で大変だ・・・

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

超初心者向けCGI講座 更新情報

超初心者向けCGI講座のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング