[英]How to post all file in the list? | Jquery - PHP
我有一個腳本(index.php),可通過“瀏覽文件”按鈕創建所有已添加文件的列表。 我有一個腳本(process.php)將列表中的所有文件發送到phpmailer電子郵件中。
我的問題是,僅在最后一次發送的文件上發送了文件。 先前已添加的文件未發送。
index.php腳本
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>
<body>
<form id="data" action="process.php" method="POST" enctype="multipart/form-data">
<input id="file" type="file" name="files[]" multiple="multiple"/>
<div id="output"><ul></ul></div>
<input type="submit" name="submit" value="OK">
</form>
</body>
<script>
$("#file").change(function() {
var ele = document.getElementById($(this).attr('id'));
var result = ele.files;
for(var x = 0; x < result.length; x++){
var file = result[x];
$("#output ul").append("<li>" + file.name + "</li>");
}
});
</script>
</html>
process.php腳本
<?php
require 'mail/PHPMailerAutoload.php';
$to = 'destination@email.com';
$subject = 'Test';
if(isset($_POST['submit'])){
$attachment_name = $_FILES['files']['name'];
$attachment_type = $_FILES['files']['type'];
$attachment = $_FILES['files']['tmp_name'];
include 'smtp.php';
$mail->addAddress($to);
$mail->Subject = $subject;
$mail->msgHTML('Tes');
foreach($attachment_name as $key => $att){
$nama_file = $attachment_name[$key];
$tmp_file = $attachment[$key];
$mail->addAttachment($tmp_file, $nama_file);
}
if (!$mail->send()) {
echo '<script>alert("Fail"); </script>';
} else {
echo '<script>alert("Success"); </script>';
}
}
?>
假設您成功創建了用於上傳文件的多個輸入標簽。 (使用jQuery)
在php端:
// first file
$_FILES['files']['name'][0];
$_FILES['files']['type'][0];
$_FILES['files']['tmp_name'][0];
// second file
$_FILES['files']['name'][1];
$_FILES['files']['type'][1];
$_FILES['files']['tmp_name'][1];
要么:
$total = count($_FILES['upload']['name']);
// Loop through all files
for($i = 0; $i < $total; $i++) {
$_FILES['files']['name'][$i];
//do what you want
}
您當前的代碼不安全 。 閱讀有關處理文件上傳的PHP文檔 。
如果您在一個文件輸入標簽上設置了multiple
屬性,則可以使用一個文件輸入標簽附加多個文件,例如:
<input name="userfile[]" type="file" multiple="multiple">
PHPMailer提供的'send_multiple_file_upload'示例可以正確處理此問題。 重要的部分是:
//Attach multiple files one by one
for ($ct = 0; $ct < count($_FILES['userfile']['tmp_name']); $ct++) {
$uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['userfile']['name'][$ct]));
$filename = $_FILES['userfile']['name'][$ct];
if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) {
$mail->addAttachment($uploadfile, $filename);
} else {
$msg .= 'Failed to move file to ' . $uploadfile;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.