PHP覆盖isset值,显示新输出


PHP overriding isset value, showing new output

所以,我有这个代码

<?php
if(!isset($_POST["step1_submit"]))
{
    echo "Fill step1!";
    step1();
}

function step1()
{
    if(isset($_POST["step1_submit"]))
    {
        step2();
    }
    else
    {
        echo '<form action="" method="post">STEP 1: <input name="step1_input"/><input name="step1_submit" type="submit" value=">>STEP 2>>"/></form>';
    }
}
function step2()
{
    echo "reached step 2";
    if(isset($_POST["step2_submit"]))
    {
        echo '<br/>'.$_POST["step2_input"];
        step3();    
    }
    else
    {
        echo '<form method="post">STEP 2: <input name="step2_input"/><input name="step2_submit" type="submit" value=">>STEP 3>>"/></form>';
    }
}
function step3()
{
    echo '<strong>WELL DONE</strong>';  
}
?>

它显示步骤1的输入,但从未显示步骤2。在我看来,它会被困在调用函数step2上,因为在执行此操作时,isset($_POST(step1_submit))会将其值更改为NULL。

我如何才能使此代码正常工作?它应该是这样的:填充步骤1输入>>获得填充步骤2输入>>提交步骤2>>获得"做得好"回声。

基本上,顶部的条件语句需要一个else分支:

if(!isset($_POST["step1_submit"]))
{
    echo "Fill step1!";
    step1();
} else {
    step2();
}
...

然而,如果你有更多的步骤,它应该是这样的:

switch(TRUE) {
    case isset('step1_submit') :
        step2();
        break;
    case isset('step2_submit') :
        step3();
        break;
    ...
    default: 
        echo "Fill step1!";
        step1();
}

然后将您的功能更改为:

function step1()
{
    echo '<form action="" method="post">STEP 1: <input name="step1_input"/><input name="step1_submit" type="submit" value=">>STEP 2>>"/></form>';
}

function step2()
{
    echo '<form action="" method="post">STEP 2: <input name="step2_input"/><input name="step2_submit" type="submit" value=">>STEP 3>>"/></form>';
}
...

if条件句在那里不是必需的。