在 PHP 中对多页表单使用会话跟踪
Posted
技术标签:
【中文标题】在 PHP 中对多页表单使用会话跟踪【英文标题】:Using Session Tracking for Multipage Form in PHP 【发布时间】:2013-07-11 16:29:09 【问题描述】:我正在尝试显示一个多页表单,该表单使用会话跟踪将提交的数据从一个页面保留到下一个页面。 $_POST['stage']
确定应该显示哪个表单。每个表单都有一个隐藏的输入类型,其值设置为将 $stage
变量增加 1,但是当我从第一个表单提交数据时,$stage
的值似乎保持不变,因为我看不到下一个形式。会话在php.ini
中启用。
这是我的例子:
<?php
session_start();
//Determine which integer to assign to the stage
if (($_SERVER['REQUEST_METHOD'] == 'GET') || (!isset($_POST['stage'])))
$stage = 1;
else
$stage = (int) $_POST['stage'];
//Save any submitted data
if ($stage > 1)
foreach ($_POST as $key => $value)
$_SESSION[$key] = $value;
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>My Form Example</title>
</head>
<body>
<?php if ($stage == 1) ?>
<form action='<?php echo $_SERVER['SCRIPT_NAME'] ?>' method='post'>
<label for='firstField'>First field:</label>
<input type='text' name='first_field /><br />
<input type='hidden' name='stage' value='<?php echo $stage + 1 ?>' />
<input type='submit' value='Next' />
</form>
<?php else if ($stage == 2) ?>
<form action='<?php echo $_SERVER['SCRIPT_NAME'] ?>' method='post'>
<label for='secondField'>Second field:</label>
<input type='text' name='second_field /<br />
<input type='hidden' name='stage' value='<?php echo $stage + 1 ?>' />
<input type='hidden' value='Done' />
</form>
<?php ?>
</body>
</html>
【问题讨论】:
【参考方案1】:由于您没有提到问题是什么,这让我仔细筛选并找到确切的答案,我将给出更准确的答案。问题是行中没有结束单引号
<input type='text' name='first_field /><br />
和
<input type='text' name='second_field /<br />
所以我的最终工作脚本是
<?php
session_start();
$stage = 0;
//Determine which integer to assign to the stage
if (!isset($_POST['stage']))
$stage = 1;
else
$stage = (int) $_POST['stage'];
//Save any submitted data
if ($stage > 1)
foreach ($_POST as $key => $value)
$_SESSION[$key] = $value;
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>My Form Example</title>
</head>
<body>
<?php if ($stage == 1) ?>
<form action='<?php echo $_SERVER['SCRIPT_NAME'] ?>' method='post'>
<label for='firstField'>First field:</label>
<input type='text' name='first_field' /><br />
<input type='hidden' name='stage' value='<?php echo $stage + 1 ?>' />
<input type='submit' value='Next' />
</form>
<?php else if ($stage == 2) ?>
<form action='<?php echo $_SERVER['SCRIPT_NAME'] ?>' method='post'>
<label for='secondField'>Second field:</label>
<input type='text' name='second_field' /<br />
<input type='hidden' name='stage' value='<?php echo $stage + 1 ?>' />
<input type='hidden' value='Done' />
</form>
<?php ?>
</body>
</html>
【讨论】:
【参考方案2】:我在我的工作脚本上发现了一个错字。事后看来,我应该复制并粘贴我的整个脚本。对不起。该脚本运行良好(开头带有 session_start() ,但在我发布问题后仍未出现)。
【讨论】:
【参考方案3】:尝试在页面顶部添加session_start()
。这是我注意到的第一件事。
【讨论】:
我在我的代码示例中写了这个,但是当我出于某种原因发布问题时它没有显示出来。这是我反引号后的第一行代码。以上是关于在 PHP 中对多页表单使用会话跟踪的主要内容,如果未能解决你的问题,请参考以下文章