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

PHP联系表单多选下拉数组$_POST接收及邮件发送方法

PHP处理多选表单字段并拼接至邮件正文的实现方法

你的前端表单里多选下拉框的name属性已经加了[]后缀,这部分配置是正确的——表单提交后,PHP会自动将用户选中的多个值组装为数组存入$_POST对应键下,之前无法正常处理是因为直接把数组当字符串拼接,会触发PHP的数组到字符串转换报错,按下面的步骤处理即可:

1. 多值字段的接收与格式化

所有带[]后缀的表单字段,提交后在$_POST中都是数组类型,必须先做存在性判断、安全过滤,再拼接为可放入邮件正文的字符串,参考代码如下:

// 先组装单值字段内容,所有用户输入必须做转义过滤,避免注入风险
$mailContent = "=== 联系表单提交信息 ===\r\n";
$mailContent .= "姓名:" . htmlspecialchars(trim($_POST['name'] ?? '')) . "\r\n";
$mailContent .= "姓氏:" . htmlspecialchars(trim($_POST['surname'] ?? '')) . "\r\n";
$mailContent .= "联系电话:" . htmlspecialchars(trim($_POST['phone'] ?? '')) . "\r\n";

// 处理一级分类多选
$firstLevelVal = "未选中任何选项";
if (!empty($_POST['first_level']) && is_array($_POST['first_level'])) {
    // 遍历数组逐个过滤输入
    $filteredFirst = array_map(fn($item) => htmlspecialchars(trim($item)), $_POST['first_level']);
    // 用顿号拼接为字符串,可根据需求换成分隔符(逗号、换行等)
    $firstLevelVal = implode("、", $filteredFirst);
}
$mailContent .= "一级分类:" . $firstLevelVal . "\r\n";

// 二级、三级分类处理逻辑完全一致
$secondLevelVal = "未选中任何选项";
if (!empty($_POST['second_level']) && is_array($_POST['second_level'])) {
    $filteredSecond = array_map(fn($item) => htmlspecialchars(trim($item)), $_POST['second_level']);
    $secondLevelVal = implode("、", $filteredSecond);
}
$mailContent .= "二级分类:" . $secondLevelVal . "\r\n";

$thirdLevelVal = "未选中任何选项";
if (!empty($_POST['third_level']) && is_array($_POST['third_level'])) {
    $filteredThird = array_map(fn($item) => htmlspecialchars(trim($item)), $_POST['third_level']);
    $thirdLevelVal = implode("、", $filteredThird);
}
$mailContent .= "三级分类:" . $thirdLevelVal . "\r\n";

2. 关键注意事项

  • 空值判断必须做:如果用户没有选中任何多选选项,$_POST中不会存在对应键,直接取值会报PHP Undefined array key 警告,上面代码用??空合并运算符、is_array判断就是为了规避这个问题。
  • 安全过滤不能省:不管是单值还是多值字段,所有用户提交的内容都必须做转义,直接拼接原始输入会存在邮件头注入、XSS等风险。如果需要把提交的分类ID转换成对应分类名称,可在拿到过滤后的ID数组后,查询数据库映射为名称再拼接,不要直接把无意义的ID发给收件人。
  • 格式适配:如果发送的是HTML格式邮件,把正文里的换行符\r\n替换为<br>标签即可,多选内容也可以拼接为<ul><li>选项1</li><li>选项2</li></ul>的列表格式,可读性更好。
  • 表单里的附件上传字段存在$_FILES全局变量里,不要和$_POST的普通字段逻辑混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:42:17