Frage zu Upload + Tutorial

Ich_halt224

Erfahrenes Mitglied
Hallo,

ich versuche mit diesem Tutorial ein Upload-Script zu machen:
http://www.tutorials.de/forum/php-tutorials/65420-upload-via-formular.html

Nun steht da folgendes:
PHP-Code:
if(empty($err)) {
copy("$tempname", "$name");
echo "Die Datei $name wurde erfolgreich hochgeladen!";
}
else {
foreach($err as $error)
echo "$error<br>";
}
?>
Mit diesem Schritt wird die Datei in das Verzeichnis upload/images/$name verschoben.


Wo steht da, dass die Datei in das Verzeichnis upgeloadet wird?
Fehlt da eine Angabe oder bin ich einfach nur blind?
Möchte gerne einen anderen Zielordner wählen.

LG Tim
 
Moin moin,

das kannst du im zweiten Parameter der copy() Funktion/Methode angeben, wo das Ganze hingespeichert werden soll. Eigentlich müsste das dann so aussehen:

PHP:
if(empty($err)) {
copy("$tempname", "upload/images/$name");
echo "Die Datei $name wurde erfolgreich hochgeladen!";
}
else {
foreach($err as $error)
echo "$error<br>";
}
?>

oder mit einer Variable

PHP:
$pfad = "upload/images/";
if(empty($err)) {
copy("$tempname", "$pfad$name");
echo "Die Datei $name wurde erfolgreich hochgeladen!";
}
else {
foreach($err as $error)
echo "$error<br>";
}
?>

Wie das bei dem Tutorial da rein gespeichert wird, keine Ahnung, hab mir den Text auch nicht durchgelesen, aber wenn sich das Skript in dem Verzeichnis befindet, dann wird die Datei in das aktuelle Verzeichnis geladen.

Greetz
ToXiC24
 
Cool, vielen Dank, habe deinen Tipp befolgt, dass die Dateien hochgeladen werden in den Ordner, wo auch die upload.php ist und das funktioniert! :) *freu*

Jetzt hätte ich gerne noch zwei Funktionen:

1. In dem Uploadscript soll eingebaut werden, dass ich eine Email bekommen, wenn jemand etwas hochgeladen hat, in der eMail soll auch der Pfad zu der Datei enthalten sein.

2. Die hochgeladenen Dateien sollen umbenannt werden, damit keine Datei überschrieben wird. Also z.B. Bild0001.jpg und dann immer +1

Könntest du mir da auch helfen? :)

LG Tim
 
PHP:
if(empty($err)) {
  copy("$tempname", "upload/images/$name");
  echo "Die Datei $name wurde erfolgreich hochgeladen!";
  $mailtext = "Es wurde ein neues Bild hochgeladen: $pfad/name";
  mail("deine@email.de", "Betreff", $mailtext);
}else{
  foreach($err as $error)
  echo "$error<br>";
}

?>

Bei dem automatischen Benennen der Dateien anhand der letzten Datei kann ich dir so auf die Schnelle leider nicht helfen, aber es gibt verschiedene Möglichkeiten:

A: Du speicherst die Dateinanem in einer Datenbank und gehst immer von der letzten aus
B: Du speicherst den einzelnen Dateinamen immer in eine Textdatei und überschreibst diese immer, liest vorm Überschreiben aber den aktuellen Wert raus uns zählst diesen um eins hoch
C: Das Verzeichnis durchforsten und bei der letzten Datei ab dem . für die extension alles entfernen, sodass nur der Dateiname selbst übrig bleibt und diesen um eins hochzählen.

Variante B erscheint mir persönlich am einfachsten zu realisieren, da eine Datenbank wohl eher unrealistisch für einen einzelnen Dateinamen ist und ein Durchforsten des Verzeichnisses aufwändig ist.

Greetz
ToXiC
 
Ok also eine eMail bekomme ich beim Hochladen, das klappt, allerdings mit dem Text:
Es wurde ein neues Bild hochgeladen: /name

Also irgendwie zeigt er den Pfad nicht an.

Der Code sieht jetzt so aus:
PHP:
<?php 
$tempname = $_FILES['file']['tmp_name']; 
$name = $_FILES['file']['name']; 
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size'];  
if($type != "image/gif" && $type != "image/pjpeg") { 
    $err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden."; 
} 
if($size > "15000") { 
    $err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 15 KB!"; 
}  
if(empty($err)) { 
    copy("$tempname", "$name"); 
    echo "Die Datei $name wurde erfolgreich hochgeladen!"; 
$mailtext = "Es wurde ein neues Bild hochgeladen: $pfad/name";
  mail("info@mail.de", "Neuer Upload", $mailtext); 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
?>


Wegen der Umbenennung der Dateien mache ich dann halt ein neues Thema auf, irgendwie gibt es da einen ganz einfachen Weg, hatte solch ein Script schon mal auf dem PC, ist aber leider beim Festplattencrash verloren gegangen.
Muss ich in der upload.php was ändern, wenn ich anstatt der einen Datei gleich 10 hochladen will, das Formular also auf 10 Eingabefelder erweitere?

Liebe Grüße und danke schon einmal

Tim
 
Hi,

ja klar wird der Pfad nicht angezeigt, weil der nirgends hinterlegt ist :)

PHP:
<?php 
$tempname = $_FILES['file']['tmp_name']; 
$name = $_FILES['file']['name']; 
$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size'];  
if($type != "image/gif" && $type != "image/pjpeg") { 
    $err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden."; 
} 
if($size > "15000") { 
    $err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 15 KB!"; 
}  
if(empty($err)) { 

  $pfad = getcwd(); // Wenn Skript im Ordner wo reingeladen wird...
  $pfad = "upload/images/"; // Wenn Skript nicht imer selben Pfad...
  copy("$tempname", "$name"); // Wenn Skript im Ordner wo reingeladen wird...
  copy("$tempname", "$pfad$name") ; // Wenn Skript nicht imer selben Pfad...

  echo "Die Datei $name wurde erfolgreich hochgeladen!"; 
  $mailtext = "Es wurde ein neues Bild hochgeladen: $pfad/name";
  mail("info@mail.de", "Neuer Upload", $mailtext); 
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
?>

Achtung, 2 Varianten, es steht jeweils dahinter, was was ist, das nicht zutreffende einfach rausnehmen :)
 
Zurück