【问题标题】:PHP: HTML Form disappears after submitPHP:提交后HTML表单消失
【发布时间】:2015-11-09 08:48:35
【问题描述】:

我在myFunction 中有一个简单的<form>,你可以在这里看到:

<?php
    function myFunction()
    {
        echo "
            <form method='post'>
                <fieldset>
                    <legend>Something</legend>
                    <input type='text'>
                    <input type='submit' value='send' name='postform'>          
                </fieldset>
            </form>
        ";
            
        if (isset($_POST['postform']))
        {
            echo "I'm working!";
        }
    }
?>

当我调用这个函数时,我可以看到表单,但是当我提交它(通过单击提交按钮)时,它消失了。我该如何解决这个问题?

这里是完整的代码:

<?php
    echo "
            <form method='post'>
            <button name='first'>First step</button>
            </form>
        </div>
        ";
    
    if (isset($_POST['first']))
    {
        myFunction();
    }
?>
   
<?php
    function myFunction()
    {
        echo "
        <form method='post'>
            <fieldset>
                <legend>Something</legend>
                <input type='text'>
                <input type='submit' value='send' name='postform'>
            </fieldset>
        </form>
    ";
    
    if (isset($_POST['postform']))
    {
        echo "I'm working!";
    }
}
?>

【问题讨论】:

  • 您的意思是提交按钮消失了,而表单的其余部分则保留在那里?听起来好像有一些客户端javascript处于活动状态。您也必须发布该代码。
  • 一切似乎都在工作。我已将您的代码粘贴到PHPTESTER 运行myFunction()。提交表格。表单仍然可见且完整,并且您会看到附加文本。
  • 没有整个表单消失,不仅仅是按钮。
  • 你能告诉我们你调用myFunction()的代码吗?
  • 一定有其他代码覆盖了表单代码。但是,如果您不显示除此之外的内容,我们不能说

标签: php html forms post


【解决方案1】:

问题是$_POST superglobal 在新请求时被清除,就像您在页面中导航时一样,这是很自然的。

所以,如果一个人来到一个页面,比如说$_POST = ['first' =&gt; ''],然后他提交了一个帖子表单(或任何表单)['postform' =&gt; 'send'],那么生成的$_POST 将是['postform' =&gt; 'send']

因此,在您的情况下,最简单的解决方案是关注Shailesh's answer 或使用method='get' 提交第一个表单,当然,您必须将$_POST['first'] 更改为$_GET['first']

但更好的解决方案是在每个步骤的请求中传递一些“步骤”参数,这样您将拥有&lt;input type="hidden" name="step" value="1"&gt;。然后,根据步骤变量,做一些事情。

还可以查看$_SESSION

干杯!

【讨论】:

    【解决方案2】:

    它消失了,因为您无法调用函数 myFunction() 本身。第二种形式不包含“first”字段。

    如果您希望它“按原样”工作,请将其包含在 myFunction() 代码中:

        function myFunction()
        {
        echo "
        <form method='post'>
        <fieldset>
        <legend>Something</legend>
        <input type='text'>
        <input type='hidden' value='send' name='first'>
        <input type='submit' value='send' name='postform'>
        </fieldset>
        </form>
       ";
       if (isset($_POST['postform']))
       {
        echo "I'm working!";
       }
       }
       ?>
    

    唯一的变化是

        <input type='hidden' value='send' name='first'>
    

    这使表单再次可见。无论如何,您应该重新考虑整个代码。

    【讨论】:

    • 谢谢,这行得通!但是我完全不明白为什么当你添加这个隐藏的输入时它会起作用。你能解释一下吗?
    • 您正在检查是否存在来自输入表单的“第一个”值,无论它是真实值,以便调用函数 myFunction(),这与 HTML 表单相呼应。使用该隐藏值,我们在您的主代码中输入“if”块,然后调用该函数。
    【解决方案3】:
    if (isset($_POST['first']))
    {
       myFunction();
    }
    

    替换为:

    if (isset($_POST['first']) || isset($_POST['postform']) )
    {
       myFunction();
    }
    

    【讨论】:

    • 这行得通!非常感谢。但是您能否向我解释一下有什么区别以及为什么会这样?会很感激的。
    • 您的页面中有两种形式。所以你必须检查是否在 if 条件下设置了提交值。这样您的函数就会调用两个提交按钮。
    【解决方案4】:

    将您的 postform 表单处理移出 myFunction 函数定义并从那里调用 myFunction 函数。这是完整的代码,

    <html>
    <head>
        <title>Page Title</title>
    </head>
    <body>
    <?php
        echo "
            <form method='post'>
                <button name='first'>First step</button>
            </form>
        ";
    
        if (isset($_POST['first'])){
            myFunction();
        }
    
    ?>
    
    <?php
        function myFunction(){
            echo "
                <form method='post'>
                    <fieldset>
                        <legend>Something</legend>
                        <input type='text'>
                        <input type='submit' value='send' name='postform'>
                    </fieldset>
                </form>
            ";
        }
    
        if (isset($_POST['postform'])){
            myFunction();
            echo "I'm working!";
        }
    ?>
    </body>
    </html> 
    

    【讨论】:

      【解决方案5】:

      写相同的两个不同的文档。

      <html>
       <body>
       <form method="post" action="submit.php">
       <fieldset>
         <legend>Something</legend>
         <input type="text" name="input">
         <input type='submit' value='send' name="postform">
         </fieldset>
         </form>
      

      现在在 submit.php 中写入以下内容

       <?php 
        $input=$_POST['input'];
          if ($input!="")
           {
          echo "I'm working!";
            }
      
       ?>
      

      【讨论】:

      • 感谢您的回答,但不幸的是,我需要将所有内容放在一个文档中。
      • 那么在这种情况下,请尝试在您的表单中使用 action=" . $_SERVER['PHP_SELF'] . " 。
      【解决方案6】:
      <?php
      if(isset($_POST['submit'])) 
      { 
          $name = $_POST['name'];
          echo "User Has submitted the form and entered this name : <b> $name </b>";
          echo "<br>You can use the following form again to enter a new name."; 
      }
      ?>
      <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
         <input type="text" name="name"><br>
         <input type="submit" name="submit" value="Submit Form"><br>
      </form>
      

      【讨论】:

        【解决方案7】:

        在此代码上更改此位置:

        <?php
        echo "
        <form method='post'>
        <button name='first'>First step</button>
        </form>
        </div>
        ";
        
        if (isset($_POST['first']) or isset($_POST['postform']))
        {
        myFunction();
        }
        
        ?>
        

        【讨论】:

          猜你喜欢
          • 2012-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-26
          • 1970-01-01
          • 1970-01-01
          • 2015-07-26
          相关资源
          最近更新 更多