2010-09-08 2 views
1

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

<?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'], иметь только действие = ""; вы заметите, что значение WILL пройти.

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

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

+0

-1 без каких-либо оснований. Это грубо. :( – MEM

+0

+1, ничего страшного в этом вопросе. Ничего хуже, чем тихий downvoter! –

+0

@Abe Miessler: Спасибо за ваше чувство справедливости. :) @All: Если у кого-то по какой-либо причине возникает этот вопрос, или Похоже, что проблема связана с тем, что у нас есть имя кнопки и имя формы, равные друг другу, что приводит к несоответствиям на стороне браузера. - но это НЕ подтверждено. – MEM

ответ

1
{   
     $nomeDominio = $_GET['nomeDominio']; 
     echo "I'm getting ".$nomeDominio; 
    } 

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

вы пропускаете строку с комментарием, это здесь

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

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

+0

Это название формы. Вы можете свободно скопировать этот код, чтобы убедиться в этом сами. – MEM

+0

Я имел в виду его из-за этого он терпит неудачу. Попробуйте мое исправление. – Iznogood

+0

@Iznogood - Я постараюсь правильно. Между тем, чего я должен ожидать? Что такое «исправление» в этом случае? – MEM

0

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

EDIT

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

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

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

+0

Спасибо premiso. Однако я не слежу. Пожалуйста, проявляйте терпение. Я поставил одно и то же имя на обоих. «Вопрос» остается тем же. Вы можете скопировать/вставить код, чтобы увидеть его. – MEM

+0

Пожалуйста, обратите внимание на мою дополнительную заметку по моему вопросу. Большое спасибо. – MEM

0

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

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

EDIT: Хорошо, я думаю, я понимаю немного лучше.

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

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

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

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

+0

Нет, вы не понимаете меня правильно. :) Я не хочу РЕШИТЬ что-нибудь. Я хотел бы просто ПОНИМАТЬ, почему он ведет себя так. Взгляните на дополнительную заметку по этому вопросу. :) – MEM

0

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

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 
Смежные вопросы