2016-10-04 114 views
1

我有編碼爲複選框的數組:PHP條件語句跳過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 &amp; CASCADE" /> 
</form> 

其中這些複選框的檢查下面的代碼檢查。然後通過檢查分解的複選框值,它將相應的電子郵件地址添加到$toList陣列。

$checkbox = $_POST['checkbox']; 
$checkboximploded = implode($checkbox); 
$toList = array(
    '[email protected]' => 'First Email', 
    '[email protected]' => 'Second Email', 
); 

if(!empty($_POST['checkbox'])) { 
    foreach ($checkbox as $value) { 

      if (preg_match('/EMEA/',$checkboximploded)) { 
       $toList["[email protected]"] = "Third Email"; 
       $toList["[email protected]"] = "Fourth Email"; 
      } 
      elseif (preg_match('/NAM/',$checkboximploded)) { 
       $toList["[email protected]"] = "Fifth Email"; 
       $toList["[email protected]"] = "Sixth Email"; 
     } 
} 
      foreach($toList as $email => $name) { 
       $mail->AddAddress($email, $name); 
      } 

只有當其中一個複選框被選中時,代碼才能正常工作。問題是,如果兩者都被選中,它只會添加在第一條if語句中找到的電子郵件地址,並且不會繼續到elseif語句。我想要發生的是如果所有2個複選框都被選中,它應該將所有4個電子郵件地址添加到現有的$toList陣列中。

我已經花了8個小時解決問題,但無法找到正確的解決方案。請告知爲什麼它似乎跳過elseif聲明。

回答

1

或者:

  • 更改您的elseifif(和擺脫循環),或
  • 更改preg_match對證$value

這裏的原因。如果兩個複選框都打勾,則$_POST['checkbox']array ('EMEA', 'NAM'),因此$checkboximploded"EMEANAM",它與if以及elseif的正則表達式匹配。但由於if至上,if勝,不管事實,你遍歷$checkbox.

此外,preg_match可能是矯枉過正:strpos就足以在這種情況下。

1

因爲你的其他如果就是這樣:一個else if(意思是:只檢查第二個條件,如果第一個不滿足)。

如果你想這是一個正常的,如果(放棄else)你會告訴程序檢查兩個條件獨立彼此,這是你想要的基礎上你的描述。

2

更改ELSEIF一個簡單的IF 從這個...

elseif (preg_match('/NAM/',$checkboximploded)) { 

要這個......

if (preg_match('/NAM/',$checkboximploded)) { 
+0

什麼一個非常簡單的解決方案。如果你已經使用過它,我從來不知道你可以使用另一個。我認爲「如果」應該總是由elseif或其他。謝謝!我應該早點問這個問題,而不是花費幾個小時。大聲笑! –