Один элемент викторины на страницу (программа викторины php / mysql)
В настоящее время я работаю над программой для викторин, использующей PHP / mySQL (мой первый раз, когда я на самом деле ее использовал).
До сих пор я просто работал над тем, чтобы все это работало правильно с таблицами mySQL, и для этого я помещал все вопросы в викторину на одной странице. Тем не менее, теперь я хочу иметь возможность задать только один вопрос на страницу, а затем продолжить, отправляя по одному ответу за раз.
То, как мои вопросы выбраны для участия в викторине, может быть немного запутанным. Все они имеют & quot; quiz_id & quot; столбец, который соответствует тесту, в котором они находятся. Тест имеет «длину»; столбец, который указывает, сколько вопросов будет на самом деле. Таким образом, может быть больше вопросов с соответствующим & quot; quiz_id & quot; чем на самом деле будет в викторине. Я случайным образом выбираю, какие вопросы будут включены, с помощью команды «$ question =» SELECT * FROM questions WHERE quiz = & quot; $ id & apos; ORDER BY rand () LIMIT $ length & quot ;;
Теперь у меня много проблем с размещением только одного вопроса на страницу. Это происходит потому, что каждый раз, когда вы прогрессируете, нужно выбирать следующий случайный вопрос, если мы не достигли предела количества вопросов в $ длины. Также необходимо увеличить счетчик, который отслеживает, по какому количеству вопросов вы находитесь, из скольких (длина $). Я не уверен, что мне нужно иметь два отдельных сценария действий ... один для начала теста, а другой для перехода между вопросами.
Вот моя страница 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>
Я прошу прощения, если это очень расплывчатый или длинный вопрос ... Я только что потерял себя сейчас и не знаю, как поступить. По сути, я спрашиваю: как я могу задать только один вопрос на страницу, проходя через случайные вопросы, пока не будет достигнут предел длины $, а затем «отправить опрос»; Кнопка в конце приводит к странице оценки? На всем пути «следующий вопрос» Кнопка должна хранить ввод пользователя для текущего вопроса.
Мне в основном нужно руководство при написании сценария, чтобы перейти от одного вопроса к другому.
Спасибо!