You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHPmailer邮件正文中显示复选框输入内容问题求助

解决PHPmailer中复选框数组显示为"Array"的问题

这个问题我之前也碰到过,其实核心原因很简单:HTML里的复选框如果是多选配置(name带[],比如name="lenses[]"),提交到PHP后会变成数组类型,而直接把数组变量拼到邮件内容里时,PHP会自动将其转换为字符串Array,所以你看不到具体的选项内容。下面给你几种实用的解决方案:

1. 转成逗号分隔的字符串(最常用)

用PHP的implode()函数把数组元素拼接成普通文本,比如把["日抛", "月抛"]变成"日抛, 月抛",代码示例:

// 先判断复选框是否被勾选,避免未选时报错
$selectedLenses = isset($_POST['lenses']) ? implode(', ', $_POST['lenses']) : '未选择任何镜片类型';

// 然后把变量放到邮件内容里
$mail->Body = "您选择的一次性隐形眼镜类型:" . $selectedLenses;

2. 转成HTML列表(适合HTML格式邮件)

如果你的邮件是HTML格式(PHPmailer默认支持),可以把数组转成带项目符号的列表,看起来更清晰:

if (isset($_POST['lenses']) && is_array($_POST['lenses'])) {
    // 把每个选项包裹成<li>标签
    $lensList = '<li>' . implode('</li><li>', $_POST['lenses']) . '</li>';
    $lensContent = "<ul>$lensList</ul>";
} else {
    $lensContent = '<p>未选择任何镜片类型</p>';
}

// 插入到HTML邮件正文中
$mail->isHTML(true); // 开启HTML邮件模式
$mail->Body = "您选择的一次性隐形眼镜类型:<br>$lensContent";

3. 循环遍历输出(灵活自定义格式)

如果需要更个性化的格式,比如每个选项单独一行,可以用foreach循环遍历数组:

$lensContent = '';
if (isset($_POST['lenses']) && is_array($_POST['lenses'])) {
    foreach ($_POST['lenses'] as $lens) {
        $lensContent .= "- $lens\n"; // 文本格式用换行,HTML格式用<br>
    }
} else {
    $lensContent = "- 未选择任何镜片类型\n";
}

$mail->Body = "您选择的一次性隐形眼镜类型:\n$lensContent";

关键注意事项

  • 确保HTML复选框的name属性是数组形式,比如<input type="checkbox" name="lenses[]" value="日抛">,否则PHP只会收到最后一个勾选的选项,而不是数组。
  • 一定要先判断$_POST['lenses']是否存在且是数组,避免用户未勾选任何选项时出现Undefined index或非数组操作的错误。

内容的提问来源于stack exchange,提问作者iceiceicy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:37:37