0

私は現在、PHP/mySQL を使用してクイズ プログラムに取り組んでいます (実際にどちらかを使用するのは初めてです)。

今までは、mySQL テーブルですべてが正しく機能するように取り組んでいました。そのために、すべての問題を 1 ページのクイズにまとめていました。ただし、今は 1 ページに 1 つの質問だけを配置し、一度に 1 つの回答を送信することで進行できるようにしたいと考えています。

私の質問がクイズで選ばれる方法は、少し混乱するかもしれません. それらにはすべて、参加しているクイズに対応する「quiz_id」列があります。クイズには、実際に出題される質問の数を指定する「長さ」列があります。したがって、対応する「quiz_id」を持つ質問は、実際にクイズに含まれるよりも多くなる可能性があります。含まれる質問をランダムに選択する方法は、「$question = "SELECT * FROM question WHERE quiz = '$id' ORDER BY rand() LIMIT $length";」を使用することです。

現在、ページごとに 1 つの質問を配置するのに苦労しています。これは、問題数が $length の制限に達していない限り、進行するたびに次のランダムな問題を選択する必要があるためです。また、いくつ ($length) のうち、何番目の質問を行っているかを追跡するカウンターを増やす必要があります。2 つの別個のアクション スクリプトが必要かどうかはわかりません。1 つはクイズを開始するためのもので、もう 1 つは質問の間を進めるためのものです。

これが私のquiz.phpページです(クイズの開始ページ):

<?php
// initialize the mysql data
$connect = mysql_connect('localhost', 'root', '');
$select_db = mysql_select_db('mysql');

// define the id and length from url
$id = mysql_real_escape_string($_GET['id']);
$length = mysql_real_escape_string($_GET['length']);

// query quiz table for all columns
$query_quiz = "SELECT * FROM quizzes WHERE id = '$id' LIMIT 1";

// if quiz query fails
if(!$query_quiz_result = mysql_query($query_quiz)) 
    { 
        die("Couldn't run quiz query"); 
    } 

// fetch whole array of quiz info
$quiz = mysql_fetch_array($query_quiz_result);



//query question table for all columns
$question = "SELECT * FROM questions WHERE quiz = '$id' ORDER BY  rand() LIMIT $length";
$q_result = mysql_query($question) or die ("couldn't run questions query");


// store queried questions as an array to pass via session variables
$q_array = array();
while($row = mysql_fetch_assoc($q_result))
{
    $q_array[] = $row;
}


session_start();
$_SESSION['quiz'] = $id;
$_SESSION['questions'] = $q_array;
$_SESSION['length'] = $length;
?>

<html>
  <head>
    <title>Quiz <?php echo mysql_real_escape_string($_GET['id']);?></title>
    <link href="css/bootstrap.min.css" rel="stylesheet">
  </head>
  <body>
    <div id="container" style="margin-left: 30px;">


<!-- create the header using the quiz id and name -->
<h1 style="text-align: center;">Quiz <?php echo $quiz['id'] ?>: <?php echo $quiz['name'] ?></h1>

<hr />

<h4>This quiz will have a total of <?php echo $length?> questions.</h4>

<button onClick="parent.location='start.php'">Begin Quiz</button>

    </div>
    <script src="js/bootstrap.min.js"></script>
  </body>
</html>

そして、これが私の start.php ページです.. この 1 つのページをすべての質問に使用できるかどうかわかりませんか、それとも、クイズが開始されて 1 位を超えて進んでいるときに、別のアクション ページが必要ですか?

<?php
// continue the session
session_start();

// initialize the mysql data
$connect = mysql_connect('localhost', 'root', '');
$select_db = mysql_select_db('mysql');


$quiz_id = $_SESSION['quiz'];
$length = $_SESSION['length'];
$_SESSION['questions_array'] = $_SESSION['questions'];
$current_question = array_shift($_SESSION['questions_array']);
$_SESSION['counter'] = 1;

$counter = $_SESSION['counter'];
?>

<html>
  <head>
    <title>Quiz <?php echo mysql_real_escape_string($_GET['id']);?></title>
    <link href="css/bootstrap.min.css" rel="stylesheet">
  </head>
  <body>
    <div id="container" style="margin-left: 30px;">

<h3>Question <?php echo $counter ?> of <?php echo $length ?></h3>

<hr />

<h4><?php echo $current_question['prompt']?></h4>

<?php
// define query for answers for each question
    $answers = 'SELECT `prompt` FROM `answers` WHERE `quiz` = '.$quiz_id.' AND `question` = '.$current_question['id'].'';

    //if failed
    if(!$answers_result = mysql_query($answers)){
        die("Couldn't run answers query");
    }
    ?>

        <p style="margin-left: 50px;">
        <?php

    // if question type is "multiple choice", loop through answer choices and print them as options
    if ($current_question['if_short_answer'] == 0) {
        // loop through rows of answer choices
        while($a_row = mysql_fetch_array($answers_result))
        {
            // print each answer choice
            ?>
            <input type='radio' name='question_<?php echo $current_question['id']; ?>' value='<?php echo $a_row['prompt']?>'><?php echo $a_row['prompt']?>
            <br />

        <?php
        }
        echo "</p>";
    }

    // if question type is "short answer", create text box
    elseif ($current_question['if_short_answer'] == 1) {
        ?>
        <input type="text" name="question_<?php echo $current_question['id']; ?>" /><br />
    </p>

    <?php
    } ?>


<?php
if ($counter >= 1) { ?>
<button onClick="parent.location='next.php'">Next Question</button>
<?php
}

else { ?>
    <button onClick="parent.location='start.php'">Begin Quiz</button>
<?php
}
?>

    </div>
    <script src="js/bootstrap.min.js"></script>
  </body>
</html>

これが非常に漠然とした、または長い質問である場合は、お詫び申し上げます。基本的に私は尋ねています: $length の制限に達するまでランダムな質問を進めて、最後に「クイズを送信」ボタンを押すとスコアページにつながる、ページごとに 1 つの質問だけを配置するにはどうすればよいですか? 途中で、「次の質問」ボタンは、現在の質問に対するユーザーの入力を保存する必要があります。

基本的に、ある質問から次の質問に進むには、スクリプトを作成する際のガイダンスが必要です。

ありがとう!

4

2 に答える 2

2

データベースからすべての質問を取得する必要があり、jquery show()/hide() メソッドを使用して、一度に 1 つの質問のみを表示します。

ここで、要件に合わせてサンプル スクリプトを作成しました。

http://www.smarttutorials.net/responsive-quiz-application-using-php-mysql-jquery-ajax-and-twitter-bootstrap/

于 2013-09-28T03:18:55.273 に答える
0

最初に、各ページに $q_array を再作成しているため、最後に表示された質問のみが含まれ、機能しません

試す

if(isset($_SESSION['questions']))
{
   $_SESSION['questions']+= ", $question_id";       
}

選択クエリでは、配列に既に表示されている質問を省略する必要があります。

于 2012-08-27T04:39:28.873 に答える