2014-07-17 57 views
-4

我有這個PHP代碼,並試圖從URL參數中獲取變量language的值,當指定的鏈接被點擊。

我該怎麼做?下面的代碼僅在第一個語句中獲得值Java,而不是elseif語句中的值。

if (isset($_GET['language'])) { 

    if ($_GET['language'] = 'Java') { 
     $q = 'title:(Java+Developer)'; 
    } 
    elseif ($_GET['language'] = 'PHP') { 
     $q = 'title:(PHP+Developer)'; 
    } 
    elseif ($_GET['language'] = 'JavaScript') { 
     $q = 'title:(JavaScript+Developer)'; 
    } 
} 

鏈接:

 <li><a href="programming/?language=Java">Java</a></li> 
     <li><a href="programming/?language=PHP">PHP</a></li> 
     <li><a href="programming/?language=JavaScript">JavaScript</a></li> 
+1

它不是'$ _GET ['language'] ='Java''。它應該是'$ _GET ['language'] =='Java'' – nightgaunt

+0

它的'=='用於比較 – DarkBee

+0

你是對的!我的錯!感謝您的幫助。 – Mike

回答

3

===之間的差異。一個是分配,另一個是比較。

在您的第一個if()聲明中,您將值Java指定爲$_GET['language'],該值將評估爲Java。這將是真實的。

將比較中的單個=更改爲==,您應該全部設置。

+0

用於評估爲真的使得if有效 – DarkBee

-2

您應該使用==,而不是=

+0

最好對你的答案加一些解釋。 – FallenAngel

+0

是的。誠然。 –

1

您正在使用一個等號。這是一項任務(與您在定義變量時一樣)。您需要使用雙等號==。這就是你如何測試平等。

$_GET['language'] == SOME_STRING 

此外,我會建議使用switch statement而不是多個if聲明:

if (isset($_GET[ 'language' ])) { 
    switch($_GET[ 'language' ]){ 
    case "Java": 
     $q = 'title:(Java+Developer)'; 
    break; 
    case "PHP": 
     $q = 'title:(PHP+Developer)'; 
    break; 
    case "JavaScript": 
     $q = 'title:(JavaScript+Developer)'; 
    break; 
    } 
} 

使用switch聲明將使該代碼更易於維護,也增加額外的條件(其它語言)。

+1

使用「===」來檢查正在接收的數據類型還是僅僅傳遞字符串會更好? – MixedVeg

+0

@KartikA - 我總是推銷顯式代碼 - 所以使用嚴格的相等運算符將是一個好主意。但是,以我的開關盒爲例,這不是必需的。 – Lix

+0

嘿,對不起,只是看到你的代碼,在你的代碼中,我不認爲是必要的。 – MixedVeg

0

嘗試使用此代碼

如果(isset($ _ GET [ '語言'])){

if ($_GET['language'] == 'Java') { 
    $q = 'title:(Java+Developer)'; 
    } 
    elseif ($_GET['language'] == 'PHP') { 
    $q = 'title:(PHP+Developer)'; 
    } 
    elseif ($_GET['language'] == 'JavaScript') { 
    $q = 'title:(JavaScript+Developer)'; 
    } 
} 
0

你是$_GET["language"]它總是返回真值分配Java。您必須將$_GET["language"]的值與字符串進行比較。使用=====運算符進行比較。

if ($_GET["language"] === "Java") { 
    /* here be dragons */ 
} 

使用Yoda Conditions來捕捉這種錯誤也是很好的習慣。

if ("Java" === $_GET["language"]) { 
    /* here be dragons */ 
} 
0

您正在使用「=」這是用於分配變量的某個值。 看看這些使用:

  1. 「=」用於爲某個變量賦值。
  2. 「==」用於比較(不管數據類型如何)。例如,如果

是$ var = 1,我們評估的條件

如果(是$ var == TRUE)

其結果將是BOOL TRUE,因爲TRUE爲1和FALSE總是0。

3. 「===」基於數據類型的比較也。由於數據類型不同,上述條件將評估爲Bool False。