2016-08-01 7 views
0

複数のファイル入力が必要なフォームを処理しようとしています(フォームの別の部分で)。私は$ _FILES ['attach']がすべてのファイルを正しく取得することを理解しているので、これと同じ名前(添付)のような各入力を設定しましたか?複数の入力添付ファイルPHP

<input type="file" class="file" name="attach[]" title="" dropzone="copy" multiple="multiple" required></input> 

私はあなたがこれを確認してください可能性があり、多数のソースから一緒にこのPHPを石畳ました。それは送信しないので、明らかに私はどこかでいくつかのエラーを作りました。

(other variables not shown, but sanitized as well) 
$attachments = $_FILES['attach']; 
// email body 
$mes_body = "<html><head></head><body>"; 
// $mes_body .= "<img src='http://www.domain.com/marketing/image.png' alt='Image' /><br /><br />"; (optional header image) 
// Sanitize unknown input data 
function sanitize(text) { 
    $san = filter_var(text, FILTER_SANITIZE_STRING); 
    return $san; 
} 
$mes_body .= "<br /><br />"; 
foreach ($_POST as $key => $value) { //define & insert unknown inputs into message body 
    if ($key != 'From' && $key != 'Subject' && $key != 'Filecheck') { 
    $mes_body .= sanitize($key) . ': ' . sanitize($value) . '<br />'; 
    } 
} 
$mes_body .= "</body></html>"; 
// multipart email 
$boundary = md5("text_for_hash"); 
if ($filecheck == 1) { // multipart email w/ attachment(s) & $filecheck=1 means files present 
    $headers = "MIME-Version: 1.0\r\n"; 
    $headers .= "From: " . $from_email . "\r\n"; 
    $headers .= "Reply-To: " . $from_email . "" . "\r\n"; 
    $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n"; 
    // message text 
    $body = "--$boundary\r\n"; 
    $body .= "Content-Type: text/html; charset=\"ISO-8859-1\"\r\n"; 
    $body .= "Content-Transfer-Encoding: 8bit\r\n"; 
    $body .= $mes_body; 
    $body .= "boundary = $boundary\r\n"; 
    // attachment(s) 
    foreach ($attachments as $attachment) { 
     if ($attachment['size']) { 
     $body .= "\r\n" . $boundary; 
     $body .= "Content-Type: " . $attachment['type'] . "; name=\"". $attachment['filename'] . "\"\r\n"; 
     $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; 
     $body .= $attachment['content']; 
     } 
    } 
    $body .= "boundary = $boundary\r\n"; 
    $message_body = $mes_body; 
} 
else { // plain text email 
    $headers = "From: " . $from_email . "\r\n" . "Reply-To: " . $from_email . "\r\n" . "Content-type: text/html" . "\r\n" . "X-Mailer: PHP/" . phpversion(); 
    $message_body = $mes_body; 
} 
$send_mail = mail($to_email, $subject, $message_body, $headers); 

UPDATE: 取付部を中心に。私は右のようになりますいるFormDataに取り付ける前にいるFormData &典型的なキー/値のコンソール出力を使用しています:

enter image description here

Files1 & Files2はキー&ある私もメールにこれらを配置する必要があります。例:
Files1:(W/Files1関連するすべてのファイルを添付)
Files2:(W/Files2関連するすべてのファイルを添付)
注:彼らはユーザーであるとして、私は、事前にキーの名前を知ることができません定義される。それはすでにいるFormDataだとして

誰かが、取付部のためにこれを提案した:今のフォームは黙っ&を提出さ

// attachment(s) 
foreach ($_FILES as $attachment) { 
     $name = $attachment["tmp_name"]; 
     if ($attachment["size"]) { 
     $body .= "--$boundary\r\n"; 
     $body .= "Content-Type: " . $attachment["type"] . "; name=\"" . $name . "\"; Content-Disposition: attachment" . "\r\n"; 
     $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; 
     echo $attachment . "<br />"; 
     } 
    } 

私は何がサーバー上のerror_logされ表示されません。私は間違って何をしていますか?コードの修正は高く評価されます。

+0

@u_mulderフォームの別の部分に役立つように、これを手伝ってもらえますか? – parti

答えて

1

$_FILESは、2次元配列である。最初のインデックスは、ファイルがアップロードされたフィールド名で、2番目のインデックスはファイルに関する情報です。代わりに、次のループの:

foreach ($attachments as $attachment) { 
    if ($attachment['size']) { 
    $body .= "\r\n" . $boundary; 
    $body .= "Content-Type: " . $attachment['type'] . "; name=\"". $attachment['filename'] . "\"\r\n"; 
    $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; 
    $body .= $attachment['content']; 
    } 
} 

(​​は自分の最初の添付ファイル、それらのすべてではないでした)、あなたがしようとする場合があります:

foreach ($_FILES as $attachment) { 
    if ($attachment['size']) { 
    $body .= "\r\n" . $boundary; 
    $body .= "Content-Type: " . $attachment['type'] . "; name=\"". $attachment['filename'] . "\"\r\n"; 
    $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; 
    $body .= base64_encode(file_get_contents($attachment['tmp_name'])); 
    } 
} 

これはを通して、あなたのすべての添付ファイルを歩いていきますファイル内容を読み込み、base64でエンコードしてから電子メールメッセージに追加します。

+0

ええ、どうしたらファイルを取得するのか分かります。それでも問題は鍵付きですが、私は正しい道にいると思います。 – parti

関連する問題