2012-07-07 107 views
0

我想根據提交的表單的內容定義一個變量,針對MySQL數據庫進行檢查,但preg_match和$變量匹配不會一起工作。 他們獨立工作,但不在一起。PHP elseif或語句不起作用

我已經打印出每個步驟中的每個變量,並證明提交,比較和檢索的數據始終存在,但在比較ifelse語句中的兩個變量時無法定義變量:elseif(!pret_match(「/ bt/i 「,$ zip)或$ country!=='Ireland')

過程如下: 表單提交 - >比較變量與數據庫 - >輸出變量取決於數據庫比較。

樣的形式提交(例子):

FBID(12345678901)

城市(貝爾法斯特)

國家(英國)

拉鍊(BT1 1DS)

這是(減少)代碼導致問題:

$country = $location['country']; //good value: Ireland/bad value: Italy(or empty) 
    $zip = $location['zip']; //good value: BT1 1DS/bad value: 00(or empty) 

    if ($fbid == $id) { //this works 
    $confirmpage = '<h3>Sorry, this page is already in the table.</h3>'; 
    } elseif (!preg_match("/bt/i",$zip) or $country !== 'Ireland') { //confirm location 
    $confirmpage = '<h3>This page is not in Northern or Southern Ireland</h3>'; 
    } else { //success, page can be submitted 
    $confirmpage = '<h3>Confirm Page</h3>'; 
    } 

的代碼不工作是:

 elseif (!preg_match("/bt/i",$zip) or $country !== 'Ireland') 

當我刪除這條語句的腳本的其餘部分工作正常。 如果選項1是負面的,有了這個說法,結果總是選擇2,即使提交的表單包括BT在zip或愛爾蘭因爲該國的開始:

$confirmpage = '<h3>This page is not in Northern or Southern Ireland</h3>'; 
+2

運算符'具有或'不一樣的[優先](http://php.net/ language.operators.precedence)爲'||'。改用'||'代替。 – Gumbo 2012-07-07 17:22:25

+0

@Gumbo:從鏈接頁面可以看到,'or'和'||'的優先級低於'!==',所以這裏沒關係。 – oxc 2012-07-07 21:35:13

+0

你的問題並不清楚預期的結果是什麼。如果'bt'不在拉鍊中,或者他們沒有選擇愛爾蘭作爲國家,我們認爲你的條件可以翻譯爲「顯示'此頁面不在北部或南部愛爾蘭'',我認爲你的邏輯倒退了,並且這兩個都應該是正數? – ernie 2012-07-12 16:22:28

回答

0

嘗試

elseif (preg_match("/bt/i",$zip) == 1 || $country != 'Ireland') 
+1

'preg_match'實際上返回匹配數(0或1) 當然,你可以匹配0 == false,但是實際上並不需要,並且'preg_match'如果發生錯誤,返回'false'(無效模式等),你真的應該只使用'==='比較它'false',以避免混淆。 – oxc 2012-07-07 21:36:36

+0

感謝你的支持。愛爾蘭條目輸出正確,但正確的郵政編碼返回一個壞條目。 – 2012-07-08 17:11:53

+0

那麼呢? – maxhud 2012-07-08 18:13:23

0

我創建了一個基本的PHP頁面代碼並複製到您的代碼中 - 然後將$ country和$ zip手動設置爲好或不好的值 - 它按預期方式工作,因此表明它與preg_match沒有問題。

0

通過更改檢查的執行方式來排序。 相反的:如果「條件」或「條件2」,我用ifelse檢查postives:

$confirmpage = '<h3>This page is not in Northern or Southern Ireland</h3>'; 
    if ($fbid == $id) { 
$confirmpage = '<h3>Sorry, this page is already in the table.</h3>'; 
} elseif (preg_match("/bt/i",$zip)) { //BT post code present 
$confirmpage = $confirm; 
} elseif ($country == 'Ireland') { // //Ireland present 
$confirmpage = $confirm; 
} else { //confirm page 
$confirmpage = '<h3>This page is not in Northern or Southern Ireland</h3>';