Отправить форму, выполнить обработку на странице и отправить снова

У меня есть две страницы PHP, A и B.

Страница A имеет форму, которая передает переменную $_POST['mode'] со значением 'edit' на страницу B.

Страница B также имеет свою форму, кнопка отправки которой называется «_go». Страница B проверяет, установлен ли параметр $_POST['_go'] и обрабатывает форму на той же странице B.

Проблема в том, что на странице B, если я ввожу какое-то значение в форму и отправляю форму в первый раз, она работает, и я получаю сообщение об успешном завершении. Однако после того, как я получаю сообщение об успехе, не обновляя страницу, повторно вводя другое значение и повторно отправляя форму, я ничего не получаю, и повторно введенное значение не обрабатывается.

Я сам изучил это и обнаружил, что $_POST['_mode'] является причиной проблемы. Когда я отправляю форму в первый раз, $_POST['_mode'] имеет значение «редактировать». Но когда я повторно отправляю форму, $_POST['_mode'] все еще установлен, но его значение пусто.

Я расстроен здесь.

  1. Страница B получает $_POST['mode'] со значением "edit" со страницы A
  2. Страница B сохраняет $_POST['mode'] в переменную $mode, и теперь значение $mode равно 'edit'
  3. Страница B отправляет форму, теперь $_POST['_mode'] установлен, а значение $_POST['_mode'] равно 'edit'.
  4. Страница B повторно отправляет форму, так как я не обновлял страницу или что-то в этом роде, значение $mode по-прежнему должно быть «редактировать», и я полагаю, что значение $_POST['_mode'] также равно «редактировать», но $_POST['_mode'] установлен, но ПУСТОЙ.

Как сохранить $mode как есть?

Мой код на странице A выглядит следующим образом (упрощенно).

// PAGE A

<form action="Page B" id="some id" name="some name" method="post">
  <input type="hidden" name="mode" value="edit" />
  <input type="submit" class="btn" value="Edit" />
</form>

Мой код на странице B выглядит следующим образом (упрощенно).

// PAGE B

<?php

  // if form is submitted and mode is 'edit', go process the form

  if( isset( $_POST['_go'] && isset( $_POST['_mode'] ) ) {

    $_go_mode = $_POST['_mode'];

    if( $_go_mode == 'edit' ) {
      process_form();
    }

  }

  function process_form() {

    // This function receives parameters from the form
    // and does what it needs to do

    echo '<div class="process-result">';
    echo 'Successfully made changes';
    echo '</div>';

  }

?>

<div>

  <?php

  // This $_POST['mode'] variable is passed from Page A

  if( isset( $_POST['mode'] ) ) {
    $mode = $_POST['mode'];
  }

  ?>

  <form method="post" class="form-horizontal">

    <div class="form-group">
      <label class="control-label">Some label</label>
      <input type="text" class="form-control" name="_name" value="some value" />
    </div>

    <div class="form-group">
      <input type="hidden" name="_mode" value="'.<?php echo $mode; ?>.'" />
      <input type="submit" name="_go" class="btn" value="Make Changes" />
    </div>

  </form>

</div>

В качестве обходного пути я изменил код, как показано ниже. Теперь это работает как задумано, но я не чувствую, что это хороший способ сделать это...

Before:
        if( $_go_mode == 'edit' ) {
          process_form();
        }

After:
        if( $_go_mode == 'edit' ) {
          $_POST['mode'] = $_go_mode;
          process_form();
        }

person Dongsan    schedule 07.04.2017    source источник
comment
переменные будут пустыми, а сообщение сбрасывается после перезагрузки страницы.   -  person Gert    schedule 07.04.2017
comment
Мне нужно немного больше разъяснений. Даже если я обрабатываю форму на той же странице с помощью if( isset( $_POST[ ] ) ), это считается перезагрузкой страницы, а переменные исчезают?   -  person Dongsan    schedule 07.04.2017
comment
я отправил вам ответ, чтобы уточнить, когда вы загружаете страницу в первый раз, на страницу будет загружена $_post['mode'], и вы можете получить переменную и установить ее. при перезагрузке страницы больше нет $_post['mode'] , потому что на страницу не отправлялись данные сообщения. Я думаю, что лучший способ - использовать сеансы, поэтому я изменил ваш код для использования сеансов.   -  person Gert    schedule 07.04.2017
comment
Спасибо, Герт, за потраченное время на ценный совет. В любом случае, я забыл упомянуть, что я на Wordpress, и запуск сеанса вручную выглядит для меня сомнительным, хотя.   -  person Dongsan    schedule 07.04.2017
comment
я могу опубликовать код, который я написал для ответа для переключателей без сеансов, но это всего лишь 1 страница, публикуемая на той же странице, если вы хотите, я могу добавить этот код в свой ответ, может быть, это полезно   -  person Gert    schedule 07.04.2017
comment
вы можете попробовать это, а затем оставить комментарий, что не работает, а затем попытаться помочь вам, я писал php в течение многих лет, но теперь изучаю быстрый код только здесь, чтобы сохранить мою свежесть в php, лол.   -  person Gert    schedule 07.04.2017