Как отображать только одну информацию за один раз в онлайн-викторине

Я ранее делал текстовый файл и превращал его в многомерный массив, чтобы отображать в качестве вопросов для моей викторины.

Примечание. Я не могу вставлять изображения, поэтому я не могу представить какой-либо пример, поэтому я постараюсь быть настолько описательным, насколько могу.

Я пытаюсь отображать только один вопрос за раз, каждый раз, когда пользователь нажимает на мою викторину.

Это мой код до сих пор. Страница main.php :

<h2>ONLINE QUIZ</h2> <ul> <li><a href='question.php'>Take quiz</a></li> <li><a href='module.php'>Admin Module</a></li> </ul> <?php $file = fopen('data.txt', 'r'); $array = array(); while ($line = fgetcsv($file)) { $array[] = $line; } fclose($file); session_start(); $_SESSION["questions_array"]=$array; ?> 

И страница question.php :

 <?php session_start(); $array=$_SESSION["questions_array"]; foreach ($array as $q => $data) { echo '<p>'.array_shift($data).'</p>'; foreach ($data as $a => $answer) { echo ' <input type="radio" name="question-'.$q.'" id="question-'.$q.'"'. ' value="'.$a.'"/>'. ' <label for="question-'.$q.'">'.$answer.'</label>'. '<br>'; } } ?> 

Когда щелкнули ссылку Take quiz , пользователь переходит на страницу вопросов, на которой отображается только один вопрос. Затем пользователь выбирает ответ и submit . Эта кнопка отправки приведет пользователя к странице результатов, где они могут затем continue .

Ссылка « Continue перенаправит их обратно на страницу вопросов, на которой будет отображаться следующий вопрос.

Из того, что я делал раньше, я пытаюсь использовать функцию isset() чтобы это произошло. Однако проблема в том, что я не уверен, как именно написать мой isset() .

Я нашел этот фрагмент с этого сайта, я не уверен, что он полезен, но:

 if (!isset($_SESSION['FirstVisit'])) { //show site for the first time part $_SESSION['FirstVisit] = 1; header("Location: http://example.com/index.php"); // Don't forget to add http colon slash slash www dot before! } else { Show normal site } 

Но снова я оказался пустым. Как именно использовать isset() для отображения только одного вопроса?

Related of "Как отображать только одну информацию за один раз в онлайн-викторине"

Я как-то понимаю, что ты просил, я записал основную структуру. Это можно сделать на одной странице, надеюсь, что это поможет.

РЕДАКТИРОВАТЬ:

Как им такой приятный парень имеет полный сценарий, используя мое предлогическое предложение; p

 <?php session_start(); echo '<h2>ONLINE QUIZ</h2>'; //Scores if($_SERVER['REQUEST_METHOD']=='GET' && isset($_GET['scores'])){ echo 'Basic output for scores'; echo '<pre>'; print_r($_SESSION['answers']); echo '</pre>'; unset($_SESSION['answers']); unset($_SESSION['question']); } //Session question/array is set if(isset($_SESSION['question']) && isset($_SESSION['questions_array'])){ //Handle prev question post if($_SERVER['REQUEST_METHOD']=='POST'){ //process prev question $_SESSION['answers'][$_SESSION['question']-1]=(0+$_POST['answer']); } if($_SESSION['question'] < $_SESSION['total_question']){ $q=$_SESSION['question']; //EDIT - Shuffle answers for output //Hold the question into a var $question = $_SESSION['questions_array'][$q][0]; //unset the question from the array unset($_SESSION['questions_array'][$q][0]); //put all the pos answers into a new array $answers = $_SESSION['questions_array'][$q]; //shuffle the answers shuffle($answers); echo '<form method="POST" action=""> <h3>'.$question.'</h3>'; //loop through the answers foreach($answers as $key=>$value){ //if the value is nothing cont to next, removed question key 0 if($value==''){continue;}else{ echo '<p><input type="radio" value="'.$value.'" name="answer">'.$value.'</p>'; } } echo '<p><input type="submit" value="Submit"></p> </form>'; }else{ //Quiz Complete echo 'Test Complete <a href="'.basename($_SERVER["SCRIPT_FILENAME"]).'?scores=1">Check scores</a>'; } //Assign next question to session $_SESSION['question']++; }else{ //Pages first load so show quiz index $_SESSION['question']=0; get_questions(); ?> <ul> <li><a href='<?=basename($_SERVER["SCRIPT_FILENAME"]);?>'>Take quiz</a></li> <li><a href='module.php'>Admin Module</a></li> </ul> <?php } //Function to put questions in session function get_questions(){ $file = fopen('data.txt', 'r'); $array = array(); while ($line = fgetcsv($file,1000,',')) { $array[] = $line; } fclose($file); $_SESSION['questions_array']=$array; $_SESSION['total_question']=count($array); return; } ?> с <?php session_start(); echo '<h2>ONLINE QUIZ</h2>'; //Scores if($_SERVER['REQUEST_METHOD']=='GET' && isset($_GET['scores'])){ echo 'Basic output for scores'; echo '<pre>'; print_r($_SESSION['answers']); echo '</pre>'; unset($_SESSION['answers']); unset($_SESSION['question']); } //Session question/array is set if(isset($_SESSION['question']) && isset($_SESSION['questions_array'])){ //Handle prev question post if($_SERVER['REQUEST_METHOD']=='POST'){ //process prev question $_SESSION['answers'][$_SESSION['question']-1]=(0+$_POST['answer']); } if($_SESSION['question'] < $_SESSION['total_question']){ $q=$_SESSION['question']; //EDIT - Shuffle answers for output //Hold the question into a var $question = $_SESSION['questions_array'][$q][0]; //unset the question from the array unset($_SESSION['questions_array'][$q][0]); //put all the pos answers into a new array $answers = $_SESSION['questions_array'][$q]; //shuffle the answers shuffle($answers); echo '<form method="POST" action=""> <h3>'.$question.'</h3>'; //loop through the answers foreach($answers as $key=>$value){ //if the value is nothing cont to next, removed question key 0 if($value==''){continue;}else{ echo '<p><input type="radio" value="'.$value.'" name="answer">'.$value.'</p>'; } } echo '<p><input type="submit" value="Submit"></p> </form>'; }else{ //Quiz Complete echo 'Test Complete <a href="'.basename($_SERVER["SCRIPT_FILENAME"]).'?scores=1">Check scores</a>'; } //Assign next question to session $_SESSION['question']++; }else{ //Pages first load so show quiz index $_SESSION['question']=0; get_questions(); ?> <ul> <li><a href='<?=basename($_SERVER["SCRIPT_FILENAME"]);?>'>Take quiz</a></li> <li><a href='module.php'>Admin Module</a></li> </ul> <?php } //Function to put questions in session function get_questions(){ $file = fopen('data.txt', 'r'); $array = array(); while ($line = fgetcsv($file,1000,',')) { $array[] = $line; } fclose($file); $_SESSION['questions_array']=$array; $_SESSION['total_question']=count($array); return; } ?> с <?php session_start(); echo '<h2>ONLINE QUIZ</h2>'; //Scores if($_SERVER['REQUEST_METHOD']=='GET' && isset($_GET['scores'])){ echo 'Basic output for scores'; echo '<pre>'; print_r($_SESSION['answers']); echo '</pre>'; unset($_SESSION['answers']); unset($_SESSION['question']); } //Session question/array is set if(isset($_SESSION['question']) && isset($_SESSION['questions_array'])){ //Handle prev question post if($_SERVER['REQUEST_METHOD']=='POST'){ //process prev question $_SESSION['answers'][$_SESSION['question']-1]=(0+$_POST['answer']); } if($_SESSION['question'] < $_SESSION['total_question']){ $q=$_SESSION['question']; //EDIT - Shuffle answers for output //Hold the question into a var $question = $_SESSION['questions_array'][$q][0]; //unset the question from the array unset($_SESSION['questions_array'][$q][0]); //put all the pos answers into a new array $answers = $_SESSION['questions_array'][$q]; //shuffle the answers shuffle($answers); echo '<form method="POST" action=""> <h3>'.$question.'</h3>'; //loop through the answers foreach($answers as $key=>$value){ //if the value is nothing cont to next, removed question key 0 if($value==''){continue;}else{ echo '<p><input type="radio" value="'.$value.'" name="answer">'.$value.'</p>'; } } echo '<p><input type="submit" value="Submit"></p> </form>'; }else{ //Quiz Complete echo 'Test Complete <a href="'.basename($_SERVER["SCRIPT_FILENAME"]).'?scores=1">Check scores</a>'; } //Assign next question to session $_SESSION['question']++; }else{ //Pages first load so show quiz index $_SESSION['question']=0; get_questions(); ?> <ul> <li><a href='<?=basename($_SERVER["SCRIPT_FILENAME"]);?>'>Take quiz</a></li> <li><a href='module.php'>Admin Module</a></li> </ul> <?php } //Function to put questions in session function get_questions(){ $file = fopen('data.txt', 'r'); $array = array(); while ($line = fgetcsv($file,1000,',')) { $array[] = $line; } fclose($file); $_SESSION['questions_array']=$array; $_SESSION['total_question']=count($array); return; } ?> с <?php session_start(); echo '<h2>ONLINE QUIZ</h2>'; //Scores if($_SERVER['REQUEST_METHOD']=='GET' && isset($_GET['scores'])){ echo 'Basic output for scores'; echo '<pre>'; print_r($_SESSION['answers']); echo '</pre>'; unset($_SESSION['answers']); unset($_SESSION['question']); } //Session question/array is set if(isset($_SESSION['question']) && isset($_SESSION['questions_array'])){ //Handle prev question post if($_SERVER['REQUEST_METHOD']=='POST'){ //process prev question $_SESSION['answers'][$_SESSION['question']-1]=(0+$_POST['answer']); } if($_SESSION['question'] < $_SESSION['total_question']){ $q=$_SESSION['question']; //EDIT - Shuffle answers for output //Hold the question into a var $question = $_SESSION['questions_array'][$q][0]; //unset the question from the array unset($_SESSION['questions_array'][$q][0]); //put all the pos answers into a new array $answers = $_SESSION['questions_array'][$q]; //shuffle the answers shuffle($answers); echo '<form method="POST" action=""> <h3>'.$question.'</h3>'; //loop through the answers foreach($answers as $key=>$value){ //if the value is nothing cont to next, removed question key 0 if($value==''){continue;}else{ echo '<p><input type="radio" value="'.$value.'" name="answer">'.$value.'</p>'; } } echo '<p><input type="submit" value="Submit"></p> </form>'; }else{ //Quiz Complete echo 'Test Complete <a href="'.basename($_SERVER["SCRIPT_FILENAME"]).'?scores=1">Check scores</a>'; } //Assign next question to session $_SESSION['question']++; }else{ //Pages first load so show quiz index $_SESSION['question']=0; get_questions(); ?> <ul> <li><a href='<?=basename($_SERVER["SCRIPT_FILENAME"]);?>'>Take quiz</a></li> <li><a href='module.php'>Admin Module</a></li> </ul> <?php } //Function to put questions in session function get_questions(){ $file = fopen('data.txt', 'r'); $array = array(); while ($line = fgetcsv($file,1000,',')) { $array[] = $line; } fclose($file); $_SESSION['questions_array']=$array; $_SESSION['total_question']=count($array); return; } ?> 

Хорошо, поэтому решение вашей проблемы сделать другой массив сдвигается на массив outter. Этим вы можете снять один вопрос и распечатать его. Викторина сохраняется в сеансе, поэтому в следующий раз, когда страница загружается (т.е. нажата кнопка «Продолжить»), она снимает следующий вопрос.

Страница вопросов:

 <?php session_start(); if(sizeof($_SESSION['questions_array']) > 0 ) { // Get the next question off of the Quiz in our SESSION $data = array_shift($_SESSION["questions_array"]); echo '<p>'.array_shift($data).'</p>'; // pop the question //list out the possible answers foreach ($data as $a => $answer) { echo ' <input type="radio" name="question-'.$q.'" id="question-'.$q.'"'. ' value="'.$a.'"/>'. ' <label for="question-'.$q.'">'.$answer.'</label>'. '<br>'; } } else { //questions array is empty, show quiz complete page } ?> 

Теперь ваша страница вопросов только возвращает один вопрос. При нажатии кнопки переходят на страницу ответов. Когда нажимают кнопку «продолжить», они возвращаются. Затем наша система делает следующее: 1) Остаются ли вопросы в нашем массиве? A) Да A.1) Хорошо выложите следующий вопрос с помощью array_shift ($ _ SESSION ['questions_array']) A.2) Положите вопрос, а затем перечислите ответы. B) Нет B.1) Больше вопросов нет, наша викторина закончилась.

Примечание: Есть некоторые обратные спины. Если человек обновляет страницу, у них возникает новый вопрос, а другой – без ответа. Вы можете альтернативно передавать переменную $ counter, которая обновляется каждый раз, когда загружается страница ответов. Затем передайте этот счетчик массиву $ _SESSION, чтобы вернуть следующий вопрос. Тебе решать.