2016-06-07 5 views
0

Ich habe ein Skript (index.php), um eine Liste aller hinzugefügten Dateien von "Datei durchsuchen" zu erstellen. Und ich habe ein Skript (process.php), um alle Dateien auf der Liste per E-Mail mit phpmailer zu senden.Wie posten Sie alle Dateien in der Liste? | Jquery - PHP

Mein Problem ist, nur Datei (en) beim letzten Klick, der gesendet wurde. Datei (en), die zuvor nicht gesendet wurden.

index.php Skript

<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 Skript

<?php 
require 'mail/PHPMailerAutoload.php'; 

$to = '[email protected]'; 
$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>'; 
} 
} 
?> 

Antwort

0

Angenommen, Sie haben Erfolg mehr Input-Tag für die Upload-Datei zu erstellen. (Mit Jquery)

Und auf der PHP-Seite:

// 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]; 

OR:

$total = count($_FILES['upload']['name']); 

// Loop through all files 
for($i = 0; $i < $total; $i++) { 
    $_FILES['files']['name'][$i]; 
    //do what you want 
} 
+0

Vielen Dank für Ihre Antwort, werde ich es zuerst versuchen :) – Zhumpex

+0

Wenn ich zwei aufeinanderfolgende Dateien auswählen, nur $ insgesamt einen Wert (eine Datei, nicht zwei Dateien) geben – Zhumpex

+0

Oh, Sie brauchen multiple input tag – weigreen

0

Ihre aktuellen Code ist unsicher. Lesen Sie the PHP docs on handling file uploads.

Sie können mehrere Dateien mit einem einzigen Dateieingabe-Tag anhängen, wenn Sie ein multiple-Attribut darauf setzen;

<input name="userfile[]" type="file" multiple="multiple"> 

Das ‚send_multiple_file_upload` Beispiel mit PHPMailer versehen behandelt dies richtig. Der inportant Teil ist:

//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; 
    } 
} 
+0

Danke für Ihre Antwort und Vorschlag bro :). Eigentlich habe ich mehrere Attribute am Input-Tag hinzugefügt. Aber ich möchte, dass Benutzer Dateien kontinuierlich mit einem Eingabe-Tag (Typ = Datei) hinzufügen können. Ist das möglich? – Zhumpex

+0

Ich weiß nicht, was Sie unter "fortlaufend" verstehen - meinen Sie, dass Sie Dateien hinzufügen können, während ein Upload bereits läuft? Um dies zu tun, würde ein JS-gesteuerter Ansatz erforderlich sein, der mit reinem HTML nicht möglich ist. – Synchro

+0

Was ich meine, ist das Hochladen von Datei (en) wie Anhang in Google Mail. So kann der Benutzer Dateien kontinuierlich aus verschiedenen Ordnern auf dem lokalen Computer hinzufügen. Zuerst werden die Datei (en), die in der Liste enthalten sind, und dann die Datei (en) gleichzeitig verarbeitet. – Zhumpex

Verwandte Themen