【问题标题】:Using Session Tracking for Multipage Form in PHP在 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>

【问题讨论】:

    标签: php forms sessiontracking


    【解决方案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()。这是我注意到的第一件事。

        【讨论】:

        • 我在我的代码示例中写了这个,但是当我出于某种原因发布问题时它没有显示出来。这是我反引号后的第一行代码。
        猜你喜欢
        • 1970-01-01
        • 2011-04-25
        • 2017-10-14
        • 2012-03-14
        • 2014-04-25
        • 1970-01-01
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多