ラジオボタンと入力フォーム混合のWebテスト(クイズ形式) - PHPプロ!Q&A掲示板

4857

  • 0P

ラジオボタンと入力フォーム混合のWebテスト(クイズ形式)

質問日時 / 2017年9月4日 01:44 (最終編集:9月4日 02:07)    回答数 / 4件

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

キーワード / ラジオボタン    Webテスト    クイズ問題   

PHP初心者です。

ラジオボタンと入力フォーム混合のWebテストを作成したいと思い奮闘中です。

question.phpに質問を掲載
answer.phpに回答を掲載
2つのPHPファイルで展開中です。(下記ソースご用意しております)


質問内容や選択肢、答えはすべてDBに格納しており
PDO接続、foreachで14問の質問項目を掲出しています。

答えのカラムを用意して、ラジオボタンで選択した場合は
回答と答えが合致していれば、if文で「正解」それ以外は「不正解」とし
得点を掲載するところまでたどりつきました。。

質問事項の中にはラジオボタンの他、数問入力フォームの質問があり
どのようにしたらラジオボタンと混合で掲出できるかが分からず困って
おります。

お力添えの程、どうぞよろしくお願いいたします。

----------------
■制作環境
----------------
Eclipse Version: Neon.3 (4.6.3)
xampp phpMyadmin


----------------
■DB構造
----------------
CREATE TABLE `contents` (
  `contents_id` int(11) NOT NULL,
  `mondai` text NOT NULL,
  `answer1` text NOT NULL,
  `answer2` text NOT NULL,
  `answer3` text NOT NULL,
  `answer4` text NOT NULL,
  `kotae` text NOT NULL,
  `score` int(11) NOT NULL,
  `kaisetsu` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



  1. question.php
  2. <?php require 'header.php'?>
  3. <?php
  4.    $pdo=new PDO('mysql:host=localhost;dbname=test;charset=utf8',
  5.        'root''root');
  6.    foreach ($pdo->query('select * from contents') as $row) {
  7.  
  8.      $a1=$row['answer1'];
  9.      $a2=$row['answer2'];
  10.      $a3=$row['answer3'];
  11.      $a4=$row['answer4'];
  12.      $id=$row['contents_id'];
  13.      $mondai=$row['mondai'];
  14.      $score=$row['score'];
  15.  
  16.        echo '<form action="answer.php" method="post">';
  17.        echo '<p class="id">',$id,'</p>';
  18.        echo '<p>'$mondai'</p>';
  19.        echo '<p >''(',$score,'点)','</p>';
  20.  
  21.        echo '<p>''<input type="radio" name="'.$id.'" value="'.$a1.'">',$a1,'</p>';
  22.        echo '<p>''<input type="radio" name="'.$id.'" value="'.$a2.'">',$a2,'</p>';
  23.        echo '<p>''<input type="radio" name="'.$id.'" value="'.$a3.'">',$a3,'</p>';
  24.        echo '<p>''<input type="radio" name="'.$id.'" value="'.$a4.'">',$a4,'</p>';
  25.   echo '<hr>';
  26.     }
  27.     echo '<input type="submit" value="採点">';
  28.     echo  '</form>';
  29.   ?>
  30. <?php require 'footer.php'?>

  1. answer.php
  2. <?php
  3. error_reporting(E_ALL & ~E_NOTICE);
  4. ?>
  5. <?php require 'header.php'?>
  6. <?php
  7. echo '<div id="wrap">';
  8. $pdo=new PDO('mysql:host=localhost;dbname=test;charset=utf8',
  9.   'root''root');
  10. global $total;
  11.  $total=0;
  12. echo '<div id="main">';
  13.  
  14. foreach ($pdo->query('select * from contents') as $row) {
  15.     $a1=$row['answer1'];
  16.     $a2=$row['answer2'];
  17.     $a3=$row['answer3'];
  18.     $a4=$row['answer4'];
  19.     $kotae=$row['kotae'];
  20.     $id=$row['contents_id'];
  21.     $mondai=$row['mondai'];
  22.     $score=$row['score'];
  23.     $kaisetsu=$row['kaisetsu'];
  24.  
  25.   echo '<p class="id">'$id,'</p>';
  26.   echo '<p>'$mondai'</p>';
  27.   echo '<p >''(',$score,'点)','</p>';
  28.   echo '<p>'$a1,'</p>';
  29.   echo '<p>'$a2,'</p>';
  30.   echo '<p>'$a3,'</p>';
  31.   echo '<p>'$a4,'</p>';
  32.   echo '<hr>';
  33.  
  34.   if ($_REQUEST[$id]==$kotae){
  35.       echo '<p class="true">','正解','</p>','<br>';
  36.  
  37.                $total+= $score;
  38.   } else {
  39.       echo '<p class="false">','不正解','</p>','<br>';
  40.   }
  41.   echo '<table class="box">';
  42.   echo '<tr >';
  43.   echo '<th class="first">';
  44.   echo '<p>''あなたが選んだ答え''</p>';
  45.   echo '</th>';
  46.   echo '<td class="second">';
  47.   echo ($_REQUEST[$id]);
  48.   echo '<td>';
  49.   echo '</tr>';
  50.   echo '<tr>';
  51.   echo '<th class="first">';
  52.   echo '<p>',  '正しい答え''</p>';
  53.   echo '</th>';
  54.   echo '<td class="second">';
  55.   echo  ($kotae);
  56.   echo '</td>';
  57.   echo '</tr>';
  58.   echo '</table>';
  59.   echo '<p class="indent">''<<解説>>' ,'</p>';
  60.   echo '<p class="indent">'$kaisetsu.'</p>';
  61.  
  62. }
  63. echo '</div>';
  64. echo '<div id="score">';
  65. echo '<p>''あなたの得点''</p>';
  66. echo '<p class="tokuten">' . $total . '''</p>';
  67. echo '</div>';
  68. echo '</div>';
  69. ?>
  70.  
  71.   <script src="dist/js/jquery-3.1.0.min.js"></script>
  72.   <script src="dist/js/lightbox-plus-jquery.min.js"></script>
  73. <?php require 'footer.php'?>

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimix>質問事項の中にはラジオボタンの他、数問入力フォー
 ┗A01-1yamabookshimixさん ご連絡ありがとうございます。 現
  ┗A01-1-1shimix>foreachで回して、7番目と9番目の質問になったら >
   ┗A01-1-1-1yamabookshimixさん ご連絡ありがとうございます。 今

回答一覧

並び替え:

A01
answerershimix [9月4日 08:27]

>質問事項の中にはラジオボタンの他、数問入力フォームの質問があり

その違いはテーブル内のどのカラムで判断できますか?

この意見に回答する

ツリーへ TOPへ

A01-1
replyeryamabook [9月4日 09:06]

shimixさん


ご連絡ありがとうございます。

現在のところ、入力フォーム部分のカラムは
用意していない状況です。

質問は全部で14問で
7番目と9番目が入力フォームでの回答となりますが
現在はラジオボタンで用意しております。

7番目⇒テキストでの回答1つ
9番目⇒テキストでの回答2つ

他はすべてラジオボタンの質問となっておりまして
foreachで回して、7番目と9番目の質問になったら
入力フォームのカラムを読み込ませるということができればと
考えてはおりますが、やり方が分からず悩んでおります。

引き続きまして、よろしくお願いいたします

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyershimix [9月4日 11:28] (最終編集:9月4日 12:24)

>foreachで回して、7番目と9番目の質問になったら
>入力フォームのカラムを読み込ませるということができればと
>考えてはおりますが、

なぜそんな中途半端な仕様になっているんですかね。質問を変更するたびにプログラムも書き替えるんでしょうか?完全に「流用不可」なプログラムになってしまいます。

#それならプログラム内に質問を保持するほうがよほど楽です。
#というか動的に生成する意味すらなくなります(汗

input要素でどのtypeを使うかをレコードに保持すべきです。それに従ってradioにするかtextにするか切り分けてください。


(追記)
どうしてもテーブルの定義を変えたくない・・というのであれば、選択肢がすべて空文字列だったらtext入力と判断するとかですかねぇ(個人的には嫌いな方法だけど)。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyeryamabook [9月4日 16:37]

shimixさん


ご連絡ありがとうございます。

今回は勉強段階なので汎用的な事は考えていなかったため
実用的なご相談ではなく申し訳ありませんでした。

アドバイスいただきました、
input要素でどのtypeを使うかをレコードに保持した上でradioにするかtextにするかを切り分ける方法で
続けてみます!
また選択肢がすべて空文字列だったらtext入力と判断するという方法にも挑戦したいと思います。


今、本などを見ながら勉強しておりますが、右も左もわからない状況ですので
このような神対応のアドバイスは心底助かります。

ありがとうございました

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)