2015-03-13 20 views
5

Sto tentando di allegare più immagini negli allegati. Ho usato la ricerca per ogni allegato ma, non avendo il tempname e il nome quando uso foreach, probabilmente sto facendo qualcosa di sbagliato. Di seguito è riportato il codice e gli errori:Aggiunta di più allegati in PHPMailer

HTML ingresso

<input id="upload-file" class="upload-file" type="file" name="upload-file[]">

var_dump di $ _FILES [ 'upload-file']:

array(5) { ["name"]=> array(1) { [0]=> string(47) "WRANGLER_AW13_GIRLONTOP_A4_LANDSCAPE_300dpi.jpg" } ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } ["tmp_name"]=> array(1) { [0]=> string(24) "C:\xampp\tmp\php41DC.tmp" } ["error"]=> array(1) { [0]=> int(0) } ["size"]=> array(1) { [0]=> int(91742) } } 

var_dump per nome e temp_name :

Notice: Undefined index: name in C:\xampp\htdocs\hmg\process-email.php on line 66 

Notice: Undefined index: tmp_name in C:\xampp\htdocs\hmg\process-email.php on line 67 

NULL 
NULL 

CODICE:

foreach($_FILES['upload-file'] as $file) {   

    $name = $file['name']; 
    $path = $file['tmp_name']; 
    var_dump($name); 
    var_dump($path); 

    //And attach it using attachment method of PHPmailer. 

    $mail->addattachment($path,$name); 
} 
+0

sappiate che nessuna delle risposte presentate gestire il caricamento in modo sicuro, come per [la documentazione di PHP] (http://php.net/manual/en/features.file-upload.php). Basa il tuo codice su [gli esempi di caricamento dei file forniti con PHPMailer] (https://github.com/PHPMailer/PHPMailer/blob/master/examples/), che gestiscono i file correttamente. – Synchro

risposta

3

Benvenuti nella parte male del PHP. Lo $_FILES non è quello che uno sviluppatore si aspetterebbe.

//wrong code 
$img1 = $_FILES['upload-file'][0]['tmp_name']; 
$img2 = $_FILES['upload-file'][1]['tmp_name']; 

//working code 
$img1 = $_FILES['upload-file']['tmp_name'][0]; 
$img2 = $_FILES['upload-file']['tmp_name'][1]; 

quindi è necessario qualcosa di simile

$totalFiles = count($_FILES['upload-file']['tmp_name']); 
for ($i = 0; $i < $totalFiles; $i++) { 
    $name = $_FILES['upload-file']['name'][$i]; 
    $path = $_FILES['upload-file']['tmp_name'][$i]; 
    $mail->addattachment($path,$name); 
} 
0
$i = '0'; 
foreach($_FILES['upload-file'] as $file) { 
$name = $file['name'][$i]; 
$path = $file['tmp_name'][$i]; 
var_dump($name); 
var_dump($path); 
$mail->addattachment($path,$name); 
$i++; 
} 
2

grazie per tutte le risposte. Sono sicuro che tutti i tuoi approcci funzionerebbero bene, ma ho deciso di risolverlo da solo. Questo codice ha risolto il problema

$validAttachments = array(); 

foreach($_FILES['upload-file']['name'] as $index => $fileName) { 
    $filePath = $_FILES['upload-file']['tmp_name'][$index]; 
    $validAttachments[] = array($filePath, $fileName);    
} 

foreach($validAttachments as $attachment) { 
    $mail->AddAttachment($attachment[0], $attachment[1]); 
} 

Spero che chi ha lo stesso problema ottiene qualche aiuto da qui ...

0

maggior parte delle soluzioni si basano su forme.

Quindi ho trovato una soluzione semplice se si desidera allegare tutti i file da una directory specifica.

$file_to_attach_directory = 'files/'; 
if ($handle = opendir($file_to_attach_directory)) { 
    try { 
     while (false !== ($entry = readdir($handle))) { 
      $attachment_location = $file_to_attach_directory. $entry; 
      $mail->addAttachment($attachment_location); 
     } 
     closedir($handle); 
     // Send Mail 
     if (!$mail->send()) { 
     echo "Mailer Error: " . $mail->ErrorInfo; 
     } else { 
      echo "Message sent!"; 
     } 
    } catch (Exception $e) { 
     var_dump($e); 
    } 
}