我有一个数组的复选框编码为:
<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
语句。
将elseif改为简单IF从这个…
elseif (preg_match('/NAM/',$checkboximploded)) {
这个… if (preg_match('/NAM/',$checkboximploded)) {
- 将
elseif
更改为if
(并去掉循环),或者 - 更改
preg_match
以检查$value
这是为什么。如果两个复选框都被选中,则$_POST['checkbox']
为array ('EMEA', 'NAM')
,因此$checkboximploded
为"EMEANAM"
,它匹配if
和elseif
的正则表达式。但由于if
优先,if
胜出,不管你是在$checkbox.
上迭代
同样,preg_match
也可能过于夸张:在这种情况下,strpos
就足够了。
因为你的else if就是一个else if(意思是:如果第一个条件不满足,只检查第二个条件)。
如果您将其设置为正常的If(去掉else),您将告诉程序检查独立于的两个条件,这是根据您的描述所希望的。