• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セッションについて教えてください。)

セッション関数を使った選択式テストのプログラム作成方法

このQ&Aのポイント
  • セッションを使用して選択式のテストページを複数作成する方法を教えてください。
  • テストページで選んだ答えが次のページで上書きされてしまう問題について解決方法を教えてください。
  • 採点ページで正解数と合計点を表示するPHPプログラムの作成方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ちょっとつくってみました。 いろいろ制御が必要ですが、ざっくり動くと思います。 例題は6問用意してあり、4問回答した時点で採点ページに飛びます。 正解は「1」で統一してもいいのですが、念のため各質問の"R"の値をみています <?PHP session_start(); $mondai_at_page=2; //1ページ当たりの問題数 $max_kaitousuu=4; // 回答できる最大数 $tokuten_at_mondai=5; // 1問あたりの得点 $QA[]=array( "Q"=>array("id"=>1,"text"=>"質問A") ,"A"=>array( array("key"=>1,"text"=>"回答A-1") ,array("key"=>2,"text"=>"回答A-2") ,array("key"=>3,"text"=>"回答A-3") ,array("key"=>4,"text"=>"回答A-4") ) ,"R"=>1 ); $QA[]=array( "Q"=>array("id"=>2,"text"=>"質問B") ,"A"=>array( array("key"=>1,"text"=>"回答B-1") ,array("key"=>2,"text"=>"回答B-2") ,array("key"=>3,"text"=>"回答B-3") ,array("key"=>4,"text"=>"回答B-4") ) ,"R"=>2 ); $QA[]=array( "Q"=>array("id"=>3,"text"=>"質問C") ,"A"=>array( array("key"=>1,"text"=>"回答C-1") ,array("key"=>2,"text"=>"回答C-2") ,array("key"=>3,"text"=>"回答C-3") ,array("key"=>4,"text"=>"回答C-4") ) ,"R"=>3 ); $QA[]=array( "Q"=>array("id"=>4,"text"=>"質問D") ,"A"=>array( array("key"=>1,"text"=>"回答D-1") ,array("key"=>2,"text"=>"回答D-2") ,array("key"=>3,"text"=>"回答D-3") ,array("key"=>4,"text"=>"回答D-4") ) ,"R"=>4 ); $QA[]=array( "Q"=>array("id"=>5,"text"=>"質問E") ,"A"=>array( array("key"=>1,"text"=>"回答E-1") ,array("key"=>2,"text"=>"回答E-2") ,array("key"=>3,"text"=>"回答E-3") ,array("key"=>4,"text"=>"回答E-4") ) ,"R"=>1 ); $QA[]=array( "Q"=>array("id"=>6,"text"=>"質問F") ,"A"=>array( array("key"=>1,"text"=>"回答F-1") ,array("key"=>2,"text"=>"回答F-2") ,array("key"=>3,"text"=>"回答F-3") ,array("key"=>4,"text"=>"回答F-4") ) ,"R"=>2 ); $q=$_REQUEST["q"]; if(count($q)>=$max_kaitousuu){ $tokuten = 0; $kaitousuu = 0; $seikaisuu = 0; foreach($q as $key=>$val){ if($kaitousuu>=$max_kaitousuu) break; foreach($QA as $arr1){ if($arr1["Q"]["id"]==$key){ if($arr1["R"]==$val){ $seikaisuu++; $tokuten += $tokuten_at_mondai; } break; } } $kaitousuu++; } $_SESSION["kaitousuu"]=$kaitousuu; $_SESSION["seikaisuu"]=$sikaisuu; $_SESSION["tokuten"]=$tokuten; header("Location:saiten.php"); exit; } ?> <form method="post"> <?PHP shuffle($QA); $q_no=1; $q_keys=array_keys((array) $q); foreach($QA as $arr1){ if(in_array($arr1["Q"]["id"],$q_keys)) continue; shuffle($arr1["A"]); print "問".($q_no+count($q))." ".$arr1["Q"]["text"]."<br>\n"; foreach($arr1["A"] as $arr2){ $id="q".$arr1["Q"]["id"]."_".$arr2["key"]; print "<INPUT type=\"radio\" id=\"".$id."\" name=\"q[".$arr1["Q"]["id"]."]\" value=\"".$arr2["key"]."\"><label for=\"".$id."\">".$arr2["text"]."</label><br>\n"; } if($q_no >= $mondai_at_page) break; $q_no++; } foreach((array) $q as $key=>$val){ print "<input type=\"hidden\" name=\"q[".htmlspecialchars($key)."]\" value=\"".htmlspecialchars($val)."\">\n"; } ?> <input type="submit" value="go"> </form> ==== saiten.php ==== <?PHP session_start(); print "回答:".$_SESSION["kaitousuu"]."<br>\n"; print "正解:".$_SESSION["seikaisuu"]."<br>\n"; print "得点:".$_SESSION["tokuten"]."<br>\n"; ?>

shenzongse
質問者

お礼

おかげさまでうまく動かすことができました。本当にありがとうございます。 試行錯誤を繰り返しながら少しずつ完成に近づけていきたいと思います。

関連するQ&A