Mit php-Formular Datei senden UND speichern

Hi

Ich möchte mittels eines Anmeldeformulares Dateien anhängen, die mir dann zugeschickt werden. Das geht.
Was nicht funktioniert ist diese Datei, die der User mitschickt, in ein Verzeichnis auf dem Server zu kopieren.
Habe zwei Skripte zu einem zusammengewuschtelt.
Wer die Lösung weiß (und die ist für PHP-Könner bestimmt nicht schwer), bitte antworten!!!

Die ZWEI zu ändernden Bereiche sind Auskommentiert.
Hier das Skript:

<?php $pbetreff[0] = 'Bitte wähle...';
$pbetreff[1] = 'am Freitag'; $pbetreff[2] = 'am Samstag'; $empfaenger = 'bitteTESTMAILhier@?????.de'; // Dorthin werden Nachrichten geschickt $absender = 'Gästeliste'; // Absenderanzeige des Kontaktformulars $newpoint = ':smile: \n"; } if(empty($\_POST['email']) && empty($\_POST['telefon'])) { $Nachricht .= $newpoint."Bitte gebe Deine **Emailadresse oder Telefonnummer** an. "; } elseif(!empty($\_POST['email']) && !empty($\_POST['email']) && !eregi("^[\_a-z0-9-]+(\.[\_a-z0-9-]+)\*@([a-z0-9-]+\.){1,3}([a-z0-9-]{2,3})$",$\_POST['email'])) { $Nachricht .= $newpoint."Die **eMail-Adresse** entspricht nicht der korrekten Syntax. \n"; } elseif(!empty($\_POST['telefon']) && eregi("[^- /0-9]",$\_POST['telefon'])) { $Nachricht .= $newpoint."Die **Telefonnummer** darf nur aus Zahlen bestehen. \n"; } elseif(!empty($\_POST['telefon']) && strlen($\_POST['telefon'])Telefonnummer ist nicht gültig. \n"; } if(empty($\_POST['betreff'])) { $Nachricht .= $newpoint."Bitte wähle eine **Geasteliste** aus. \n"; } if(empty($\_POST['text'])) { $Nachricht .= $newpoint."Du hast noch keine **Begruendung** eingegeben. \n"; } if(!$Nachricht) { // Mailinhalt definieren: $Text = "Diese Person möchte auf die Gästeliste gesetzt werden:\n"; $Text .= "Name: ".$\_POST['name']."\n"; $Text .= ($\_POST['email']) ? "Email: ".$\_POST['email']."\n" : "Email: Keine Angabe\n"; $Text .= ($\_POST['telefon']) ? "Telefon: ".$\_POST['telefon']."\n" : "Telefon: Keine Angabe\n"; $Text .= "Gaesteliste: ".$pbetreff[(int)$\_POST['betreff']]."\n\n"; $Text .= str\_repeat('-',70)."\n".strip\_tags($\_POST['text'])."\n"; // Header definieren $dateiname = $\_FILES['anhang']['tmp\_name']; $dateiname\_mail = $\_FILES['anhang']['name']; $absender = ($\_POST['email']) ? $\_POST['email'] : $absender; $header = "From: $absender\nReply-To: ".$\_POST['email']; // Anhang vorhanden? if($dateiname) { $trenner = md5(uniqid(time())); $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 .= $Text; $header .= "\n"; $header .= "--$trenner"; $header .= "\n"; $header .= "Content-Type: ".$\_FILES['anhang']['type']."; name=$dateiname\_mail"; $header .= "\n"; $header .= "Content-Transfer-Encoding: base64"; $header .= "\n"; $header .= "Content-Disposition: attachment; filename=$dateiname\_mail"; $header .= "\n\n"; $dateiinhalt = fread(fopen($dateiname, "r"), filesize($dateiname)); $header .= chunk\_split(base64\_encode($dateiinhalt)); $header .= "\n"; $header .= "--$trenner--"; // hier ist die Betreffende Änderung 2 copy ($picture3,"$ordner/$picture1"); // hier ist die Betreffende Änderung 2 Ende // Keinen Anhang, nur Mail } else { $header .= "\nContent-Type: text/plain"; $header .= "\nContent-Transfer-Encoding: 8bit"; $header .= "\n\n".$Text; } //-\> Alles ok, Mail verschicken. mail($empfaenger,$pbetreff[(int)$\_POST['betreff']],'', $header); $gesendet = true; } } //---------------------------------------------------------------------------------------------------- // Hier erfolgt die html-Ausgabe. Diese kann beliebig angepasst werden. // Allerdings bitte darauf achten, dass die PHP-Befehle unverändert bleiben. ?\> Gaesteliste body { background-image:url(images/bg-gaesteliste.jpg); background-position:center top; background-repeat:no-repeat; background-attachment:fixed; }   <?php if(!$gesendet): ?> 

Hier kannst Du Dich für die Gästeliste am Wochenende anmelden.
Freitag, 01.09. oder Samstag, 02.09. >>

<?php endif;?>  <?php print $Nachricht;?>

 

<?php if(!$gesendet): ?>

Dein Name 
Deine Email 
oder Deine Telefonnummer 
Geasteliste 

<?php if(!$pflichtbetreff) {
print '';

while(list($a,$b) = each($pbetreff))
if($a == $_REQUEST['betreff'])
print ''.$b.'';
else
print ''.$b.'';
print '';
} else {
print $pbetreff[(int)$_GET['betreff']];
}
?>Warum sollen wir gerade Dich auf die Gästeliste setzen? 
<?php print htmlentities(strip_tags($_POST['text']));?><?php /* WENN KEIN DATEIUPLOAD GEWÜNSCHT IST, DIE FOLGENDEN ZEILEN LÖSCHEN */ ?>Voraussetzung ist allerdings ein Bild
 

<?PHP /* DATEIUPLOAD ENDE */ ?>
<?php else: ?>

Deine Mail wurde abgeschickt.


<?php endif;?>




-------------------------------
Vielen Dank

Tobias

Hi

http://www.php.net
http://www.php.net/manual/de/function.move-uploaded-…
http://www.amazon.de/exec/obidos/ASIN/3827269180/ver…

:wink:

Grüße, Hagen

Danke! Das sieht gut aus. Aber geht es nicht mit dem Copybefehl, den ich versucht habe? Ich schätze da wird nur eine Kleinigkeit falsch ausgegeben oder übergeben.
Wenn Du oder jemand anderes sich das mal in „kürze“ anschauen - lachen - und mir den Fehler sagen würde, wäre ich dankbar.

Gruß

Tobias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ohne mir das „Gewurschtel“ anzuschauen, steht die Lösung aller Wahrscheinlichkeit nach in dem zweiten Link, den ich dir gepostet habe.

Aufgrund der Datei-Rechte reicht i.d.R. ein copy-Befehl nicht aus. Deswegen gibt es move_uploaded_file, der das upgeloadete Files aus dem tmp-Verzeichnis in ein Verzeichnis deiner Wahl verschiebt, auf dem du dann auch Leserechte hast.
Ab dann kannst du da auch mit copy-befehl ran.

Grüße, Hagen

Ohne mir das „Gewurschtel“ anzuschauen, steht die Lösung aller
Wahrscheinlichkeit nach in dem zweiten Link, den ich dir
gepostet habe.
Ab dann kannst du da auch mit copy-befehl ran.

Grüße, Hagen

Das ganze Gewurschtel lautet:

copy ($picture3,"$ordner/$picture1");

Und da stimmt was nicht. Und ICH sehe es nicht.

Tobias

–> Und so klappt es leider auch nicht:
move_uploaded_file($_FILES[‚anhang‘][‚tmp_name‘], $uploadfile);

Es kommt:
Warning: move_uploaded_file(): Unable to move ‚/tmp/phpEzaYnv‘ to ‚‘ in /hp/af/aa/xc/www/liste/gast1.php on line 93

Gruß

Tobias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

–> Und so klappt es leider auch nicht:
move_uploaded_file($_FILES[‚anhang‘][‚tmp_name‘],
$uploadfile);

Es kommt:
Warning: move_uploaded_file(): Unable to move ‚/tmp/phpEzaYnv‘
to ‚‘ in /hp/af/aa/xc/www/liste/gast1.php on line 93

Nehmen wir mal die Fehlermeldung auseinander:
Er will eine Datei von ‚/tmp/phpEzaYnv‘ nach ‚‘ verschieben.
‚‘ bedeutet Leerstring. Ins leere verschieben kann auch ein Linux nicht.
Fünf Dollar, das $uploadfile zu diesem Zeitpunkt nicht gesetzt ist :wink:

Grüße, Hagen

—> Das stimmt. Das soll dann die Datei sein oder der Zielordner? Bei Zielordner funktioniert es wieder nicht und wenn es die Datei sein soll, dachte ich, dass die ja schon mit $_FILES[‚anhang‘][‚tmp_name‘] benannt wurde. Wie soll es dann heißen? Jetzt wird es unklarer. :wink:

Gruß

Tobias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wir wollen doch nicht den Lerneffekt sabotieren, oder?
:wink:

Du kommst von selbst drauf!

Wir wollen doch nicht den Lerneffekt sabotieren, oder?
:wink:

Du kommst von selbst drauf!

Hi

Nach etlichen (und das waren wirklich über 2 Stunden) Versuchen gebe ich auf!!!

Das ist in jedem Skript so einfach. Nur die Variablen passen nicht bei mir und das will einfach nicht. ;-(

Tobias

ICH HABE DIE LÖSUNG!!!

move_uploaded_file($_FILES[‚anhang‘][‚tmp_name‘], ("$ordner/$dateiname_mail"));

Wenn es jemand mal brauchen sollte! Das skript steht oben im Beitrag!

Gruß

Tobias

PS: Wenn es einer gewußt hätte - danke. Habe 3 Tage dran gesessen… ;-(

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]