PHP测验将数据发送到下一页

时间:2009-11-02 00:13:04

标签: php post webforms

好吧,我正在尝试做一个测验...现在好了。但是当我试图通过页面发送收集的数据(单选按钮值)时,我无法获得逻辑流程。我有主要想法,但我可以把它付诸实践。

  1. 我想收集所有无线电值
  2. 创建一个包含此值的数组
  3. 序列化数组
  4. 将序列化数组放入隐藏输入
  5. 问题是我想通过$ _SERVER ['PHP_SELF']在同一页面上发送数据,而且我不知道何时及时做这些事情。(因为在测验的“第一”页面我有没有什么可以接收,然后在“下一页”我收到S_POST ['radio_names'],就在第二页后,我可以得到隐藏的输入)。我希望我能让自己理解(即使我理解我的问题也很困难:D)

4 个答案:

答案 0 :(得分:3)

您可以尝试使用$_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 :(得分:1)

作为另一种方法,您可以为每个“页面”添加一个字段并跟踪您的位置。然后,在页面顶部的处理程序中,您将知道哪些输入有效:

<?
  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脚本中,并使数据可用于同一脚本中的其他函数。

答案 2 :(得分:1)

将表单字段命名为:

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

答案 3 :(得分:0)

您想要使用诸如

之类的流程
if (isset $_POST){
    //do the data processing and such 
    }
else {
/show entry form
}

这是我所知道的最直接的方式,就是保持同一页并接受数据。

相关问题