簡體   English   中英

如何發布列表中的所有文件? | jQuery-PHP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM