2013-08-25 4 views
0

이것은 말도 안됩니다. 내 문제는 제목대로입니다. var_dump 또는 print_r을 시도하면 $ _POST superglobal은 빈 배열을 생성합니다. 양식 데이터가 POST로 전송되지 않습니다.

은 내 양식에서보세요 :

<form method="post" action="" class="login"> 
    <fieldset> 
     <dl> 
      <dt><label for="loginEmail">Email</label></dt> 
      <dd><input type="email" id="loginEmail" name="loginEmail" maxLength="32" /></dd> 

      <dt><label for="loginPassword">Password</label></dt> 
      <dd><input type="password" id="loginPassword" name="loginPassword" maxlength="64" /></dd> 

      <dt></dt> 
      <dd><input type="submit" value="submit" class="button" /></dd> 
     </dl> 
    </fieldset> 
</form> 

난 그게 뭐가 잘못 표시되지 않습니다. name 속성은 그대로이며 같은 페이지에 게시하고 있지만 POST는 계속 비어 있습니다. 비슷한 구문을 가진 또 다른 페이지에 다른 양식이 있다는 것을 알아 두는 것이 중요합니다. 예를 들어

:

if (!empty($_POST)) { 
    echo '42'; 
} 

이 실행되지 않습니다.

아이디어가 있으십니까? 당신이 동일한 페이지가 다음 지정 될 것으로 기대하는 경우

+0

나는'action = ""'그것이 당신의 코드에 실제로 어떻게 나타나지 않는 것인가? – Dave

+1

게시 한 내용은 단지 양식 일뿐입니다. 그것을위한 핸들러는 어디에 있습니까? 게다가, 만약 당신이'if (isset ...제출 '을 선택하면 제출 버튼의 이름을 지정해야합니다. –

+0

귀하의 처리기는'를 사용하거나 일을 더 간단하게하기 위해,'foreach ($ _POST as $ variable => $ value) {'는 POST 변수에서 가져온 모든 값을 출력합니다. –

답변

-1

양식은 .. 아무데도 같은 페이지를 렌더링하지만, 매개 변수를 보내드립니다

<form action="{$_SERVER['SCRIPT_NAME']}"> 

을 가리키는되지 않습니다. 어딘가에서 핸들러 스크립트가 있으면 상대 URL을 지정하십시오.

+0

http://stackoverflow.com/a/280076/1700963'PHP_SELF' 대신'SCRIPT_NAME'을 사용할 것을 권장합니다. – Class

1

$_SERVER 수퍼 글로벌을 인쇄 해보십시오. 무엇보다 REQUEST_METHOD 값을 포함하는 키가 포함되어 있습니다 ...

그런데 비어있는 작업 속성은 실제로 완벽하게 좋습니다. 약간 오래된 브라우저에서도 일관되게 작동하는 것을 보았습니다. 우리가 알다시피

function on_shutdown(){ 
    echo "<!--\n"; 
    echo "\n\tHeaders Sent:"; 
     $file = $line = null; 
     headers_sent($file, $line); 
     echo "\n\t\t$file: $line"; 
    echo "\n\tLast Error:"; 
     if(function_exists('error_get_last') && error_get_last()) 
      foreach(error_get_last() as $k=>$v) 
       echo "\n\t\t$k: $v"; 
     elseif($php_errormsg) 
      echo "\n\t\tError: $php_errormsg"; 
     else echo "\n\t\tnone"; 
    echo "\n\tIncluded Files:"; 
     echo "\n\t\t".implode("\n\t\t", get_included_files()); 
    echo "\n-->"; 
} 
register_shutdown_function('on_shutdown'); 
while(ob_get_level())ob_end_clean(); 
ob_implicit_flush(true); 
0

가 DEFAULT

라는 것이 있습니다 :

또한, 나는 한 번 당신의 PHP 코드의 맨 위에 삽입 ... 디버깅에 매우 도움이되는 작은 조각을 썼다

는 W3C에 따르면

동작 URI = [CT]는 이 특성은 형태 처리제를 지정한다. HTTP URI 이외의 값에 대한 사용자 에이전트 동작은 정의되지 않습니다. 출처 : http://www.w3.org/TR/html401/interact/forms.html

이제 요점으로 돌아갑니다. 둘 다 같은 페이지에있는 경우 코드가 잘 실행 : 값을 작성하고 제출 후

<form method="post" action="" class="login"> 
    <fieldset> 
     <dl> 
      <dt><label for="loginEmail">Email</label></dt> 
      <dd><input type="email" id="loginEmail" name="loginEmail" maxLength="32" /></dd> 

      <dt><label for="loginPassword">Password</label></dt> 
      <dd><input type="password" id="loginPassword" name="loginPassword" maxlength="64" /></dd> 

      <dt></dt> 
      <dd><input type="submit" value="submit" class="button" /></dd> 
     </dl> 
    </fieldset> 
</form> 

<?php 
if (!empty($_POST)) { 
    echo '42'; 
} 
    ?> 

출력 내가 가지고 출력으로 :

42 

그리고 난에 PHP 코드를 변경하는 경우 :

array (size=2) 
'loginEmail' => string '[email protected]' (length=11) 
'loginPassword' => string 'qwerty' (length=6) 
:
<?php 
if (!empty($_POST)) { 
    var_dump($_POST); 
} 
     ?> 

내가 같이 출력을 가지고

캐시를 지우고 웹 서버를 다시 시작하십시오. 희망이 지금은 작동합니다 :)

관련 문제