[英]PHP Conditional Statement skips elseif
我有一組復選框編碼為:
<form action="CascadeFunction.php" method="post" name="cascader" id="cascader">
<input name="checkbox[]" type="checkbox" value="EMEA" /><label for="EMEA">EMEA</label><br />
<input name="checkbox[]" type="checkbox" value="NAM" /><label for="NAM">NAM</label><br />
<input class="btn btn-primary" name="Submit" type="submit" id="submit" value="POST & CASCADE" />
</form>
以下代碼檢查哪些復選框被選中。 然后通過檢查內爆復選框值,將相應的電子郵件地址添加到$toList
數組中。
$checkbox = $_POST['checkbox'];
$checkboximploded = implode($checkbox);
$toList = array(
'firstemail@email.com' => 'First Email',
'secondemail@email.com' => 'Second Email',
);
if(!empty($_POST['checkbox'])) {
foreach ($checkbox as $value) {
if (preg_match('/EMEA/',$checkboximploded)) {
$toList["thirdemail@email.com"] = "Third Email";
$toList["fourthemail@email.com"] = "Fourth Email";
}
elseif (preg_match('/NAM/',$checkboximploded)) {
$toList["fifthemail@email.com"] = "Fifth Email";
$toList["sixthemail@email.com"] = "Sixth Email";
}
}
foreach($toList as $email => $name) {
$mail->AddAddress($email, $name);
}
僅當檢查其中一個復選框時,代碼才能完美地工作。 問題是,如果兩者都被選中,它只會添加在第一個if
語句中找到的電子郵件地址,而不會繼續添加到elseif
語句中。 我想要發生的是如果所有 2 個復選框都被選中,它應該將所有 4 個電子郵件地址添加到現有的$toList
數組中。
我已經花了 8 個小時解決這個問題,但找不到正確的解決方案。 請告知為什么它似乎正在跳過elseif
語句。
將 elseif 更改為簡單的 IF 從此...
elseif (preg_match('/NAM/',$checkboximploded)) {
對此...
if (preg_match('/NAM/',$checkboximploded)) {
因為你的 else if 正是這樣:一個 else if(意思是:如果第一個條件不滿足,只檢查第二個條件)。
如果你想讓它成為一個正常的 if(去掉 else),你會告訴程序檢查彼此獨立的兩個條件,根據你的描述,這是你想要的。
任何一個:
elseif
更改為if
(並擺脫循環),或preg_match
以檢查$value
這是為什么。 如果兩個復選框都被勾選,則$_POST['checkbox']
是array ('EMEA', 'NAM')
,因此$checkboximploded
是"EMEANAM"
,它匹配if
和elseif
的正則表達式。 但是由於if
是第一位的, if
獲勝,無論您是否在$checkbox.
迭代$checkbox.
此外, preg_match
可能strpos
矯枉過正:在這種情況下strpos
就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.