PHP处理表单多选下拉框值替换HTML邮件模板仅显示单条数据问题问询
问题根因
你当前的循环写法存在逻辑错误:第一次遍历商品数组时,就已经把模板中的{{list}}占位符替换成了第一个商品的内容,替换后模板内就不存在该占位符了,后续遍历的替换操作都会失效,最终只会保留最后一次遍历替换的单个商品内容。
修复方案
你需要先把所有选中的商品拼接成一个完整的字符串,再一次性替换模板的占位符即可,把你原有代码中处理{{list}}的整段foreach循环替换为以下代码:
// 判空避免用户未选商品时报错 $products = isset($_POST["product"]) ? $_POST["product"] : []; $productList = ''; foreach ($products as $product) { // 转义特殊字符,避免破坏邮件HTML结构,同时防范XSS风险 $productList .= htmlspecialchars($product) . "<br>"; } // 一次性替换占位符 $html = str_replace("{{list}}", $productList, $html);
如果你想要更简洁的写法,也可以直接用implode函数实现数组拼接,效果完全一致:
$products = isset($_POST["product"]) ? $_POST["product"] : []; $productList = implode("<br>", array_map('htmlspecialchars', $products)); $html = str_replace("{{list}}", $productList, $html);
内容的提问来源于stack exchange,提问作者ginger279
相关产品推荐
相关产品推荐

