Formular mit Bilder-Upload

bluemonty

Grünschnabel
Hallo allerseits!

Ich habe mir aus dem Internet ein PHP-Script zusammengesucht und -gebastelt, mit dessen Hilfe die Besucher meiner HP Kontakt mit mir aufnehmen und ein Foto an mich senden können. Ich hätte es aber gerne so, dass mehrere Bilddateien "angehängt" werden können. Ist sowas möglich und wäre jemand bereit mir dabei zu helfen? Ich habe null Ahnung von PHP, bin zudem noch blond und nicht mehr ganz frisch. :) Hier mal das, was ich bisher gemacht habe:

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>Kontaktformular</title>
<link href="css/format.css" rel="stylesheet" type="text/css" media="all">
</head>
<body>
<?php

$Empfaenger = "mail@test.de";

if($_REQUEST['Send'])
{
if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))
{
echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zur?ck</a> und f?llen Sie alle Felder aus!";
}
else
{
$Mailbetreff = "Kontakt: ";
$Mailbetreff .= $_REQUEST['Betreff'];

$Trenner = md5(uniqid(time()));

$Header = "From: ".$_REQUEST['Email'];
$Header .= "\n";
$Header .= "MIME-Version: 1.0";
$Header .= "\n";
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
$Header .= "\n\n";
$Header .= "This is a multi-part message in MIME format";
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: text/plain";
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: 8bit";
$Header .= "\n\n";
$Header .= "Sie haben folgende Nachricht erhalten: \n\n";
while(list($Formularfeld, $Wert)=each($_REQUEST))
{
if($Formularfeld!="Send" && $Formularfeld!="Anhang")
{
$Header .= $Formularfeld.": ".$Wert."\n";
}
}
$Header .= "\nDatum/Zeit: ";
$Header .= date("d.m.Y H:i:s");
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n\n";
$Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";
$Header .= "--$Trenner--";

mail($Empfaenger, $Mailbetreff, "", $Header);
echo"Vielen Dank f?r Ihre eMail!";
}
}
else
{
?>
<table border="0" cellpadding="1" cellspacing="2" align="center">
<form action="<?php echo$_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post">
<tr>
<td>Name:</td>
<td><input name="Name" size="20" type="text"></td>
</tr>
<tr>
<td>eMail:</td>
<td><input name="Email" size="20" type="text"></td>
</tr>
<tr>
<td>Betreff:</td>
<td><select name="Betreff" size="1">
<option>Puzzle</option>
<option>Bildbearbeitung</option>
<option>Hilfe</option>
</select></td>
</tr>
<tr>
<td>Nachricht:</td>
<td><textarea cols="36" name="Nachricht" rows="5"></textarea></td>
</tr>
<tr>
<td>Anhang:</td>
<td><input name="Anhang" size="20" type="file"></td>
</tr>
<tr>
<td align="center" colspan="2"><input name="Send" type="submit" value="Abschicken"> <input name="Reset" type="reset" value="Löschen"></td>
</tr>
</form>
</table>
<?php
}

?>
</body>
</html>

Es funktioniert sogar, aber wie gesagt, nur mit einem angehängten Foto... :confused:
 
Also ich würde es versuchen, indem ich den Header änder, je nachdem, ob eine Datei angehängt wurde oder eben nicht.

also den Content-Type mit einer if Abfrage dynamisch gestalten.

PHP:
if(WennDateiGesendetWurde){ // wie die genaue Frage lauten muss weiß ich gerade nicht :eek: 
   $Header .= "Content-Type: ";
   $Header .= $_FILES['Anhang']['type'];
   $Header .= "; name=";
   $Header .= $_FILES['Anhang']['name'];
   $Header .= "\n"; 
}else{
   //einen anderen Content-Type bestimmen.
   // in etwa so, bin mir aber nicht sicher wie.

   $Header .= "Content-Type: text/plain";
   $Header .= "\n"; 

}

das soll nur ein Denkanstoß sein, ist nicht getestet! Good Luck.
 
Morgen,

@nepda
ist das die Antwort auf die Frage? Wenn ja, nochmal genau lesen. Er möchte mehr als 1 Datei anhängen und nicht mal 1 mal gar keine ;)

@bluemonty
versuch einfach mal noch ein <input type="file" name="Anhang1" size=20> und das im PHP Teil analog zum Feld "Anhang" verarbeiten. Evtl. Vorher prüfen ob was geschickt wurde (isset($_FILE['Anhang1'])). Wenn du mehr brauchst machst entweder noch soviele InputFelder wie du brauchst oder machst es mit JS dynamisch. Hoffe geholfen zu haben.
 
Zurück