PHP条件语句跳过了elseif


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 &amp; 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)) {

  • elseif更改为if(并去掉循环),或者
  • 更改preg_match以检查$value

这是为什么。如果两个复选框都被选中,则$_POST['checkbox']array ('EMEA', 'NAM'),因此$checkboximploded"EMEANAM",它匹配ifelseif的正则表达式。但由于if优先,if胜出,不管你是在$checkbox.上迭代

同样,preg_match也可能过于夸张:在这种情况下,strpos就足够了。

因为你的else if就是一个else if(意思是:如果第一个条件不满足,只检查第二个条件)。

如果您将其设置为正常的If(去掉else),您将告诉程序检查独立于的两个条件,这是根据您的描述所希望的。