2012-06-17 62 views
1

我在創建一個簡單的PHP腳本時遇到了問題。在PHP中,$_GET["give"]變量始終爲0,但我確實在URL中定義了它。如果未定義,我的腳本將重定向。GET變量的PHP值是0嗎?

if (isset($_GET["give"])&&$_GET["give"]!="") { 
     echo "give GET detected<br />"; 
     $user = $_GET["give"]; 
     echo $_GET["give"]+$user+"<br />"; 
    } 
    header("Location: /diamonds/"); //this document, but removing arguments. 

該URL很好,/?give=kroltan,它應該回聲kroltan。但是,相反,我得到這個在瀏覽器:

give GET detected <br> 
    0 

,它甚至沒有呼應$user變量,雖然它的值相同$_GET["give"]。並且之後也沒有<br>

回答

6

這是PHP。您使用.而不是+連接字符串。

正如@MarcB在評論中所說 - 換句話說,您正在對字符串進行數學補充,所以PHP會將您的kroltan字符串轉換爲0

String operators in PHP

+4

換句話說,你正在做一個字符串的數學加法,所以PHP正在將你的'kroltan'字符串轉換爲0. –

+0

我喜歡你的加法@MarcB;我將在答案中加入它 –

0

在PHP中,操作者+是代數相加,而.用於字符串連接。

0

您在$_GET["give"]+$user+"<br />"中使用數字加法(+)運算符而不是字符串連接(.)。 PHP很高興地將非數字字符串轉換爲零。

1

通過使用加號PHP認爲它處理數字,從而將字符串更改爲數字。其結果是一個整數值爲零。因此,您將始終得到零值。由於字符串的值爲零。

如果你想組合字符串,你應該使用點而不是加號。

所以不是:

echo $_GET["give"]+$user+"<br />"; 

,因爲你沒有使用else語句,也就是爲什麼你分配$的價值,您應該使用

echo $_GET["give"] . $user . "<br />"; 

順便說一句代碼將始終重定向, _GET ['give']給$用戶並將它們組合到下一行中?這似乎很奇怪。

+0

這是一個部分代碼,專注於此問題。在完整的代碼中,重定向是在這個內部,但是在我的重要代碼之外(它從MySQL數據庫中檢索事物(是的,我正在轉義它))使用'$ _GET [「給出']'和'$ user'一個測試,我實際上只使用$ user,所以我可以把它放在字符串中而不用分開它們(比如''hello $ user,你好嗎'')。 – Kroltan

+0

好吧,只是想確保代碼按照你的意圖工作。 – BjornW