我正在使用以下循环向我的电子邮件发送/附加多个附件。
foreach(array_keys($_FILES['attachment']['name']) as $key) {
$source = $_FILES['attachment']['tmp_name'][$key];
$filename = $_FILES['attachment']['name'][$key]; // original filename from the client
$mail->AddAttachment($source, $filename);
}
但只有我制作的第一个附件被发送了。
表单代码为
<form method="POST" action="<?php $PHP_SELF ?>" enctype="multipart/form-data">
<input type="file" name="attachment[]" id="attachment" size="30"
onchange="document.getElementById('moreUploadsLink').style.display = 'block';" />
<div id="moreUploads"></div>
<div id="moreUploadsLink" style="display:none;">
<a href="javascript:addFileInput();">Attach another File</a></div>
<input name="submit" type="submit" value="submit" />
</form>
当点击Attach another file(附加另一个文件)时,会通过JavaScript函数显示另一个file Upload(文件上传)按钮:
<script type="text/javascript">
var upload_number = 1;
var attachmentlimit = 5;
function addFileInput() {
var d = document.createElement("div");
var file = document.createElement("input");
file.setAttribute("type", "file");
file.setAttribute("name", "attachment"+upload_number);
d.appendChild(file);
document.getElementById("moreUploads").appendChild(d);
upload_number++;
if(upload_number == attachmentlimit) {
document.getElementById('moreUploadsLink').style.display='none';
}
}
</script>
只有通过第一个FileUpload按钮附加的文件才被附加和发送,而不是其他文件。帮助
问题是您将新input
元素的name
属性设置为attachment1
、attachment2
等。您应该将此名称设置为attachment[]
,就像您创建的原始input
一样。
如果你仍然没有得到所有的附件,你可以在你的PHP脚本中尝试var_dump($_FILES)
,以确保你以你期望的方式得到所有的文件。