我想根據提交的表單的內容定義一個變量,針對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>';
運算符'具有或'不一樣的[優先](http://php.net/ language.operators.precedence)爲'||'。改用'||'代替。 – Gumbo 2012-07-07 17:22:25
@Gumbo:從鏈接頁面可以看到,'or'和'||'的優先級低於'!==',所以這裏沒關係。 – oxc 2012-07-07 21:35:13
你的問題並不清楚預期的結果是什麼。如果'bt'不在拉鍊中,或者他們沒有選擇愛爾蘭作爲國家,我們認爲你的條件可以翻譯爲「顯示'此頁面不在北部或南部愛爾蘭'',我認爲你的邏輯倒退了,並且這兩個都應該是正數? – ernie 2012-07-12 16:22:28