>>この記事には書き直した新しいページがあります。<<
<<前 [TOP] 次>>
簡単な計算練習プログラムを作成してみます。
大まかな設計内容です。
ファイル構成です。
解答がされたら、問題数・各問題の値・加減のいずれなのか・解答の値を「drill-ans.php」へpostする
以下のHTMLファイルと2つのPHPプログラムをメモ帳で作成して、「phpsample」フォルダに保存して下さい。
【set-drill.html】
<p>どの範囲で問題を出題しますか?</p> <form action="drill.php" method="post"> <p> 問題桁数<br> <input type="radio" name="keta" value="1" checked>0-9まで<br> <input type="radio" name="keta" value="2">0-99まで<br> </p> <p> 演算指定(指定がないときは足し算のみ行われます)<br> <input type="checkbox" name="ka" checked>足し算<br> <input type="checkbox" name="gen">引き算<br> </p> <input type="submit"> <input type="reset"> </form>
【drill.php】
<p>計算練習</p> <?php if ($_POST['keta']==1) { $max="9"; } else { $max="99"; } print("選択したのは0-${max}までの問題です。<br>\n"); // POSTされた加減に応じて配列を作成 foreach ($_POST as $index=>$val) { switch ($index) { case "ka": $ope['ka']="ka"; break; case "gen": $ope['gen']="gen"; break; } } // いずれもチェックされていないときの処理 if (count($ope)==0) { $ope['ka']="ka"; } $num=5; print("全部で${num}問出題します。<br>\n"); ?> <p> <form action="drill-ans.php" method="post"> <?php // 隠しフィールドで問題数を送信 print("<input type=\"hidden\" name=\"num\" value=\"${num}\">\n"); for ($i=0; $i<$num; $i++) { print(($i+1)."問目 "); $a=rand(0, $max); $b=rand(0, $max); // array_rand()は配列の要素をランダムに抽出する関数 $o = array_rand($ope); switch ($o) { case "ka": print("${a} + ${b} = "); break; case "gen": print("${a} - ${b} = "); break; } // 値を変数○問目の形式で送信 print("<input type=\"text\" name=\"ans${i}\"><br>\n"); print("<input type=\"hidden\" name=\"a${i}\" value=\"${a}\">\n"); print("<input type=\"hidden\" name=\"b${i}\" value=\"${b}\">\n"); print("<input type=\"hidden\" name=\"ope${i}\" value=\"${o}\">\n"); } ?> <input type="submit"> <input type="reset"> </form> </p>
【drill-ans.php】
<p>計算練習結果</p> <?php $num = $_POST['num']; for ($i=0; $i<$num; $i++) { print(($i+1)."問目 "); // 送信されたフィールドの内容を代入 $a = $_POST['a'.$i]; $b = $_POST['b'.$i]; $ope = $_POST['ope'.$i]; $ans = $_POST['ans'.$i]; switch ($ope) { case "ka": print("${a} + ${b} = ${ans} "); if ($a+$b == $ans) { print(" ....正解<br>\n"); } else { print(" ....不正解。答えは".($a+$b)."<br>\n"); } break; case "gen": print("${a} - ${b} = ${ans} "); if ($a-$b == $ans) { print(" ....正解<br>\n"); } else { print(" ....不正解。答えは".($a-$b)."<br>\n"); } break; } } ?>
Apacheを起動し、Webブラウザで「http://localhost/phpsample/set-drill.html」にアクセスして実行結果を確認してください。
<<前 [TOP] 次>>