Как предотвратить отправку формы при загрузке / обновлении страницы в php? - PullRequest
0 голосов
/ 04 июня 2019

Я работаю над 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>

При нажатии кнопки в Строка # B код php вызывается выше и идет внутри , если блок .

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что при обновлении страницы она также попадает внутрь блока if, чего я не хочу, чтобы происходило. Я хочу, чтобы блок был активен только при нажатии кнопки Go .

Постановка задачи:

Мне интересно, какие изменения я должен внести в php код выше , чтобы при обновлении страницы он не попадал внутрь блока if. Это должно идти только по нажатию кнопки на Строка # B .

1 Ответ

2 голосов
/ 04 июня 2019

Я не уверен, где у вас возникли проблемы как таковые - в одном комментарии вы фактически ударили ногтем по голове, как это было с тем, как предотвратить повторную отправку формы, если пользователь перезагрузит страницу.Вы должны быть в состоянии принять подход, подобный следующему - хотя, если 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...