このサイトはPHPを独習する際に作成したスクリプトを基に、プログラム言語初心者のための入門講座として作成しました。PHPは初心者に親しみやすく、解りやすいプログラム言語です。これからプログラムを学ぶ人の参考になればと思います。
Word Excel 二択クイズ(成績管理機能付き)
「こんなこと…」で作った二択クイズに成績管理システムを付けたものなのですが、ちょっと複雑になってしまいました。またユーザー定義関数を複数使用しています。これくらいになると関数のありがたみが実感できます。 管理画面ではこんなことができます。 1、名前とパスワードを登録、同じ名前は登録できない 2、新規登録・登録済みのログイン・管理用ログインを区別する 3、個人成績表を表示できる 4、上位20を表示する。しかも回答時間を計測し反映させる 5、管理者画面では問題作成画面に入れる。 6、管理者画面では登録者の一覧と成績を見ることができる 7、管理者画面では登録者とその成績ファイルを削除できる
ファイル構成
青はフォルダ、赤はPHPファイルです。index を最初に実行した時点で、quiz以下のフォルダ・ファイルは自動作成します。
office |
┬ index.php(トップページ)
├ quiz_ask.php(問題表示画面)
├ quiz_check.php(問題チェック画面)
├ quiz_write.php(問題作成画面)
├ bar.gif(グラフ用画像)
├ back.jpg(背景用画像)
├ style.css(スタイルシート) |
└ quiz─ |
┬ name_EXCEL ─ name(excel個人成績ファイル 人数分作成される) |
|
├ name_WORD ─ name(word個人成績ファイル 人数分作成される)
├ EXCEL(excel問題ファイル)
├ WORD (word問題ファイル)
├ list (IDとパスワードのリスト)
├ toptenWORD (wordトップ20のファイル)
└ toptenEXCEL (excelトップ20のファイル)
|
画面上の操作構成
ログイン画面 |
┬ 新規登録 ──
│
├ 通常ログイン
│
│
└ 管理者 ───
|
┬ 名前とパスワードを登録、後は通常ログインと同じ
└ 登録済みの名前は登録できない
┬ WORD / EXCEL の問題に答える
├ WORD / EXCEL の成績を見る
└ TOP20 を見る
┬ WORD / EXCEL の問題に答える
├ WORD / EXCEL の成績を見る
├ WORD / EXCEL の問題を作る
├ TOP20 を見る
├ 登録者のリストを見る 登録日・名前・パスワード・各受験回数
├ 登録者の成績を見る ── WORD EXCEL をそれぞれ確認できる
└ 登録者を削除する ─── 削除の確認画面
|
定数について
これまでにない新しい項目です。定数は変数と違いスクリプトの途中で変化することはありません。理屈は簡単なのですが、これまでの単純なスクリプトではほとんど必要のないものでした。 ところが今回のスクリプトを作成していて、管理者の名前が if の中に何度か出てくるのですね。それで後で管理者の名前を変えたくなるのです。こんな場合管理者の名前を定数で決めておけば一発で全て変更できるのです。これは便利!やはりスクリプトが長くなって初めて役に立つ機能なのです。書式は
define("MASTER","Tenten")
非常に簡単。実際に使用のときにはこんな感じ、MASTER は Tenten になります。
if($name == MASTER){ echo MASTER;}
つまり"ダブルクォーテイションははずします。
問題表示・問題チェック・問題作成画面
この3ファイルに関しては、基本構造は前回と同じなのですが、多少の変更がなされています。 1、WORD/EXCELで共用するため、index で選んだ WORD/EXCEL をクッキーで覚え反映させる。 2、時間の計測を行い成績表に記入、TOP20 に入れば書き換えを行う。 3、画面が url の記述やブックマークでアクセスされた時の対処。
変数 $_POST // form からデータを受け取る $_GET // url からデータを受け取る $_COOKIE // クッキーを読みこむ
ファイル関連 fopen("ファイル名", "a+") // 開く fclose("ファイル名") // 閉じる flock("ファイル名", LOCK_EX) // ロック flock("ファイル名", LOCK_UN) // ロック解除 fputs("ファイル名", データ) // 書込み file("ファイル名") // 配列に格納 feof("ファイル名") // データの終りを確認 file_exists("ファイル名") // 存在を確認 unlink("ファイル名") // 削除
配列関連 count(配列) // 要素の個数を返す sort(配列,SORT_NUMERIC) // 数字として並べ替え rsort(配列,SORT_NUMERIC) // 逆順に並べ替え shuffle(配列) // シャッフル split("&",配列) // &で区切られた文字列を配列に入れる array_pop(配列) // 配列の最後の空白を削除 array_slice(配列,開始番号, 10) // 開始番号から10問を取り出す array_search(配列,要素) // 配列から要素を探しキーを返す array_splice(配列,キー,1) // 配列からキーの要素を1つ削除
その他の関数 mkdir(フォルダ) // フォルダを作成 strlen(変数) // 文字数を返す rtrim(変数) // 文字列の最後から空白文字を削除 date("Y/m/d H:i:s") // 日付を返す srand((float)microtime() * 1000000) // 乱数を初期化 htmlspecialchars(変数, ENT_QUOTES) // タグを無効化 setcookie("クッキー名",変数,時間) // クッキーに記憶させる ereg("([a-zA-Z0-9]{4,})",変数) // 正規表現で文字を判断
その他 function(){ 〜 global 〜 return } // ユーザー定義関数 if(条件){ 〜break } // 条件分岐 switch (変数){ } // 条件分岐 for(条件){ } // 繰返し while(条件){ } // 繰返し
ユーザー定義関数について
ユーザー定義関数は()を空欄にして使う場合と、変数を入れて使う場合があります。
function ABC(){
global $var;
global $boo;
$ans = $var + $boo;
return $ans;
}
|
function ABC($a,$b){
$ans = $a + $b
return $ans;
}
|
$answer = ABC();
|
$answer = ABC($var,$boo);
|
どちらでも結果は同じなのですが、右の場合 $var,$boo を他の変数に変えても構わないのです。スクリプトが複雑になりすぎて、解りづらくなる時は、左側つまり global を使い、変数が状況によって変わる場合は右の方法を使っています。もちろん同時に使うこともできます。
※デモ用の管理画面も作成しました。スクリプトはこの分も含んでいますので無駄に複雑になってしまいましたが、このままスクリプトを紹介します。WORD EXCEL 2002 クイズは、事実某検定試験3級対策として作りました。興味のある方はぜひチャレンジしてください。
⇒こんな感じ |