2014-01-24 91 views
2

我將網址上的值傳遞給我網站上的某個頁面。因此,當用戶點擊鏈接時,不同的值將傳遞到新頁面,具體取決於他們點擊的鏈接。我在第二頁使用條件來改變運行的代碼,取決於$ _GET中的值。將等號與多個值之一進行比較

不幸的是,由於我未知的原因,條件似乎不能正常工作。在我使用||的if語句中因爲有多個傳遞的值需要在第二頁上觸發相同的代碼(它們需要命名不同,因爲它們也都觸發唯一代碼)。

它似乎很簡單,我開始:

if($_GET['id']=('x' || 'y' || 'z')) { 
block of code 
}elseif($_GET['id']=('a' || 'b' || 'c')) { 
block of code 
}else{ 
block of code 
} 

我已經打印出$ _GET [「身份證」]的值,以檢查正確的值被從第一頁傳遞給第二個基於點擊的鏈接。這工作正常。我點擊的每個鏈接都會打印預期值。奇怪的是我在第一個條件和第一個條件之上都重複了這些值。它在兩種情況下都會打印,即使它打印的值不應觸發該條件。有任何想法嗎?

+2

嘗試使用'=='而不是'='。 – admdrew

回答

3

您用於檢查$_GET['id']是集合中有效值之一的語法是錯誤的。

我想你的意思更喜歡這樣做的事情:

<?php 
if (in_array($_GET['id'], array('x', 'y', 'z') { 
    /* block 1*/ 
} 
else if (in_array($_GET['id'], array('a', 'b', 'c')) { 
    /* block 2 */ 
} 
else { 
    /* block 3 */ 
} 

上的代碼一些進一步的信息,您寫:

它的傳遞,因爲語法是有效的,但不你想做什麼。

本質上你說 「分配$_GET['id']'a''b',或'c'第一truthy價值。」存在的問題是,所有字符串(除非它們是「0」)都被評估爲true。

此外,單個等於符號(=)將值賦予變量並評估爲true(賦值成功)。因此,您總是將$_GET['id']設置爲('a' || 'b' || 'c')中的第一個字符串。因此,您正在分配$_GET['id'],並且它的計算結果爲true,因此總是滿足第一個條件。

+0

工作,真棒。我不知道這個功能。有意義,因爲它是一個數組。我也曾嘗試將它分配給一個變量$ id,但沒有奏效。如果你不能像這樣訪問數組,爲什麼它將數組分配給一個變量並在mysql查詢中使用它呢? – programmingnewb

+0

您實際上並沒有創建數組,您創建了一個正在評估的表達式('''''''''''c')'將評估爲「a」。老實說,我不確定你在問什麼 –

1
if($_GET['id'] == 'x' || $_GET['id'] == 'y' || $_GET['id'] == 'z') { 
    block of code 
}elseif($_GET['id'] == 'a' || $_GET['id'] == 'b' || $_GET['id'] == 'c') { 
    block of code 
}else{ 
    block of code 
} 
1

我想你也可以使用switch語句。如下所示

$value = 'x'; // $_GET['id'] 
switch($value) { 
    //matches if one or more case is met 
    case 'x': 
    case 'y': 
    case 'z': 
     echo 'i am x, y or z';//here your block code 
     break; 
    //matches if one or more case is met 
    case 'a': 
    case 'b': 
    case 'c': 
     echo 'i am x, y or z';//here your block code 

     break; 

    default: 
     echo 'I have no value'; 
} 
相關問題