PHP Conditional Statement跳过elseif

时间:2016-10-04 18:56:42

标签: php regex if-statement checkbox conditional

我有一个编号为:

的复选框数组
<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声明。

3 个答案:

答案 0 :(得分:2)

将elseif更改为简单的IF 从这......

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

对此...

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

答案 1 :(得分:1)

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

如果您将其设为正常if(删除其他),则会告诉程序彼此检查独立这两个条件,这是您根据描述所需的。

答案 2 :(得分:1)

或者:

  • 将您的elseif更改为if(并摆脱循环),或
  • preg_match更改为$value

这就是原因。如果勾选了两个复选框,则$_POST['checkbox']array ('EMEA', 'NAM'),因此$checkboximploded"EMEANAM",其与if的正则表达式以及elseif匹配{1}}。但是,由于if首先出现,if获胜,无论您是否重复$checkbox.

另外,preg_match可能有点矫枉过正:strpos就足够了。