我有一个编号为:
的复选框数组<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
声明。
答案 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
就足够了。