2012-02-21 89 views
-3

我需要找出爲什麼它說「舊版本」,即使當$a = true。如果$a是真的,它應該做if塊,而不是其他塊。爲什麼此聲明總是返回false?

<?php 
$launcherv = "13"; 
$gamev = "1326382442000"; 
$sessid = math.rand(1, 1000000000000000); 
$ticket = math.rand(1, 1000000000000); 
$user =  ""; 
$password = ""; 
$version = ""; 
$a = false; 
$b = false; 
$c = false; 


if ($version == $launcherv){ 
$a = true; 

} else { 
$a = false; 

} 
if ($user == ""){ 
$b = false; 

} else { 


$b = 'true'; 

} 
if ($password == ""){ 
$c = false; 

} else { 
$c = true; 

} 




if ($a && $b && $c){ 
echo ($gamev.":".$ticket.":".$user.":".$sessid); 
} 
elseif(!$a){ 
echo "Old Version"; 
} 
elseif(!$b){ 
echo "Bad Login"; 
} 
elseif(!$c){ 
echo "Bad Login"; 
} 

?> 
+3

拜託,做一些調試... – 2012-02-21 20:02:06

+1

$ B = '真';第一錯誤 – 2012-02-21 20:02:31

+3

我會說你應該改變你的頭銜,以便更具描述性,但是可以描述這一點? – itsmequinn 2012-02-21 20:06:18

回答

0

您已設置$afalse它返回布爾false

當您檢查$ a是否不等於true時,它始終不會返回true,因爲$a永遠不會設置爲true。這是因爲$version = "";$launcherv = "13";這樣就不會成立,它會跳到其他設置$a再次變爲false的else。

在另一個問題,當你被告知你能做到這一點,他們告訴你,你可以設置$a$version >= $launcherv其中,如果評估將返回取決於該陳述是否爲真或假的真或假。雖然之後,他們說...

短變量可能會混淆未來的讀者。因此,你應該寫:

if ($version >= $launcherv) { 
+0

我改變它之前,我發佈它,只是一箇舊版本 – user1116644 2012-02-21 21:05:34

2
if ($version == $launcherv){ 
    $a = true; 
} else { 
    $a = false; 
} 

好了,$version = "";$launcherv = "13";,使$a = false

if ($a && $b && $c){ 
    echo ($gamev.":".$ticket.":".$user.":".$sessid); 
} 
elseif(!$a){ 
    echo "Old Version"; 
} 

因爲$a = false,這是不言而喻的elseif,其計算結果爲真(!false == true)和echo "Old Version";運行。

+0

我通過paramater s在網址,使它13 – user1116644 2012-02-21 21:04:54

+0

你在做'$ version = $ _GET ['版本'];'隨時隨地? – Josh 2012-02-21 21:09:03

0

所以,從鏈路判斷你在上面發表的評論:

rerepo.tk/mcv.php?user=test&password=test&version=13 

我看到你通過URL中使用了register_globals

試圖變量傳遞這裏的問題是,雖然您最初從url傳入變量,您將腳本中這些變量的值重新定義爲代碼中的「」。所以最初,它是例如

$version = 13 

從您的網址分配,但你叫

$version = "" 

在此之後改寫你的URL指定什麼$版本,因爲它是事後運行。因此,您的版本值始終爲「」,導致您的腳本不斷獲得$ a的值爲false,這已由Josh詳細解釋過。

所以基本上,要解決這個問題,所有你需要做的就是刪除您的這部分代碼:

$user =  ""; 
$password = ""; 
$version = ""; 

我測試這是我自己的電腦上,和它的工作。但是,如果這不能解決您的問題,則很可能在您的服務器上關閉了「register_globals」。

編輯:如果您現在正在使用$ _ POST傳遞變量,然後指定你的變量如下:

$user =  $_POST["user"]; 
$password = $_POST["password"]; 
$version = $_POST["version"]; 

這是假設您發佈的變量命名方式一樣,當你它是否通過了URL。

+0

我現在使用$ _POST – user1116644 2012-02-21 21:06:02

+0

你還有問題嗎?如果你是,你能否更新代碼來反映? – MysticXG 2012-02-21 21:08:03

相關問題