File upload
Timo
- php
Hallo zusammen
mein Problem ist folgendes ich möchte gerne einen File upload programmieren. Das ganze sieht so aus ich habe ein Formular wo man die Datei auswählen kann. Diese Formular wird dann auf eine andere Seite geschickt. Leider bekomme ich den Wert nicht übergeben. Hier mal mein Text:
Seite1.php
<html>
<head>
<title>Datei-Upload</title>
</head>
<body>
<form action="Seite2.php" enctype="multipart/form-data" method="post">
<input name="Datei" type="file"><br>
<input name="Send" type="submit" value="Upload">
</form>
</body>
</html>
Seite2.php
if($_FILES['Datei']['tmp_name'])
{
echo"Ihre Datei ("",
$_FILES['Datei']['name'],
"") ist ",
$_FILES['Datei']['size'],
" Bytes groß.";
move_uploaded_file($_FILES['Datei']['tmp_name'], "upload/".$_FILES['Datei']['name']);
}
else
{
echo"Bitte geben Sie eine Datei an!";
}
Hoffe mir kann einer helfen!!
Hallo,
also, ich habe gerade mal deinen Quelltext 1:1 kopiert und bei mir macht er anstandslos was er soll (abgesehen davon, dass ich kein Verzeichnis "upload" angelegt habe und daher eine Fehlermeldung bekomme. Ich habe das ganze auf einer XAMPP Installation unter Windows XP getestet. Bist du sicher, dass du die richtigen(aktuellen) Dateien auf deinen Server überspielt hast?
Liebe Grüße mbr
P.S.: Das werden dir wahrscheinlich auch noch andere sagen: Wenn du zuläßt, dass Files auf deinen Server hochgeladen werden, solltest du sehr aufpassen, wer da was hochlädt (sonst könnte dir auch jemand "boeses_script.php" unterjubeln - und danach auch ausführen ;-))
hallo,
mit ...
if($_FILES['Datei']['tmp_name'])
... prüfst du ob $_FILES['Datei']['tmp_name'] == true ist
$_FILES['Datei']['tmp_name'] müßte ein wert vom typ String enthalten und nicht Boolean
würde daher prüfen ob diese variable nicht leer ist:
if($_FILES['Datei']['tmp_name']!="")
oder ob sie gesetzt wurde
if(isset($_FILES['Datei']['tmp_name']))
gruß
jo
Hello,
hallo,
mit ...
if($_FILES['Datei']['tmp_name'])
... prüfst du ob $_FILES['Datei']['tmp_name'] == true ist
Das ist nicht schön.
if(isset($_FILES['datei']['error']) and $_FILES['datei']['error'] === 0)
{
# upload hat geklappt
}
Als erstes also den Error-Wert abfragen. Der gibt Auskunft über Erfolg oder nichterfolg.
Außerdem isset() benutzen, und nicht nur einfach auf eine evtl. gar nicht vorhandene Variable zugreifen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Okej danke ich habs jetzt hinbekommen.
Hab aber noch eine Frage:
Wie kann ich den Dateiname beim abspeichern abändern.
z.b. Das Bild das der User hochlöd heißt logo.jpg.
Allerdings soll es z.b. unter dem namen logo1.jpg gespeichrt werden.
Speichern tu ich ja mit folgender Funktion:
move_uploaded_file($_FILES['datei']['tmp_name'], "upload/".$_FILES['datei']['name'])
Nur wie veränder ich den Namen?
Hello,
Wie kann ich den Dateiname beim abspeichern abändern.
z.b. Das Bild das der User hochlöd heißt logo.jpg.
Allerdings soll es z.b. unter dem namen logo1.jpg gespeichrt werden.Speichern tu ich ja mit folgender Funktion:
move_uploaded_file($_FILES['datei']['tmp_name'], "upload/".$_FILES['datei']['name'])
Grundsätzlich solltest Du auch an die Sicherheit denken.
Akzeptieren solltet Du als Namen daher ausschließlich den Basename, also den letzten Teil des übertragenen Namens (nach dem letzen Pfadseparierer).
PHP hat dafür eine Funktion: http://de3.php.net/manual/de/function.basename.php
und außerdem solltest Du prüfen, ob es sich tatsächlich um ein Bild handelt, und nicht etwa um ein ausführbares Programm oder Script. Dafür hat PHP die Funktion
http://de3.php.net/manual/de/function.getimagesize.php
if(getimagesize($path) !== false)
{
### es ist ein Bild
}
#------------------
$_parts = pathinfo($_FILES['datei']['name']);
$filename_wo_ext = basename($_parts['basename'],'.'.$_parts['extension']);
$savepath = 'upload/' . $filename_wo_ext . $meinenummer . '.' . $_parts['extension'];
Ich hoffe, dass es Dir hilft.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Okej danke ich habs jetzt hinbekommen.
Hab aber noch eine Frage:
Wie kann ich den Dateiname beim abspeichern abändern.
z.b. Das Bild das der User hochlöd heißt logo.jpg.
Allerdings soll es z.b. unter dem namen logo1.jpg gespeichrt werden.
die funktion move_uploaded_file() gibt true zurück wenn die datei erfolgreich hochgeladen wurde
um die datei umzubenennen führst du die function rename(old name, new name) aus
if(move_uploaded_file($_FILES['Datei']['tmp_name'],"upload/".$_FILES['Datei']['name']))
{
rename("upload/logo.jpg","upload/logo1.jpg");
}
rename("upload/logo.jpg","upload/logo1.jpg");
okej das kling logoisch aber ich weiß ja nicht wie die Files heißen die hochgeladen werden, das muss ja dynamisch sein??
Hello,
rename("upload/logo.jpg","upload/logo1.jpg");
okej das kling logoisch aber ich weiß ja nicht wie die Files heißen die hochgeladen werden, das muss ja dynamisch sein??
Hab ich Dir doch geschrieben, wie es geht.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom