プロが教えるわが家の防犯対策術!

試験問題のプログラムを作っています。
MySQLに格納されている問題文と選択肢をシャッフルして表示し、ユーザーからは見えない選択肢aを選ぶと正解で得点が1カウントされるものです。
問題用紙のページではきちんと問題と選択肢が表示されるのですが、セッションを使い採点のページに進むとMySQLに入っている問題文と選択肢が大量に表示されてしまいました。
ユーザーが採点のページに進むとどの問題を間違えたのか確認できるように問題用紙のページと同じように表示させたいのですが、これはどのようにコードを書けばよいのでしょうか?
どうぞよろしくお願い致します。

//問題用紙のページ
<?php
session_start();
?>
<form method="post" action="grading.php">
<?php
$arr = array();
while ($row = mysqli_fetch_array($result)){
$arr[] = $row;
}
shuffle($arr);
$cnt = 0;
foreach($arr as $row){
if($cnt >= 3){break;}
print $row['question'];
print "<BR>";
$choices = array();
$choices['a'] = "<INPUT type=radio name=radi_".$cnt." value=a>".$row['choices_a']."<BR>";
$choices['b'] = "<INPUT type=radio name=radi_".$cnt." value=b>".$row['choices_b']."<BR>";
shuffle($choices);
foreach($choices as $val){
print $val;
}
session_register('sesdata_q');
session_register('sesdata_a');
session_register('sesdata_b');
$_SESSION['sesdata_q'][] = $row['question'];
$_SESSION['sesdata_a'][] = $row['choices_a'];
$_SESSION['sesdata_b'][] = $row['choices_b'];
print "<BR>";
$cnt++;
}
?>
<INPUT type="submit" value=" 採点 " name="grading">

//採点のページ
<?php
session_start();
$score = 0;
$answer = $_POST['radi_0'];
if($answer == 'a'){
$score++;
}
$answer = $_POST['radi_1'];
if($answer == 'a'){
$score++;
}print "3問中" . $score . "問正解";
print "<br>";
foreach($_SESSION['sesdata_q'] as $val){
print $val."<BR><BR>";
}
foreach($_SESSION['sesdata_a'] as $val){
print $val."<BR><BR>";
}
foreach($_SESSION['sesdata_b'] as $val){
print $val."<BR><BR>";
}
?>

A 回答 (2件)

とりあえず書いてみたので参考までに



//situmon.php

<?PHP
session_start();
//mysqlへの接続
$sql="SELECT * FROM test ORDER BY RAND() LIMIT 3";
$res=mysql_query($sql);
while($row=mysql_fetch_array($res,MYSQL_ASSOC)){
$a=&$arr[];
$a["question"]=$row["question"];
$temp[0]["key"]="a";
$temp[0]["value"]=$row["choices_a"];
$temp[1]["key"]="b";
$temp[1]["value"]=$row["choices_b"];
shuffle($temp);
$a["answer"]=$temp;
unset($temp,$a);
}
$_SESSION["arr"]=$arr;//シャッフルした状態でセッションに流す
?>
<form action="kaito.php">
<?PHP
foreach($arr as $key=>$a){
print "質問".($key+1).")".$a["question"]."<br>\n";
foreach($a["answer"] as $answer){
print "<input type=\"radio\" name=\"q[".$key."]\" value=\"".$answer["key"]."\">".$answer["value"]."<br>\n";
}
}
?>
<input type="submit" value="回答する">
</form>

//kaito.php
<?PHP
session_start();
$arr=$_SESSION["arr"];
$count=0;
foreach($arr as $key=>$a){
print "質問".($key+1).")".$a["question"]."<br>\n";
foreach($a["answer"] as $answer){
if($answer["key"]==="a"){
print "<span style=\"color:blue\">[正解]";
}
print $answer["value"];
if($answer["key"]===$_REQUEST["q"][$key]){
print " ・・・あなたの選択";
}
print "</span><br>\n";
}
if($_REQUEST["q"][$key]==="a"){
$count++;
}
}
print "<span style=\"color:red\">".$count."問正解!!\n<hr>\n";
?>
[ <a href="situmon.php">質問へ</a> ]
    • good
    • 0

ちょっと確認、


(1)質問自体をランダムに3問表示したい?
(2)回答の選択肢は2つでそれもシャッフルしたい?
(3)答え合わせのページでは正解・不正解をとわず問題と回答をかく?

とくに3番の提示が中途半端?
    • good
    • 0

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