使用PHP和会话的多步骤表单

使用PHP和会话的多步骤表单,php,session-variables,Php,Session Variables,我有一个由多个步骤组成的管理表单,可以来回执行。我决定使用会话,因为如果有人来回走动,我不必担心发送所有变量,因为它们保存在会话中 在第一步中,如果有可用的会话,我将删除该会话。我这样做是因为如果有人以前注册过,并且想为其他人再次注册,那么所有以前的输入都会出现在输入框中。这是step1.php的起始页: <?php isset($_SESSION))session_destroy(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.

我有一个由多个步骤组成的管理表单,可以来回执行。我决定使用会话,因为如果有人来回走动,我不必担心发送所有变量,因为它们保存在会话中

在第一步中,如果有可用的会话,我将删除该会话。我这样做是因为如果有人以前注册过,并且想为其他人再次注册,那么所有以前的输入都会出现在输入框中。这是step1.php的起始页:

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