ファイル 13−4 問題画面
<?php error_reporting(1); /*--------------------------------------------------クッキーの設定*/ $pass_ask = $_POST['password_ask']; $name = $_POST['name']; $name = htmlspecialchars($name, ENT_QUOTES); /*タグを無効化*/ if($pass_ask==null or $name == null){ $pass_ask=$_COOKIE['password_quiz_web']; $name=$_COOKIE['name_web']; } setcookie("password_quiz_web", $pass_ask, time()+60*60); setcookie("name_web", $name, time()+60*60); $login = $_POST['loginn']; /*ログオフの設定*/ if($login == "LOGOFF") { setcookie("password_quiz_web"); //*クッキー"password"をクリア*/ setcookie("name_web"); /*クッキー"password"をクリア*/ $pass_ask = ""; /*パスワードデータをクリア*/ $name = ""; /*パスワードデータをクリア*/ } ?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"><head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <link rel="stylesheet" href="./style2.css"> <title>みんなでクイズ</title></head> <body><div class="file2"> <?php /*--------------------------------------------------パスワード・名前入力画面*/ if($pass_ask != "pass"){ echo "<form action='13_04_quiz_ask.php' method='post'>¥n"; echo " PASSWORD <input type='password' name='password_ask' size='12'>¥n"; echo " NAME <input type='text' name='name' size='15'>"; echo " <input type='submit' name ='loginn' value='LOGIN'></form>¥n"; echo " 1レベル5問出題されます。各レベルは4問以上正解で次のレベルに行けます。問題は各レベル10問からランダムに5問が出題されます。クリアできなければそこで終了です。全3レベルをクリアすると合格です。パスワードは pass 、NAMEはなんでもいいです。"; echo "<br><br> このクイズはテキトーEXCELクイズなのですが、だれでも問題を書きかえることができます。したがって変な問題が出てくることもありますのでテキトーに楽しんで解答してください。"; echo "<br><br> 解説に戻る時は必ずログオフしてください。"; echo "<div style='width:650;margin:30px;padding:20px;font-size:15px'>"; echo "<a href='../second.php?page_num=513'>解説にもどる</a></div>"; } else if($pass_ask == "pass" and $name != null){ /*--------------------------------------------------チェックファイルからの受け取り*/ $level_get = $_POST['level']; $right_cnt_before = $_POST['point']; $updir = "quiz/excel"; $enter = $_POST['enter']; $level = 1; $level += $level_get; /*チェックでクリアできると1レベル上がる*/ /*--------------------------------------------------タイトルとLOGOFF*/ echo "<form action='13_04_quiz_ask.php' method='post'>¥n"; echo "<table width='700' border='0'><tr><td valign='middle'>¥n"; echo "<span class='shadow'>¥n"; echo "MINNADE QUIZ LEVEL $level</span></td>¥n"; echo "<td align='right'><input type='submit' name ='loginn' value='LOGOFF'>¥n"; echo "</td></tr></table></form>¥n"; /*--------------------------------------------------ここから問題の読みこみと5問の取りだし*/ if(file_exists("./$updir")){ /*一度すべての行を順に読みこむ*/ $filepointer=fopen("./$updir", "r"); while(!feof($filepointer)){ /*読みこんだ各行を配列に格納*/ $fileline = fgets($filepointer); $quest[] = $fileline; } fclose($filepointer); } array_pop($quest); /*最後の改行が空白の配列になるので削除*/ sort($quest,SORT_NUMERIC); /*要素でソートする(要素の初めは問題番号になっている)*/ $start = $level*10-10; /*レベル番号から開始番号を調べる*/ $quest = array_slice($quest, $start, 10); /*開始番号から10問を取り出す*/ srand((float)microtime() * 1000000); //乱数を初期化 shuffle($quest); //取り出した10問をシャッフル /*--------------------------------------------------取り出した5問を表示する*/ echo "<form action='13_04_quiz_check.php' method='post'>¥n"; $qs_num = count($quest); $qs_cnt = 1; while($qs_cnt < 6){ $text = split("&&",$quest[$qs_cnt]); $quest_now[] = $text[0]; echo "<div class='nikki'>¥n"; echo "<b>$qs_cnt</b> $text[2] <br>¥n"; echo " <input type='radio' name='ans".$text[0]."' value='YES'>正しい¥n"; echo " <input type='radio' name='ans".$text[0]."' value='NO'>間違い</div>¥n"; $qs_cnt++; } /*--------------------------------------------------チェックファイルにデータを送る*/ $cont = 0; /*出題した問題番号、配列のままでは送れないので文字列にする*/ while($cont < 5){ $ary_send = $quest_now[$cont]; $send = $send."&".$ary_send; $cont++; }
echo "<input type='hidden' name='right_cnt_before' value='".$right_cnt_before."'>¥n"; echo "<input type='hidden' name='level_now' value='".$level."'>¥n"; echo "<input type='hidden' name='quest_now' value='".$send."'>¥n"; echo "<br> <input type='submit' name='enter' value='CHECK'></form>¥n"; /*--------------------------------------------------トップ画面で名前を入力しなかった場合*/ } else { echo "ブラウザの戻るボタンで戻り NAME を入力してください。"; } ?></body> </html>
ファイル 13−4 問題チェック画面
<?php error_reporting(1); /*--------------------------------------------------クッキーの設定*/ $pass_ask = $_POST['password_ask']; $name = $_POST['name']; $name = htmlspecialchars($name, ENT_QUOTES); //タグを無効化
if($pass_ask==null){ $pass_ask=$_COOKIE['password_quiz_web']; $name=$_COOKIE['name_web']; } setcookie("password_quiz_web", $pass_ask, time()+60*60); setcookie("name_web", $name, time()+60*60);
$login = $_POST['loginn']; /*ログオフの設定*/ if($login == "LOGOFF") { setcookie("password_quiz_web"); /*クッキー"password_quiz_ask_web"をクリア*/ setcookie("name_web"); /*クッキー"name_web"をクリア*/ $pass_ask = ""; /*パスワードデータをクリア*/ $name = ""; /*nameデータをクリア*/ } ?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"><head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <link rel="stylesheet" href="./style2.css"> <title>みんなでクイズ</title></head> <body><div class="file2"> <?php /*--------------------------------------------------パスワード・名前入力画面*/ if($pass_ask != "pass"){ echo "<form action='13_04_quiz_ask.php' method='post'>¥n"; echo " PASSWORD <input type='password' name='password_ask' size='12'>¥n"; echo " NAME <input type='text' name='name' size='15'>¥n"; echo " <input type='submit' name ='loginn' value='LOGIN'></form>¥n"; echo "1レベル5問出題されます。各レベルは4問以上正解で次のレベルに行けます。問題は各レベル10問からランダムに5問が出題されます。クリアできなければそこで終了です。全3レベルをクリアすると合格です。<br>解説に戻る時はログオフしてください。¥n"; echo "<div style='width:650;margin:30px;padding:20px;font-size:15px'>"; echo "<a href='../second.php?page_num=513'>解説にもどる</a></div>"; } else if($pass_ask == "pass" and $name != null){ /*--------------------------------------------------データの受け取り*/ $quest_now = $_POST['quest_now']; /*実施された問題番号*/ $level_now = $_POST['level_now']; $right_cnt_before = $_POST['right_cnt_before']; $updir = "quiz/excel"; $quest_num = split("&",$quest_now); /*問題番号を再び配列へ*/ $ans[1] = $_POST["ans$quest_num[1]"]; /*解答の受け取り、上の問題番号が form の name になっている*/ $ans[2] = $_POST["ans$quest_num[2]"]; $ans[3] = $_POST["ans$quest_num[3]"]; $ans[4] = $_POST["ans$quest_num[4]"]; $ans[5] = $_POST["ans$quest_num[5]"]; /*--------------------------------------------------LOGOFFの設定*/ echo "<form action='13_04_quiz_ask.php' method='post'>¥n"; echo "<table width='700' border='0'><tr><td valign='middle'>¥n"; echo "<span class='shadow'>¥n"; echo "MINNADE QUIZ LEVEL $level_now </span></td>¥n"; echo "<td align='right'>¥n"; echo "</td></tr></table></form>¥n"; /*--------------------------------------------------問題と解答の読みこみ*/ if(file_exists("./$updir")){ $filepointer=fopen("./$updir", "r"); while(!feof($filepointer)){ /*一度すべての問題を順に読みこむ*/ $fileline = fgets($filepointer); $text = split("&&",$fileline); /*読み込んだデータから問題番号を取り出す$text[0]が番号*/ for($a = 1;$a < 6;$a++){ /*問題番号を実施した問題の番号と照合*/ if($text[0] == $quest_num[$a]){ /*同じ番号が見つかったら配列に入れる*/ $quest_ans[] = $a."&&".$fileline; } } } fclose($filepointer); } /*--------------------------------------------------ここから表示部分*/ sort($quest_ans,SORT_NUMERIC); $right_cnt = 0; $qs_cnt = 0; while($qs_cnt < 5){ $text = split("&&",$quest_ans[$qs_cnt]); $quest_ans[] = $text[0]; $qs_cnt ++; if($text[2] == $ans[$qs_cnt]){ $check = "○"; $right_cnt ++ ; } else { $check = "×"; } if($text[2] == "YES"){ $answer = "正しい"; } else { $answer = "間違い"; } echo "<div class='nikki2'><b>$text[0]</b>¥n <font color='red'><b>$check</b></font>"; echo " $answer <br>¥n問題 $text[3]<br><font color='blue'>解説 $text[4] </font></div>¥n"; } /*--------------------------------------------------採点結果による表示*/ if($right_cnt < 4){ /*4問以上の正解がなかった場合*/ $right_cnt += $right_cnt_before; $point = (int)($right_cnt/15*100); $level = $level_now -1;
switch ($level){ /*switch を使った条件分岐*/ case $level = 0 ; $mess = "がんばれ〜"; break; case $level = 1 ; $mess = "まだまだですね"; break; case $level = 2 ; $mess = "おしいっ!もうちょっと!"; break; } /*--------------------------------------------------点数データの書きこみ*/ $time_ptn = date("Y/m/d H:i:s"); $filepointer=fopen("./quiz/name/$name", "a+"); //ここから書きこみ flock($filepointer, LOCK_EX); fputs($filepointer,$time_ptn."--Level-".$level." -- Point-".$point."¥n"); flock($filepointer, LOCK_UN); fclose($filepointer); /*--------------------------------------------------レベル3まで行かなかった場合の表示*/ echo "<div style='font-size:16px;font-weight:bold;margin:15px'>終了!クリアレベル $level ¥n"; echo " $point 点です。".$name."さん、$mess </div>¥n"; echo " <a href='13_04_quiz_ask.php'>もう一度やる</a>¥n"; /*--------------------------------------------------レベル3が終了した場合*/ } else { if($level_now == 3){ $right_cnt += $right_cnt_before; $point = (int)($right_cnt/15*100); $level = $level_now -1; echo "<div style='font-size:16px;margin:15px;font-weight:bold;'>¥n"; echo "最終レベルをクリアしました。合格です!$right_cnt 問正解、$point 点です。¥n"; echo "<a href='13_04_quiz_ask.php'>もう一度</a></div>¥n"; $time_ptn = date("Y/m/d H:i:s"); $filepointer=fopen("./quiz/name/$name", "a+"); /*ここから書きこみ*/ flock($filepointer, LOCK_EX); fputs($filepointer,$time_ptn."--Level-".$level." -- Point-".$point."¥n"); flock($filepointer, LOCK_UN); fclose($filepointer); /*--------------------------------------------------レベルクリア、レベル2までの処理*/ } else { echo " $right_cnt 問正解です。"; $right_cnt += $right_cnt_before; echo "<form action='13_04_quiz_ask.php' method='post'>¥n"; echo "<input type='hidden' name='level' value='".$level_now."'>¥n"; echo "<input type='hidden' name='point' value='".$right_cnt."'>¥n"; echo " <input type='submit' name ='enter' value='次のレベル'>¥n"; } } /*--------------------------------------------------採点結果表示*/ } /*パスワード*/ ?></body> </html>
ファイル 13−4 問題作成画面
<?php error_reporting(1); /*--------------------------------------------------パスワード”の設定*/ $pass_w = $_POST['password_w']; $name = $_POST['name']; if($pass_w == null){ $pass_w = $_COOKIE['password_quiz_web']; $name = $_COOKIE['name_web']; } setcookie("password_quiz_web", $pass_w, time()+60*60); setcookie("name_web", $name, time()+60*60);
$login = $_POST['loginn']; /*ログオフの設定*/ if($login == "LOGOFF") { setcookie("password_quiz_web"); /*クッキー"password"をクリア*/ setcookie("name_web"); /*クッキー"name_web"をクリア*/ $pass_w = ""; /*パスワードデータをクリア*/ $name = ""; /*nameデータをクリア*/ } ?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"><head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <link rel="stylesheet" href="./style2.css"> <style type="text/css"> <!-- .nikki { font-size:12px; line-height:15px; text-align:left; width:660px; padding:7px; margin:0px; border-style:solid; border-width:1px; background-color:#ffffff; border-color:#abcdef; } //--> </style><title>みんなでクイズ</title></head> <body><div class="file2"> <?php if($pass_w != "pass"){ echo "<form action='13_04_quiz_write.php' method='post'>¥n"; echo " PASSWORD <input type='password' name='password_w' size='12'>¥n"; echo " NAME <input type='text' name='name' size='15'>¥n"; echo " <input type='submit' name ='loginn' value='LOGIN'>¥n"; echo "</form>"; echo "パスワードを入れてね。pass です。NAMAEはなんでもいいです。"; echo "<div style='width:650;margin:30px;padding:20px;font-size:15px'>"; echo "<a href='../second.php?page_num=513'>解説にもどる</a></div>"; } else if($pass_w == "pass"){ /*--------------------------------------------------LOGOFFの設定*/ echo "<form action='13_04_quiz_write.php' method='post'>"; echo "<table width='650' border='0'><tr><td valign='middle'>"; echo "<div style='margin:10px;font-size:15px'>クイズ入力 : "; echo date("Y/m/d") . " <a href='13_04_quiz_ask.php'>問題</a></div></td>¥n"; echo "<td align='right'><input type='submit' name ='loginn' value='LOGOFF'></td>"; echo "<tr><td colspan='2'><div style='margin:5px;font-size:12px;line-height:18px'>"; echo "問題は削除・書き換えができます。表示されているEXCEL問題もテキトーなので、どんどん書き換えてください。"; echo "<br>先ず、番号を選んで削除、次に空いた番号を選んで問題の入力です。</div></td></tr></table>"; /*--------------------------------------------------*/ echo "<table border='0' width='660'><tr>"; echo "<td>番号 <select name='number'>"; echo "<option>"." " ."</option>"; $cnt = 1; while ($cnt < 31){ echo "<option value='$cnt'>".$cnt."</option>"; $cnt++; } echo "</select> 正解 <select name='answer'>"; echo "<option value='YES'>正しい</option>"; echo "<option value='NO'>間違い</option>"; echo "</select></td></tr>"; echo "<tr><td>問題 <textarea name='quiz' cols='90' rows='2'></textarea></td></tr>"; echo "<tr><td>解説 <textarea name='expln' cols='90' rows='2'></textarea></td></tr>"; echo "<tr><td><input type='submit' name='enter' value='書込/表示'> "; echo "<input type='submit' name='enter' value='消す!'></td></tr></table></form>"; /*--------------------------------------------------データの受け取りと設定*/ $number = $_POST['number']; $quiz = $_POST['quiz']; $answer = $_POST['answer']; $expln = $_POST['expln']; $enter = $_POST['enter']; $quiz = htmlspecialchars($quiz, ENT_QUOTES); /*タグを無効化 */ $expln = htmlspecialchars($expln, ENT_QUOTES); /*タグを無効化 */ $updir = "quiz/excel"; //保存するファイルの名前 $data = $number."&&".$answer."&&".$quiz."&&".$expln."¥n"; /*入力データを&&でくっつける*/ /*--------------------------------------------------ここから削除*/ if ($enter == "消す!"){ $filepointer=fopen("./$updir", "r"); /*いったん読み出し*/ while(!feof($filepointer)){ $fileline = fgets($filepointer); /*問題はキーの番号と実際の問題番号が違うこと*/ $ary_num = split("&&",$fileline); /*要素を配列に入れる、ary_num[0]が問題番号になる*/ $quest_del[$ary_num[0]] = $fileline; /*問題番号をキーとして配列に入れ直す*/ } fclose($filepointer); $qs_num = count($quest_del); $qs_cnt = 1; while($qs_cnt < 31){ /*入力番号と同じ配列キーを削除*/ if($number == $qs_cnt){; $quest_del[$qs_cnt] = ""; break; } $qs_cnt++; } sort($quest_del); $filepointer=fopen("./$updir", "w+"); /*もう一度書きこみ*/ flock($filepointer, LOCK_EX); $qs_cnt = 0; while($qs_cnt <= $qs_num){ fputs($filepointer, $quest_del[$qs_cnt]); $qs_cnt++; } flock($filepointer, LOCK_UN); fclose($filepointer); /*--------------------------------------------------ここから書き込み部分*/ } else if($enter == "書込/表示" and $data != null){ $filepointer=fopen("./$updir", "a+"); /*追記でファイルを開く*/ while(!feof($filepointer)){ $fileline = fgets($filepointer); /*一度ファイルを全部読む*/ $text = split("&&",$fileline); /*要素を配列にいれる*/ if($number == $text[0]){ /*入力した番号が既にあれば*/ $select = "no"; break; /*中止*/ } } If($select != "no"){ /*入力しようとする問題番号が存在しない場合に書き込み*/ flock($filepointer, LOCK_EX); fputs($filepointer, $data); flock($filepointer, LOCK_UN); fclose($filepointer); } else { echo "その番号はすでにあります"; } } /*--------------------------------------------------ここから表示部分*/ if(file_exists("./$updir")){ $filepointer=fopen("./$updir", "r"); /*一度すべて読みこむ*/ while(!feof($filepointer)){ $fileline = fgets($filepointer); $quest[] = $fileline; /*配列にいれる*/ } fclose($filepointer); } /*-------------入力時に修正があるので、問題はキー番号順に並んでいるわけではない。*/ sort($quest,SORT_NUMERIC); /*要素で並べ替え、要素の先頭は問題番号である*/ $qs_num = count($quest); /*配列を数える*/ $qs_cnt = $qs_num-1; /*問題を最終番号から表示させるため、繰返しは29から順に減らす*/ while($qs_cnt > 0){ $text = split("&&",$quest[$qs_cnt]); echo "<div class='nikki'>"; echo "<b>$text[0]</b> $text[1] $text[2]<br> <font color=blue>$text[3] </font></div><br>"; $qs_cnt--; } } ?></div> </body> </html>
|
2023/9 | SUN |
MON |
TUE |
WED |
THU |
FRI |
SAT |
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
 フォクすけ©2006 Mozilla Japan |