如何防止在php中的页面加载/刷新上提交表单?

时间:2019-06-04 14:08:53

标签: php forms post get

我正在处理 html / php代码,如下所示,我想在单击按钮时调用php代码的特定部分。

<html> 
    <?php 
     if($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['go-button'])) {
     for each  ($mp4_files as $f) {

     }
    }
    ?>

  <form action ="" method="POST">
    <table>
       <td style="width:5%; text-align:center;"><button style="width:90px;" type="submit" name="go-button" value="Go"  class="btn btn-outline-primary">Go</button>  <!-- Line#B -->
   </table
  </form>
</html>

单击 Line#B 上的按钮,就会在上面调用php代码,并且该代码位于 if块内部。

我现在遇到的问题是,在刷新页面时,它也正在我不想发生的if块内。我希望仅在单击转到按钮时才激活屏蔽。

问题陈述:

我想知道应该在上面的 php代码中进行哪些更改,以便在刷新页面时不会将其放入if块内。仅应在 Line#B 上单击一个按钮,然后单击它。

1 个答案:

答案 0 :(得分:2)

我不确定您在哪里遇到了这样的问题-在一条评论中,您实际上触到了头,就像如何防止用户重新加载页面时重新提交表单一样。您应该能够采用类似以下的方法-尽管如果PHP确实生成了内容并且它位于文档正文中某个位置,则您需要使用output buffering来防止与headers already sent有关的错误

<?php 
    if( $_SERVER['REQUEST_METHOD']=='POST' and !empty( $_POST['go-button'] ) ) {

        foreach( $mp4_files as $f ) {
            /* do stuff */
        }

        /* finished processing POST request, redirect to prevent auto re-submission*/
        exit( header( sprintf('Location: %s', $_SERVER['SCRIPT_NAME'] ) ) );
    }
?>

<html>
    <head>
        <title></title>
    </head>
    <body>
        <form method="POST">
            <table>
                <tr>
                    <td style="width:5%; text-align:center;">
                        <!-- Line#B -->
                        <button style="width:90px;" type="submit" name="go-button" value="Go" class="btn btn-outline-primary">Go</button>
                    </td>
                </tr>
            </table>
        </form>
    </body>
</html>