Один элемент викторины на страницу (программа тестирования php / mysql)

В настоящее время я работаю над программой викторины, используя PHP / mySQL (мой первый раз когда-либо на самом деле использовал).

До сих пор я просто работал над тем, чтобы все это правильно работало с таблицами mySQL, и для этого я поставил все вопросы в викторине на одной странице. Тем не менее, теперь я хочу уметь задавать только один вопрос на странице, а затем прорабатывать, отправляя один ответ за раз.

То, как мои вопросы выбраны в викторине, может быть немного запутанным. У всех них есть столбец «quiz_id», который соответствует викторине, в которой они находятся. В викторине есть столбец «длина», который определяет, сколько вопросов у него будет на самом деле. Таким образом, может быть больше вопросов с соответствующим «quiz_id», чем на самом деле в викторине. Способ, которым я произвольно выбираю, какие вопросы будут включены, – это «$ question =» SELECT * FROM questions WHERE quiz = '$ id' ORDER BY rand () LIMIT $ length ";".

Теперь у меня много проблем, ставя только один вопрос на страницу. Это связано с тем, что каждый раз, когда вы прогрессируете, необходимо выбрать следующий случайный вопрос, если мы не достигли предела количества вопросов длины. Счетчик также должен увеличиваться, чтобы отслеживать, на какой номер вопроса вы находитесь, из числа ($ length). Я не уверен, что мне нужно иметь два отдельных сценария действий: один для начала викторины, а затем один для продвижения между вопросами.

Вот моя страница 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?

 <?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> 

Прошу прощения, если это очень расплывчатый или длинный вопрос. Я только что потерял себя и не знаю, как действовать дальше. В основном я спрашиваю: как я могу поставить только один вопрос на страницу, прогрессируя через случайные вопросы, пока не будет достигнут предел длины $, а затем кнопка «отправить викторину» в конце приводит к странице с оценками? На всем протяжении кнопки «следующий вопрос» необходимо сохранить вход пользователя для текущего вопроса.

Мне в основном нужно руководство в написании моего сценария для перехода от одного вопроса к другому.

Благодаря!

Во-первых, вы создаете $ q_array на каждой странице, поэтому он будет содержать только последний отображаемый вопрос, который не будет работать

пытаться

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

В запросе выбора вы должны опустить вопросы с уже отображенным в массиве.

Все, что вам нужно, чтобы получить все вопросы из базы данных, и с помощью метода jquery show () / hide () показывать только по одному вопросу одновременно.

Я написал образец сценария для вашего требования здесь.

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