クイズを自作してみる!(PHPの活用!)

夜のテレビ番組のラインナップを見てみると、クイズ番組が多いことに気づかされます。それだけクイズの需要は大きいのでしょう。きっと、サイト運営するうえでもそのような前提は成立するはずです。では、クイズをどのように作成するのでしょうか。簡単な作りかたをまとめました。

京急2100形

写真1. 横浜を通る通勤電車(写真の意味は本文を読むとわかります)

使用する言語:PHP

PHPを使用してクイズを作成できます。PHPはWebサイト構築に重要な言語であり、サーバー上(=webサイト運営側)で操作できる言語です。CSSなどとは異なり、動きをつける言語です。動きといっても動画のように目に見える動きではなく、入力した情報で処理を変えるというものです。

(例)性別を入力すると、男性には「このパソコンがおすすめです」、女性には「この化粧品がおすすめです」というように入力内容によって出力を変えるようなもの

このPHPを使えば、簡単にクイズを作成することができます。もちろん、PHPはコンピュータ言語であり、コンテンツは自らの手で考えなければなりません。問題の作成・回答の選択肢作成・模範解答と解説の作成は自らの知恵の絞りどころです。

PHPでのクイズを作成する実際

基本的には、初心者レベルの技能で作成することができます(プログラミング言語の初心者の私ができているくらいですから)。

今回、初心者向けの書籍を参考にクイズを作成しました(例示した書籍にはクイズはありません)。書籍は数多くありますが、私は確かな力が身につくPHP「超」入門を活用しました。初心者向けでありながら、MySQLというデータベースと連携した仕組みを構築する段階まで達しています。そのような意味で、とっかかりやすく実践的な書籍という感覚です。

松浦 健一郎、司 ゆき(共著) SBクリエイティブ

PHPには直接動作を指定しないものがあります。いわゆるecho文です。また、HTMLにはラジオボックスがもともと組み込まれていて、特殊なプログラミングなしで選択肢を設定することができます。これらの機能を活用します。

御託よりも実際のソースコードをご覧いただいたほうがわかりやすいでしょう。そのソースコードをベースに解説したほうがわかりやすいと思います。

  1. <?php
  2. $value = "";
  3. if (isset($_GET['jikan'])) {
  4. $value = $_GET['jikan'];
  5. }
  6. if ($value == '') {
  7. ?>
  8. 第1問!<br>
  9. 一般に朝ラッシュ時の混雑は、最も混んでいる区間で最も混んでいる60分について、集計されます。<br>
  10. さて、ある路線のある区間で8:00〜9:00が最混雑区間とされる場合、実際の混雑状況はどうでしょうか。<br>
  11. <br>
  12. <form>
  13. <input type="radio" name="jikan" value='1'>8:00〜9:00はどの時間を選んでも混雑度合いは一定である<br>
  14. <input type="radio" name="jikan" value='2'>8:00〜9:00の間でも混雑度合いは異なる<br>
  15. <br>
  16. <br>
  17.     <input type="submit" value="確定">
  18. </form>
  19. <br>
  20. <?php
  21. }
  22. switch ($_REQUEST['jikan']){
  23. case '1':
  24.     echo '<br><b>不正解</b>です。<br><br>最混雑の60分であっても、微妙に混雑度合いが変わります。<br>
  25.     この詳細については次の問題に出題いたします。<br><br>
  26.     <a href="https://tetsudoulab.com/konzatsu-quiz2/">次の問題に進む!</a>';
  27.     break;
  28. case '2':
  29.     echo '<br><b>正解</b>です!<br><br>最混雑の60分であっても、微妙に混雑度合いが変わります。<br>
  30.     この詳細については次の問題に出題いたします。<br><br>
  31.     <a href="https://tetsudoulab.com/konzatsu-quiz2/">次の問題に進む!</a>';
  32.     break;
  33. }
  34. ?>

全部の問題を先に示したくないけどどうしたら良いの?

クイズを作成するうえで、前の問題を踏まえて次の問題を作成するということがあると思います。私の例でいうと、ラッシュ時の混雑は一般にいう60分間で違いがあることを踏まえて、さらに詳細な内容を問うというものです。このような場合、全ての問題が列挙されていると不都合でしょう。いいかえると、1問を回答したら次の問題が表示されるようにしたいということです。

私の脳みそでは上手な解決方法を思い浮かべることができませんでした。確かに、問題1の選択肢が入力済なら問題2を表示させるという処理は可能でしょう。しかし、そのような(私にとって)高度な技法は難易度が高いです。そこで、私は別の解決法を編み出しました。それは、問題ごとにURLを変えるというものです。そう!URLを変えれば別のURLの内容は反映されないのです。正しそうな道で解決できなさそうであれば、邪道を試してみる、まさに私の性格が見て取れます。

解答を示す際に、問題が表示されてしまう

次にぶち当たる壁が問題とその選択肢が表示されたままに解答が表示されるという現象です。これについてはisset関数を使うことにより解決できます。isset関数は、ある関数(=ある処理を行うパッケージ)が定義されているか否かで処理を分けるというものです。今回はjikanという値が定義されていれば、それに応じた解答を示すこと、定義されていない場合は問題を表示するという処理を行うようにしています。

クイズを作成してみて

近年、クイズ番組が流行しています。これはテレビ的な事情もありましょうが、クイズというコンテンツが人気であることの裏返しともいえます。

体裁を整えるためにはCSSを駆使しないといけませんが、単純なものであればPHPを少しいじるだけで作成可能です。これにより、私は「電車の混雑」について、検索システム・各路線の混雑基本情報・現場調査結果に加えて、混雑の傾向をまとめたクイズという多くの武器を手に入れることができました。サイト運営は文字を並べた記事ばかりではないことを改めて実感したのです。

解答・解説ページの活用方法
解答・解説ページをただ作るだけでは芸がありません。せっかくならば、それを上手に活用しましょう。

私の場合は同じテーマで5問作成しています。世の中、クイズをしたい人ばかりではありません。クイズなしで基本的な知識が得られるのであれば、それが良いという考えの人もいるということです。

そうであれば、クイズの解答をまとめて1つの記事を作成することも上手な情報の示しかたです。このように同じ情報でも見せかたを複数用意することで、多くの人に訴求できるのです(と私は信じています)。

そして、知識をまとめたページとクイズページの相互に内部リンクを設定すると、より使いやすいサイトとなりましょう!

関連する記事

PHPの学習とその使用例(WordPress利用者向け、他サイトと差別化する活用例)

PHPの活用方法についてもう少し詳しく述べています。サイト運営側の人に非常に役立つ内容と自負しています。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする