2014-11-21 2 views
0

$letter 변수를 인쇄 할 때 올바른 값을 얻지 못합니다. 언제나 0입니다.PHP 객체 클래스가 제출 필드 값을 가져 오지 않습니다

index.php를

<form method="get" class="txtweb-form" action="index.php"> 
    Guess a letter: <input type="text" name="txtweb-message" /> 
    <input type="submit" value="submit" name="guess" /> 
</form> 

<?php 
$params = (object) $_REQUEST; 
//print_r($params); 
if (isset($params->guess)) { 
    $letter = $params->txtweb-message; 
    echo $letter;exit; 
} 
?> 
+3

'$ _REQUEST'를 (를) 왜 객체에 캐스트하고 있습니까? 왜'$ _GET' 대신'$ _REQUEST'를 사용하고 있습니까? –

+2

'txtweb-message'는 유효한 변수/속성 이름이 아닙니다. – AbraCadaver

+0

'var_dump ($ _REQUEST)'를 사용하면 실제로 얻은 것을 볼 수 있습니다. 그리고 폼이'method = 'get''이기 때문에'$ _REQUEST' 대신'$ _GET'을 사용하는 것을 추천합니다. –

답변

1

왜 당신은 객체로 캐스팅? 당신은 아마 입력 이름으로 _ 대신 -를 사용할 필요가 쉽게

<?php 
$params = $_REQUEST; 
if (isset($params["guess"])) { 
    $letter = $params["txtweb-message"]; 
    echo $letter;exit; 
} 
?> 
2

처럼 배열로 치료하지 않을 것입니다. -은 PHP에서 속성 이름의 유효한 문자가 아닙니다.

무엇 실제로 일어나는 것은 이것이다 :

$letter = $params->txtweb - message; // a subtraction operation 

당신은 설정되지 않은 개체 속성 $params->txtweb에서 설정되지 않은 일정 message을 뺀 끝. 따라서 0이됩니다.

입력 이름에 -을 유지할 수 있지만 값을 검색하려면 $_REQUEST['txtweb-message'] 또는 $_GET['txtweb-message'] (객체에 캐스트하지 않음)을 사용해야합니다.

슈퍼 글로벌 배열을 객체에 캐스트 할 이유가 전혀 없습니다. 이것이 여러분의 문제를 소개 한 것입니다.

여기에 추가 메모가 있습니다. 오류보고 기능을 켜고 개발해야합니다. 위와 같은 작업으로 인해 두 가지 경고가 표시되어 상황을 이해하는 데 도움이되었을 수 있습니다.

+0

아니요 'txtweb-message'는 텍스트 필드 이름입니다. 'print_r ($ params);'당신은 매개 변수가 객체 클래스에 들어 있다는 것을 알 것입니다. – Developer

+0

@chatfun 알지만,'-'는 PHP 변수 나 프로퍼티 라벨에서 유효한 문자가 아니기 때문에 감산은 실제로 일어나고 있습니다. 당신은 unset 객체 속성'$ params-> txtweb'에서 상수'message'를 뺀다. 따라서 결과는 0입니다. –

+0

네 말이 맞습니다. 필자는 필드 이름'txtweb-message'를'txtwebmessage'로 변경하면'$ letter = $ params-> txtwebmessage;를 출력합니다. – Developer

관련 문제