我有一个下拉列表,当用户选择All时,它将向我从数据库中获得的所有收件人发送电子邮件。如果用户选择"其他",将出现一个文本框,用户必须输入电子邮件地址。我想验证用户在"其他"文本框中输入的电子邮件是有效的。我想让用户能够键入多个电子邮件地址,其中以逗号分隔。
这是我的表单:
<tr>
<td>To</td>
<td>:</td>
<td>
<select name="email" id="email" onchange="if(this.value == 'Other') {this.form['Other'].style.visibility='visible'}else{this.form['Other'].style.visibility='hidden'};">
<option value=""></option>
<option value="All">All</option>
<option value="Other">Other</option>
</select>
<?php if(isset($error[ 'email'])) echo $error[ 'email']; ?>
<input type="text" id="Other" name="Other" style="visibility:hidden;" size="46" placeholder="Enter e-mail separated with commas" />
<?php if(isset($error[ 'Other'])) echo $error[ 'Other']; ?>
</td>
</tr>
这是我对电子邮件的验证:
if($_POST['Other'] != "" && (!filter_var($_POST['Other'], FILTER_VALIDATE_EMAIL)))
{
$error['Other'] = "<div class=error>Email entered is not valid.</div>";
}
我使用FILTER_VALIDATE_EMAIL验证电子邮件地址。我的问题是,如果输入一个邮箱地址,没有问题,邮件就会发送,我也收到了。但是如果我输入了多个电子邮件,验证错误消息将提示我输入的电子邮件地址无效。我能知道为什么它只适用于一个电子邮件,而不是多个电子邮件地址?
你需要这样做,
$emails = 'bill@microsoft.com, test.com, obama@usa.gov';
$emails = explode(', ', $email);
$filterd_emails = array();
foreach($emails as $email){
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$error['Other'][] = "<div class=error>$email is not valid Email.</div>";
}else{
$filtere_emails[] = $email
}
}
编辑
现在您已经验证了存储在$filtered_emails
中的所有电子邮件。下面是两个不同的场景。
1)您想要向所有filtered_emails
(通过标准)发送电子邮件,无论有多少通过标准。
//$emails = 'bill@microsoft.com, test.com, obama@usa.gov';
$filtered_emails = array('bill@microsoft.com', 'obama@usa.gov');
您可以使用以下方法,它将跳过test.com
并将电子邮件发送给其他两个
if(count($filtered_emails) > 0)
foreach($filtered_emails as $filtered_email){
//send email here. email($filtered_email);
}
2)如果任何输入的电子邮件没有通过验证,你不想给任何人发送电子邮件。
。test.com
没有通过标准,你根本不想发送电子邮件(给另外两个bill@microsoft.com
和obama@usa.gov
)
在本例中为
if(count($error['other'])>0){
//display error and exit
}
使用PHP的explosion函数将电子邮件字符串转换为数组
然后我们实例化一个PHP数组函数并将其设置为一个空数组
然后使用PHP foreach循环函数
遍历数组然后我们检查每个邮件的有效性PHP filter_var和FILTER_VALIDATE_EMAIL函数使用filter_var(!使用filter_var (bill@microsoft.com, FILTER_VALIDATE_EMAIL))
<?php
$emails = 'bill@microsoft.com, test.com, obama@usa.gov';
$emails = explode(', ', $email);
$filterd_emails = array();
foreach($emails as $email){
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$error['Other'][] = "<div class=error>$email is not valid Email.</div>";
}else{
$filtered_emails[] = $email
}
}
?>