使用PHP和会话的多步骤表单
我有一个由多个步骤组成的管理表单,可以来回执行。我决定使用会话,因为如果有人来回走动,我不必担心发送所有变量,因为它们保存在会话中 在第一步中,如果有可用的会话,我将删除该会话。我这样做是因为如果有人以前注册过,并且想为其他人再次注册,那么所有以前的输入都会出现在输入框中。这是step1.php的起始页:使用PHP和会话的多步骤表单,php,session-variables,Php,Session Variables,我有一个由多个步骤组成的管理表单,可以来回执行。我决定使用会话,因为如果有人来回走动,我不必担心发送所有变量,因为它们保存在会话中 在第一步中,如果有可用的会话,我将删除该会话。我这样做是因为如果有人以前注册过,并且想为其他人再次注册,那么所有以前的输入都会出现在输入框中。这是step1.php的起始页: <?php isset($_SESSION))session_destroy(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.
<?php isset($_SESSION))session_destroy(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head> ... </head>
<body>
<form action='step2.php' enctype="multipart/form-data" method='post'>
...
</form>
</body>
</html>
根据您收到的字段,始终发布到同一URL并执行不同的代码分支。创建一个会话变量,该变量在提交step2.php中的表单后不再存在。然后在step1.php
中删除会话之前检查是否存在此变量
例如:
在步骤1中:
if (!isset($_SESSION["do_not_destroy"]) session_destroy();
$_SESSION["do_not_destroy"] = 1;
在步骤3中:
unset($_SESSION["do_not_destroy"]);
这是一个具有会话加重置功能的多步骤表单的简单示例。。。不知道如何,但可能会给你一些想法。您可以稍后使用JavaScript进行验证
<?php
// startup
if ( empty($_POST["f1"]) && empty($_POST["f2"]) && empty($_POST["f3"]) && empty($_SESSION["mode"]) ) {
$mode = 1;
$_SESSION["mode"] = 1;
}
// reset
if ( !empty($_POST["reset"]) ) {
$mode = 1;
$_SESSION["mode"] = 1;
}
// section A
if ( $_SESSION["mode"] == 1 ){
if ( !empty($_POST["f1"]) ) {
$mode = 2; // switch to next
$_SESSION["mode"] = 2;
}else{
$mode = 1; // stay current step
}
}
// section B
if ( $_SESSION["mode"] == 2 ){
if ( !empty($_POST["f2"]) ) {
$mode = 3;// switch to next
$_SESSION["mode"] = 3;
}else{
$mode = 2; // stay current step
}
}
// section C - last part
if ( $_SESSION["mode"] == 3 ){
$mode = 3;// stay current step
}
?>
<form action="" method="post">
<?php if( $mode == 1 ) { ?> A: <input type="text" name="f1"><br> <?php } ?>
<?php if( $mode == 2 ) { ?> B: <input type="text" name="f2"><br> <?php } ?>
<?php if( $mode == 3 ) { ?> C: <input type="text" name="f3"><br> <?php } ?>
<br><br>
<input type="submit">
<input name="reset" type="submit" value="Reset">
</form>
答:
B:
C:
非常好!谢谢,谢谢你的解决方案。但我想我把所有stepX.php文件放在一个文件中,注册完成后,我只需删除会话。
<?php
// startup
if ( empty($_POST["f1"]) && empty($_POST["f2"]) && empty($_POST["f3"]) && empty($_SESSION["mode"]) ) {
$mode = 1;
$_SESSION["mode"] = 1;
}
// reset
if ( !empty($_POST["reset"]) ) {
$mode = 1;
$_SESSION["mode"] = 1;
}
// section A
if ( $_SESSION["mode"] == 1 ){
if ( !empty($_POST["f1"]) ) {
$mode = 2; // switch to next
$_SESSION["mode"] = 2;
}else{
$mode = 1; // stay current step
}
}
// section B
if ( $_SESSION["mode"] == 2 ){
if ( !empty($_POST["f2"]) ) {
$mode = 3;// switch to next
$_SESSION["mode"] = 3;
}else{
$mode = 2; // stay current step
}
}
// section C - last part
if ( $_SESSION["mode"] == 3 ){
$mode = 3;// stay current step
}
?>
<form action="" method="post">
<?php if( $mode == 1 ) { ?> A: <input type="text" name="f1"><br> <?php } ?>
<?php if( $mode == 2 ) { ?> B: <input type="text" name="f2"><br> <?php } ?>
<?php if( $mode == 3 ) { ?> C: <input type="text" name="f3"><br> <?php } ?>
<br><br>
<input type="submit">
<input name="reset" type="submit" value="Reset">
</form>