问题是我想通过$ _SERVER ['PHP_SELF']在同一页面上发送数据,而且我不知道何时及时做这些事情。(因为在测验的“第一”页面我有没有什么可以接收,然后在“下一页”我收到S_POST ['radio_names'],就在第二页后,我可以得到隐藏的输入)。我希望我能让自己理解(即使我理解我的问题也很困难:D)
答案 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
}
这是我所知道的最直接的方式,就是保持同一页并接受数据。