PHP - Форма без действия сохраняет данные GET. Форма с действием (тот же URL) не

Немного смущает. Позвольте мне объяснить ситуацию на примере.

У меня есть форма на delete.php (простой PHP, без фреймворка), которая получает параметр через http get

Когда я отправляю форму, я всегда думал, что значения GET будут потеряны, поэтому, если я хочу сохранить эти значения, я должен использовать input type = "hidden", sessions или любой другой механизм.

Но, используя PHP 7.0.8, Apache 2.4 (конечно, это не проблема версии, просто хотел вам сообщить), я понял следующее:

a) Если для действия формы установлено значение delete.php (тот же URL-адрес), значения GET теряются после отправки формы. Как и ожидалось

б) Если действие формы НЕ установлено, данные отправляются в delete.php (как и ожидалось), но значения GET сохраняются.

Я не знаю почему, и я не могу найти объяснения ни в каких документах или http espec.

Кто-нибудь знает, где объясняется эта ситуация?

Вот код

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>GET / POST TEST</title>
    <link rel="stylesheet" type="text/css" href=" ">
  </head>
  <body>

      <form method="post" action="get_post_test.php">
        Name<input type="text" name="name" required><br>
        LastName<input type="text" name="lastname" required><br>
        <p>
          <input type="submit">
        </p>
      </form>

      <?php

          if(isset($_GET['id'])) {
            echo "TENGO GET";
            var_dump($_GET);
          }

          if (isset($_POST['name'])) {
            echo "TENGO POST";
            var_dump($_POST);
          }
      ?>
  </body>
</html>

Я получаю $ _GET ['id'] по ссылке, и если:

a) action = "get_post_test.php" тогда $ _GET ['id'] теряется при отправке формы (как я и ожидал, потому что get_post_test.php - это имя текущего файла)

б) Если я не устанавливаю никаких действий, $ _GET ['id'] по-прежнему доступен при отправке ????????

С уважением.


person pekechis    schedule 01.12.2016    source источник
comment
Я бы рекомендовал показать код.   -  person Ruhul Amin    schedule 01.12.2016


Ответы (1)


Возьмем пример

Случай 1. Когда действие определено

Когда действие определено, форма отправляется на эту страницу.

Пример: если ваше действие delete.php, а URL-адрес delete.php, тогда форма будет отправлять данные, как ожидалось, и URL-адрес станет таким же delete.php?KEY=VALYE&..., но действие формы будет таким же delete.php, потому что вы его определили. Вот почему предыдущие данные будут потеряны при повторной отправке.

Случай 2. Если действие не указано.

Если действие оставлено пустым, это означает, что действие будет таким же, как и URL-адрес.

Пример: если ваш URL-адрес delete.php, действие будет таким же, как и URL-адрес delete.php, поэтому форма будет отправлять данные, как ожидалось. После этого URL-адрес станет таким delete.php?KEY=VALYE&.... Когда вы повторно отправите форму, действие будет таким же, как и URL-адрес, который уже имеет те же значения получения.

Надеюсь, это поможет вам понять

person Aman Rawat    schedule 01.12.2016
comment
Я понимаю, поэтому удивлен. См. Недавно опубликованный код и дополнительные пояснения. - person pekechis; 02.12.2016