Передача значений из одной формы в другую - странный случай - PullRequest
1 голос
/ 08 сентября 2010

Пожалуйста, посмотрите на следующий код:

<?php

  $nomeDominio='';

  if (isset($_GET['infoDominio']))
  {          
      $nomeDominio = $_GET['nomeDominio'];
      echo "I'm getting ".$nomeDominio;
  }

  if (isset($_POST['atualizarDominio']))
  {
      echo "I'm posting ".$nomeDominio;
  }

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Test Case 99</title>
    </head>

    <body>

        <form name="infoDominio" action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>"  method="get">

            <input id="nome_dominio" type="text" name="nomeDominio" value="<?php echo $nomeDominio; ?>"/>
            <br />
            <button name="infoDominio" type="submit">Obtem informacao</button>

        </form>

        <form action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" name="atualizarDominio" method="post">

            <input type="hidden" value="<?php echo $nomeDominio ?>" name="nome-dominio"/>
            <br />
            <button type="submit" name="atualizarDominio">atualizar domínio</button>

        </form>

    </body>

</html>

Вы можете скопировать / вставить - это послужит тестовым примером.

Вот так, ЕСЛИ мы получим и затем мы публикуем : значение из GET НЕ перейдет в POST.

Дело в том, что если мы просто изменимaction = свойство второго элемента формы, чтобы вместо $ _SERVER ['PHP_SELF'] иметь просто action = "";вы заметите, что значение будет пройти.

Мой вопрос: почему?

ДОПОЛНИТЕЛЬНОЕ ПРИМЕЧАНИЕ: Этоне то, чтобы решить.Вместо этого это что-то, чтобы понять, почему так происходит. Почему , если мы изменим действие во второй форме на action = "" , значение, сохраненное в $ nomeDominio, перейдет из одного условия в другое?Пример кода может быть использован сам по себе, поэтому вы можете очень легко это легко проверить и понять, о чем я говорю.

Ответы [ 4 ]

1 голос
/ 08 сентября 2010
 {          
      $nomeDominio = $_GET['nomeDominio'];
      echo "I'm getting ".$nomeDominio;
  }

  if (isset($_POST['atualizarDominio']))
  {
      $nomeDominio = $_POST['nomeDominio']; //THIS HERE
      echo "I'm posting ".$nomeDominio;
  }

вы пропустили строку с комментарием ЭТОТ ЗДЕСЬ

Вы хотели передать _GET ['nomeDominio'] из первой формы в скрытое поле второй формы, верно? Затем, когда мы отправляем Вторую форму, вы снова выводите значение nomeDominio (из скрытого поля второй формы). Вы пропали без вести и назначение в $ _POST: $ nomeDominio = $ _POST ['nomeDominio'];

Вот, пожалуйста. Если ты не понимаешь, я не знаю, как сказать по-другому.

0 голосов
/ 09 февраля 2017

Вы сделали две ошибки. Первая ошибка

if (isset($_POST['atualizarDominio']))
{
  $nomeDominio = $_POST['nomeDominio']; ///Here
  echo "I'm posting ".$nomeDominio;
}

Вторая ошибка

<input type = "hidden" value="<?php echo $nomeDominio; ?>" name="nomeDominio"/><br/>
name="nome-dominio"   //This is another Mistake
name="nomedominio" //use it
0 голосов
/ 08 сентября 2010

Если я правильно вас понимаю, вы хотите иметь возможность распространять значение $_GET даже с помощью метода POST. Вы можете сделать это, добавив строку запроса к атрибуту действия второй POST формы:

<form action="<?php echo htmlentities($_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'] );?>" name="atualizarDominio" method="post">

РЕДАКТИРОВАТЬ: Хорошо, я думаю, что понимаю немного лучше.

В первом случае (со вторым действием формы как $_SERVER['PHP_SELF']) вы заставляете форму отправлять данные на страницу без всех добавленных данных $_GET (если вы посмотрите на URL, то $_GET данные добавляются к имени файла после ?), поэтому, когда вы ищете $_GET['infoDominio'], его больше не существует, и поэтому $nomeDominio по-прежнему устанавливается в пустую строку. Когда вы отправляете форму POST, $_POST['atualizarDominio'] IS устанавливается, и вы получаете сообщение I'm posting, но в $nomeDominio.

значение не установлено.

Теперь, когда вы изменяете действие второй формы на "", вы говорите браузеру отправить пользователя на ту же страницу, на которой вы только что находились, которая включает в себя все данные $_GET в URL (проверьте его - вы найдете ?nomeDominio=whatever&infoDominio= в адресной строке еще). Когда вы отправляете вторую форму после отправки первой формы, все данные $_GET распространяются, и поэтому устанавливается $_GET['infoDominio'], $nomeDominio присваивается любое значение, указанное в первой форме, и, таким образом, отображается в страница после отправки второй формы.

Тот факт, что имя формы и имя кнопки отправки совпадают, не должен влиять на это.

Если я все еще не понимаю, о чем вы спрашиваете, пожалуйста, дайте мне знать. В противном случае я надеюсь, что это поможет.

0 голосов
/ 08 сентября 2010

Вы противоречивы. Верхняя форма использует nomeDominio для имени элемента, где в качестве нижней формы используется nome-dominio. Я догадываюсь, вот почему один появляется, а другой нет, вы получаете неправильное имя.

EDIT

Дальнейшая разработка:

if (isset($_POST['nomeDominio']))
{
    echo "I'm posting ".$_POST['nomeDominio'];
}

Заменив этот код и предполагая, что вы выбрали nomeDominio для имени, это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...