Ich versuche, ein Formular zu verarbeiten, das mehrere Dateieingaben (in verschiedenen Teilen des Formulars) erfordert, die mehrere Anhänge für jede haben können. Ich habe jeden Eingang wie diesen mit dem gleichen Namen (attach) gesetzt, wie ich es verstehe, die $ _FILES ['attach'] wird alle Dateien erhalten, richtig?Mehrere Eingabe-Anhänge PHP
<input type="file" class="file" name="attach[]" title="" dropzone="copy" multiple="multiple" required></input>
Ich habe dieses php zusammen aus einer Reihe von Quellen zusammengeschustert, können Sie dies bitte überprüfen. Es sendet nicht, also habe ich offensichtlich irgendwo Fehler gemacht.
(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: Konzentration auf das Anbauteil. Ich verwende Formdata & eine typische Schlüssel/Wert-Konsolenausgabe direkt vor der Formdata Befestigung könnte wie folgt aussehen:
Dateien1 & files2 ist Schlüssel & ich diese in der E-Mail als auch vergeben müssen. Ex:
Dateien1: (fügen Sie alle Dateien zugeordnet w/Dateien1)
files2: (eingebundene alle Dateien zugeordnet w/files2)
Hinweis: Ich will nicht wissen, die Namen der Tasten vor der Zeit, wie sie Benutzer sind -definiert.
Jemand schlug vor, dies für den Befestigungsteil, wie es schon ist 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 />";
}
}
Im Augenblick ist die Form einreicht still & ich sehe nichts auf dem Server error_log. Was mache ich falsch - Codekorrektur wäre willkommen.
@u_mulder Würde es Ihnen etwas ausmachen, mir dabei zu helfen ?, wie Sie waren hilfreich mit einem anderen Teil des Formulars – parti