2014-11-21 77 views
0

當我打印$letter變量時,我沒有得到正確的值。它總是來0PHP對象類沒有得到提交字段值

的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'來反對?爲什麼使用'$ _REQUEST'而不是'$ _GET'? – 2014-11-21 19:35:00

+2

'txtweb-message'不是有效的變量/屬性名稱。 – AbraCadaver 2014-11-21 19:35:25

+0

'var_dump($ _ REQUEST)'看看你實際得到了什麼。我建議只使用'$ _GET'而不是'$ _REQUEST',因爲你的表單是'method ='get''。 – 2014-11-21 19:35:47

回答

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 2014-11-21 19:37:20

+0

@chatfun我知道,但由於'-'不是PHP變量或屬性標籤中的有效字符,因此減法就是實際發生的事情。您正在從未設置的對象屬性'$ params-> txtweb'中減去並取消設置常量'message'。因此結果爲0. – 2014-11-21 19:39:12

+0

是的你是對的。當我將字段名稱'txtweb-message'更改爲'txtwebmessage',然後打印'$ letter = $ params-> txtwebmessage;'我正確的。 – Developer 2014-11-21 19:41:25