PHP とMySQLでCAPMのクイズを作成②

今回はそれぞれのPHPのロジックを説明していきます。参考にしたサイトはlearn to design a php quizzer using php and mysql(part1) です。シリーズは1-6までで、DBの中身がやや違うことと、時々違うやり方でやったりしました。

1.index.php
2.question.php
3.process.php
4.final.php

1.index.php

1-1. まずdatabase.phpでデータベースに接続します。

MySQLi ファンクションでMySQL のデータベースにアクセスします。ホスト名、DB名、ユーザー、パスワードを指定して、mysqliの新しいオブジェクトを作りDBに接続します。接続エラーがでたら、エラーメッセージを画面に表示します。

1-2.  次にsession_startでこのPHPのセッションを始めます。これは質問の正解を数えるスコアを計算することと、全部で幾つ質問があるかをグローバルとしてホールドするためです。

1-3. SQL Queryを作ってそれを実行します。questionテーブルの数を$_SESSIONに入れてホールドします。エラーの際はラインNoを表示させるようにします。

2.question.php

2-1.まずQuesiton idを見つけます。

http://localhost:81/capmquiz/question.php?n=1の”n”の値を判断します。そしてそのQuesiton idから質問データをもってきます。そして取り出したデータをAssociate Array($question)に入れます。

2-2.同様に同じQuesiton idでChoicesのテーブルから選択肢のデータを引き出します。そして取り出したデータはul tag内でWhileループであqるだけ表示させます。

echo $row[‘choice’] ValueはChoice_idをアサインして後でProcess.phpで正解かどうかの検証に使います。

2-3.Hidden インプットとして$number(question_id)もProcess.phpに渡します。

2-4.最初の問題になった時($number=1)に$_SESSIONのScoreをInitializeしておきます。

3.process.php

3-1.前のquestion.phpから”post”という方法でデータを受け取ります。$_Postはグローバル Variableです。’number’がquesiton_idで’choice’が選択したchoice_idです。次の質問に移るために1を足しています。$next=$number+1

3-2. choice テーブルから正解のchoiceを見つけます。そのqueryの結果を$rowにいれます。そしてそこから正しいchoice_id とquestion.phpで選んだchoice_idがマッチするかどうかIfで聞いています。正しければ$_SESSION[‘score’]に1を足しています。

3-3.そして質問が最後かどうか判断し if($number == $_SESSION[‘total’])もし最後だったら、final.phpにいき、そうでなければ次の問題に進みます。

header(“Location: question.php?n=”.$next)

4.final.php

ここでは最終スコア$_SESSION[‘score’]を表示し、Take againのリンクでquestion.phpの最初の問題に戻ります。

まとめると、

本来ならObject-orientedの方法でやるべきですが、とりあえずシンプルなクイズを作りたかったのでこれにしてみました。DBのテーブルを質問と選択肢に分けたことで選択肢は3でも4つでも好きなように作成できるようになっています。

後は、正解を一つづつ表示したりとか、データを入力する画面も作る予定です。