PHP тест отправляет данные на следующую страницу - PullRequest
0 голосов
/ 02 ноября 2009

хорошо, я пытаюсь сделать тест ... все хорошо сейчас. но когда я пытаюсь отправить собранные данные (значения радиокнопок) через страницы, я не могу получить логический поток. У меня есть основная идея, но я не могу воплотить ее в жизнь.

  1. я хочу собрать все значения радио
  2. создать массив, содержащий эти значения
  3. сериализует массив
  4. поместить сериализованный массив в скрытый вход

проблема в том, что я хочу отправить данные на той же странице через $ _SERVER ['PHP_SELF'], и я не знаю, когда вовремя, чтобы сделать эти вещи. ничего не получить, тогда на «следующей» странице я получаю S_POST ['radio_names'] и сразу после второй страницы я могу получить этот скрытый ввод). Я надеюсь, что я понял себя (даже мне трудно понять, в чем заключается мой вопрос: D)

Ответы [ 4 ]

3 голосов
/ 02 ноября 2009

Вместо этого вы можете попробовать использовать объект $_SESSION ... Для каждой страницы вашего теста сохраните результаты в массиве $_SESSION. На странице сводки используйте это, чтобы показать свои результаты.

Для этого в начале каждой страницы вы можете поместить что-то вроде:

<?
    session_start();
    foreach ($_POST as $name => $resp) {
      $_SESSION['responses'][name] = $resp;
    }
?>

Затем на последней странице вы можете просмотреть все результаты:

<?
    session_start();
    foreach ($_SESSION['responses'] as $name => $resp) {
      // validate response ($resp) for input ($name)
    }
?>
1 голос
/ 02 ноября 2009

Назовите поля формы следующим образом:

<input type="radio" name="quiz[page1][question1]" value="something"/>
...
<input type="hidden" name="quizdata" value="<?PHP serialize($quizdata); ?>"/>

Тогда, когда вы обрабатываете:

<?PHP
//if hidden field was passed, grab it.
if (! empty($_POST['quizdata'])){
    $quizdata = unserialize($_POST['quizdata']);
}

// if $quizdata isn't an array, initialize it.
if (! is_array($quizdata)){
    $quizdata = array();
}

// if there's new question data in post, merge it into quizdata
if (! empty($_POST)){
    $quizdata = array_merge($quizdata,$_POST['quiz']);
}

//then output your html fields (as seen above)
1 голос
/ 02 ноября 2009

В качестве другого подхода вы можете добавить поле к каждой «странице» и отслеживать, где вы находитесь. Затем в обработчике вверху страницы вы будете знать, какой ввод действителен:

<?
  if (isset($_POST['page'])) {
    $last_page = $_POST['page'];
    $current_page = $last_page + 1;
    process_page_data($last_page);
  } else {
    $current_page = 1;
  }
?>

... позже на странице ...

<? display_page_data($current_page); ?>
<input type="hidden" name="page" value="<?= $current_page ?>" />

В этом примере process_page_data($page) будет обрабатывать чтение всех входных данных, необходимых для данного номера страницы, а display_page_data($page) покажет пользователю правильные вопросы для данного номера страницы.

Вы можете расширить это и создать классы для представления страниц, но это может дать вам представление о том, с чего начать. Использование этого подхода позволяет вам сохранить всю обработку данных в одном и том же сценарии PHP и сделать данные доступными для других функций в том же сценарии.

0 голосов
/ 02 ноября 2009

Вы хотите использовать поток, такой как

if (isset $_POST){
    //do the data processing and such 
    }
else {
/show entry form
}

Это самый простой способ, который я знаю, чтобы остаться на той же странице и принять данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...