2012-12-23 84 views
0

嗨,有人能幫助我在我的條件語句中做了什麼錯誤。PHP條件語句

if(isset($_GET['input'] or $_GET['input2'] or $_GET['input3'])) 
{ 
    $release=$_GET['input'].$_GET['input2'].$_GET['input3']; 
    echo $release; 
} 

編輯:誤差syntax error, unexpected T_LOGICAL_OR, expecting ',' or ')'

+0

這個條件應該檢查​​什麼? – MarcinJuraszek

+0

檢查是否設置了輸入,然後將它們放入變量並回顯。通常所有輸入都有值/具有默認值。 –

回答

5

你需要多次調用isset,一個是要檢查每個參數!

請記住,or||有不同的優先順序,您通常需要後者。

由於您將複合表達式傳遞到isset而不是變量,因此會出現分析錯誤。這不是一個普通的功能,但它是一個單獨的語言結構爲什麼它具有通過文檔指出了自己的任意規則:

isset() only works with variables as passing anything else will result in a parse error.


也許你認爲PHP模擬自然的語言,所以你讀它作爲"Is input or input2 or input3 set?"

這將是一個誤解。 如果它是有效的語法,它會在邏輯上OR值一起在第一,然後它會傳遞一個值isset —到那個時候,你的變量的所有連接丟失和被留下的唯一的事情就是或者truefalse然後將應用isset

+0

什麼?不,你不知道。曾聽說過一個循環? – Kush

+1

@ Kush這是愚蠢的使用循環,但當然,在技術上你可以。 – phant0m

4
if(isset($_GET['input']) || isset($_GET['input2']) || isset($_GET['input3'])) 

但我其實認爲你需要在這裏,而不是OR,所以改變||到& &如果我是正確的。

+0

我也相信他打算使用AND –

3

您必須分別爲每個參數調用issetisset()接受單一參數並作出相應響應。

有關更多詳細信息,請檢查isset

獎金提示: 如果您使用的是數據庫查詢這些變量,你必須使用mysqli_real_escape_string(),以避免可能的SQL注入

+1

「此擴展從PHP 5.5.0開始已棄用」。爲什麼不把他連接到PDO!? – Kush

+2

啊,避免注入永遠存在的投票人!沒有人談論數據庫,所以這只是一個隨機的建議。哦,他也應該知道XSS注入和CSRF,因爲我們在它 –

+0

@庫什我認爲這個人將能夠閱讀更多的頁面上。無論如何,我已更新鏈接 –

2

這將解決您的錯誤:

if(isset($_GET['input']) or isset($_GET['input2']) or isset($_GET['input3'])) 
{ 
    $release=$_GET['input'].$_GET['input2'].$_GET['input3']; 
    echo $release; 
} 

但是,因爲你」重新測試OR而不是AND,所有你需要的是那些OR測試中的一個返回到真正的if條件 - 如果其他2個未被設置,你仍然會發出通知/錯誤。

要檢查所有的三個存在,你會做這樣的事情

if (isset($_GET['input']) && isset($_GET['input2']) && isset($_GET['input3'])) { 
    //... 
} 

這可能真的你想達到不凌亂考什麼:

// count will return however many key=>val pairs are in the array, 
// 0 will fail 
if (count($_GET)) { 
    // an empty array and an empty string to hold iterated results 
    $get = array(); 
    $release = ''; 
    // iterate through $_GET and append each key=>val pair to the local array, 
    // then concat onto the string 
    foreach($_GET as $key=>$val) { 
     $get[$key] = $val; 
     $release .= $get[$key]; 
    } 
    echo $release; 
} 

HTH :)


編輯:正如其他人指出的,如果您需要測試以確保所有這些數組鍵都設置,跳過foreach循環,只是這樣做:

// extract imports all of the array keys into the symbol table. 
// It returns the number of symbls imported, and automatically 
// sets vars using keys for var name: 
if (extract($_GET) && isset($input,$input2,$input3)) { 
    echo $release = $input.$input2.$input3; 
} 

(使用多個參數傳遞給isset)

  • HTH :)
3

目前所有的這個問題的答案錯過的一個重要特徵isset:它可以同時檢查多個變量。從the manual

If multiple parameters are supplied then isset() will return TRUE only if all of the parameters are set. Evaluation goes from left to right and stops as soon as an unset variable is encountered.

所以在這種情況下,你可以做這樣的事情:

if (isset($_GET['input'], $_GET['input2'], $_GET['input3'])) { 

如果所有_GET元素設置該條件將只通過。