試験問題のプログラムを作っています。
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>";
}
?>
No.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> ]
No.1
- 回答日時:
ちょっと確認、
(1)質問自体をランダムに3問表示したい?
(2)回答の選択肢は2つでそれもシャッフルしたい?
(3)答え合わせのページでは正解・不正解をとわず問題と回答をかく?
とくに3番の提示が中途半端?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3つの連想配列を交互に代入し...
-
foreachで上限回数指定方法また...
-
foreachの間にテーブルの<TR>を...
-
PHPでテキストファイルを読み込...
-
配列を回すとき、最後の要素だ...
-
file_existsでファイル名の部分...
-
Resource id #3 と表示されま...
-
エラーの原因について
-
行数が30万件ほどあるCSVから、...
-
配列をループでたくさん宣言し...
-
配列の何番目かを出力したい
-
String だと「 ByRef引数の型が...
-
プルダウンメニューにDBの内容...
-
スカラーのベクトル微分
-
php で1から100までの素数の表...
-
PHPのmin関数、「1」以上の数値...
-
プルダウンメニューでCSVデータ...
-
チェックボックスが複数選択で...
-
pythonのnumpyでの繰り返しでの...
-
C言語 最大値と最小値を求めて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
foreachで上限回数指定方法また...
-
VB.NET で 二次元のハッシュは...
-
PHP、{}記号の意味
-
マッチング処理(1:N)
-
sqlのデーターを『あ行』『か行...
-
3つの連想配列を交互に代入し...
-
smartyのforeachの使い方
-
Smartyでインクリメント
-
Excel VBAでフィルター後の対象...
-
連想配列でキーを利用して一部...
-
ラジオボタンをランダムに表示...
-
ftokが動かない?
-
配列からプルダウン用のHTMLを生成
-
リストボックス複数選択抽出方法
-
関数の引数に配列を初期化なしで。
-
foreachの間にテーブルの<TR>を...
-
smartyでtplファイルでの2次元配列
-
PHPで変数名にハイフンを使うに...
-
PHPでJSONを扱うときに配列の参...
-
PHPで連想配列のプルダウンメニ...
おすすめ情報