[英]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 & 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)) {
因为你的 else if 正是这样:一个 else if(意思是:如果第一个条件不满足,只检查第二个条件)。
如果你想让它成为一个正常的 if(去掉 else),你会告诉程序检查彼此独立的两个条件,根据你的描述,这是你想要的。
任何一个:
elseif
更改为if
(并摆脱循环),或preg_match
以检查$value
这是为什么。 如果两个复选框都被勾选,则$_POST['checkbox']
是array ('EMEA', 'NAM')
,因此$checkboximploded
是"EMEANAM"
,它匹配if
和elseif
的正则表达式。 但是由于if
是第一位的, if
获胜,无论您是否在$checkbox.
迭代$checkbox.
此外, preg_match
可能strpos
矫枉过正:在这种情况下strpos
就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.