2016-10-04 116 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或其他。谢谢!我应该早点问这个问题,而不是花费几个小时。大声笑! –