Bild nach Upload nutzlos?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
bild
code
email
extension
file
formular
header
horrorfilm
http
image
index
manual
nachname
pfad
type
url
verschieben
verzeichnis
vorname
-
Hey,
Ich hätte da eine kleine Frage:
Ich habe mittels einem Formular einen einfachen Bildupload erstellt:
<form action='upload.php' method='post' enctype='multipart/form-data'> <input type='file' name='picture' accept='image/gif,image/jpeg,image/png'> <input type='submit' value='speichern'> </form>
Danach wird eben die upload.php augefrufen und dann gibts das Problem: die Datei ist auf "/home/webpages/tmp/phptAoLXp" - da hab ich allerdings keinen Zugriff und kann eben leider mit der Datei nichts anfangen :-/
Gibts irgentwie eine Möglichkeit dieses Bild entweder gleich in das gewünschte verzeichniss hochzuladen oder das nachher zu verschieben (move_uploaded_file funktioniert da für mich auch nicht, oder ich machs falsch)
gruß -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Schreib mal Deinen kompletten Code, damit wir Dir helfen können.
-
horrorfilme schrieb:
(move_uploaded_file funktioniert da für mich auch nicht, oder ich machs falsch)
WAS funktioniert daran nicht? Fehlermeldung? -
tobiworlds schrieb:
Schreib mal Deinen kompletten Code, damit wir Dir helfen können.
Hab hier alles, was das Formular betrifft:
<?php $username = $_SESSION['username']; $Username = ucfirst($username); $userid = $_SESSION['userid']; $sql = "SELECT * FROM `main_users` WHERE `id`='$userid'"; $query = mysql_query($sql); while($row = mysql_fetch_object($query)){ $image = $row->profileimage; $vorname = ucfirst($row->vorname); $nachname = ucfirst($row->nachname); $email = $row->email; $password = "***"; } echo " <form name='settings' action='/users/updatesettings.php' method='post' enctype='multipart/form-data'> <table width='100%'> <tr> <td rowspan='2' width='107' height='110'><img src='$image' width='97px' height='110px'></td> <td height='8'><h3 id='h3top'>$Username</h3></td> </tr> <tr> <td class='burito'>Sie wollen einen neuen Avatar? Einfach Hochladen:<br><input type='file' name='picture' accept='image/gif,image/jpeg,image/png'></td> </tr> <tr> <td>Vorname</td> <td><input type='text' name='vorname' value='$vorname'></td> </tr> <tr> <td>Nachname</td> <td><input type='text' name='nachname' value='$nachname'></td> </tr> <tr> <td>E-Mail</td> <td><input type='text' name='email' value='$email'></td> </tr> <tr> <td>Passwort</td> <td><input type='password' name='password' value='$password'></td> </tr> <tr> <td colspan='2' style='text-align:right'><input type='hidden' name='userid' value='$userid'><input type='hidden' name='sub' value='true'><input type='submit' value='speichern'></td> </tr> </table> </form> "; ?>
<?php include($_SERVER['DOCUMENT_ROOT']."/templates/phpheader.php"); if($_POST['sub']){ $userid = $_SESSION['userid']; $sql = "SELECT * FROM `main_users` WHERE `id`='$userid'"; $query = mysql_query($sql); while($row = mysql_fetch_object($query)){ $image = $row->profileimage; $vorname = ucfirst($row->vorname); $nachname = ucfirst($row->nachname); $username = $row->username; $email = $row->email; $password = $row->password; } $vor = $_POST['vorname']; $nach = $_POST['nachname']; $e = $_POST['email']; $pass = $_POST['password']; $pass = sha1($pass."***"); if($_FILES['picture']['name'] != ""){ //upload new avatar //save on ftp with name as user //save link to ftp as `profileimage` //$end definieren (.png, .jpg, .gif) //wenn alles klappt: //$setimage = true; $newimage = "/templates/images/users/$username.$end"; print_r($_FILES['picture']); } $upd = "UPDATE `main_users` SET "; if($setimage){ $upd .= "`profileimage`='$newimage'"; }else{ $upd .= "`profileimage`='$image'"; } if($vor != ""){ $upd .= ",`vorname`='$vor'"; }else{ $upd .= ",`vorname`='$vorname'"; } if($nach != ""){ $upd .= ",`nachname`='$nach'"; }else{ $upd .= ",`nachname`='$nachname'"; } if($e != ""){ $upd .= ",`email`='$e'"; }else{ $upd .= ",`email`='$email'"; } if($pass == "***" || $pass == "***"){ $upd .= ",`password`='$password'"; }else{ $upd .= ",`password`='$pass'"; } $upd .= " WHERE `id`='$userid'"; echo $upd; //$update = mysql_query($upd); exit; } header("Location:/"); ?>
Wenn ich das Formular mit dem hochgeladenen Bild abschicke, bekomme ich folgenden array unter $_FILE['pic']:
Array ( [name] => 11.jpg [type] => image/jpeg [tmp_name] => /home/webpages/tmp/phpxALz9T [error] => 0 [size] => 21787 )
Und wie kann ich jetzt mit der Datei arbeiten? beispielsweiße in ein bestimmtes Verzeichniss verschieben?
Beitrag zuletzt geändert: 30.11.2012 1:18:31 von horrorfilme -
Jetzt musst Du noch mit move_uploaded_file() das Bild verschieben.
if(!empty($_FILES)){ //$end auslesen move_uploaded_file($_FILES["picture"]["tmp_name"], "/templates/images/users/$username.$end"); //wenn alles klappt: //$setimage = true; $newimage = "/templates/images/users/$username.$end"; print_r($_FILES['picture']); }
Beitrag zuletzt geändert: 30.11.2012 1:30:37 von tobiworlds -
tobiworlds schrieb:
Jetzt musst Du noch mit move_uploaded_file() das Bild verschieben.
if(!empty($_FILES)){ //$end auslesen move_uploaded_file($_FILES["picture"]["tmp_name"], "/templates/images/users/$username.$end"); //wenn alles klappt: //$setimage = true; $newimage = "/templates/images/users/$username.$end"; print_r($_FILES['picture']); }
Ja, soweit war ich eig schon - danke
Nur leider funktioniert das move_uploaded_file nicht so recht -> habs genau so wie du geschrieben hast, aber das Bild landet einfach nicht in meinem Verzeichniss?
Hab einmal den relativen pfad (/templates/...) und einmal den ganzen document_root ($_SERVER['DOCUMENT_ROOT'].'/temp...')
Nichts funktioniert -
Existiert das Verzeichnis? http://www.php.net/manual/de/function.move-uploaded-file.php#105026.
Hier ist nochmal eine funktionierende Verwendung von mir:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546<?php
$allowedExts
=
array
(
"jpg"
,
"jpeg"
,
"gif"
,
"png"
,
"pdf"
,
"odt"
,
"ods"
,
"doc"
);
@
$file
=
explode
(
"."
,
$_FILES
[
"file"
][
"name"
]);
@
$name
=
$file
[0];
@
$extension
=
end
(
explode
(
"."
,
$_FILES
[
"file"
][
"name"
]));
if
(((
$_FILES
[
"file"
][
"type"
] ==
"image/gif"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"image/png"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"image/jpeg"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"image/pjpeg"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"application/pdf"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"application/vnd.oasis.opendocument.text"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"application/vnd.oasis.opendocument.spreadsheet"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"application/msword"
))
&& (
$_FILES
[
"file"
][
"size"
] < 10000000)
&& in_array(
$extension
,
$allowedExts
))
{
if
(
$_FILES
[
"file"
][
"error"
] > 0)
{
}
else
{
if
(
file_exists
(
"upload/"
.
$_FILES
[
"file"
][
"name"
]))
{
echo
$_FILES
[
"file"
][
"name"
] .
" already exists. "
;
}
else
{
$search
=
array
(
"ä"
,
"Ä"
,
"ö"
,
"Ö"
,
"ü"
,
"Ü"
,
"ß"
,
" "
,
"."
);
$replace
=
array
(
"ae"
,
"Ae"
,
"oe"
,
"Oe"
,
"ue"
,
"Ue"
,
"ss"
,
"_"
,
"_"
);
$sanitized_name
=
str_replace
(
$search
,
$replace
,
$name
);
move_uploaded_file(
$_FILES
[
"file"
][
"tmp_name"
],
"upload/"
.
$sanitized_name
.
'.'
.
$extension
);
$uploader
=
$_SESSION
[
'username'
];
$uploaded
= time();
$DB
->query(
" INSERT INTO ds_files (name, extension, uploader, uploaded) VALUES ('$sanitized_name', '$extension', '$uploader', '$uploaded')"
);
}
}
header(
"Location: index"
);
}
else
{
header(
"Location: index"
);
}
?>
Beitrag zuletzt geändert: 30.11.2012 2:10:59 von tobiworlds -
tobiworlds schrieb:
Existiert das Verzeichnis? http://www.php.net/manual/de/function.move-uploaded-file.php#105026.
Hier ist nochmal eine funktionierende Verwendung von mir:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546<?php
$allowedExts
=
array
(
"jpg"
,
"jpeg"
,
"gif"
,
"png"
,
"pdf"
,
"odt"
,
"ods"
,
"doc"
);
@
$file
=
explode
(
"."
,
$_FILES
[
"file"
][
"name"
]);
@
$name
=
$file
[0];
@
$extension
=
end
(
explode
(
"."
,
$_FILES
[
"file"
][
"name"
]));
if
(((
$_FILES
[
"file"
][
"type"
] ==
"image/gif"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"image/png"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"image/jpeg"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"image/pjpeg"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"application/pdf"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"application/vnd.oasis.opendocument.text"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"application/vnd.oasis.opendocument.spreadsheet"
)
|| (
$_FILES
[
"file"
][
"type"
] ==
"application/msword"
))
&& (
$_FILES
[
"file"
][
"size"
] < 10000000)
&& in_array(
$extension
,
$allowedExts
))
{
if
(
$_FILES
[
"file"
][
"error"
] > 0)
{
}
else
{
if
(
file_exists
(
"upload/"
.
$_FILES
[
"file"
][
"name"
]))
{
echo
$_FILES
[
"file"
][
"name"
] .
" already exists. "
;
}
else
{
$search
=
array
(
"ä"
,
"Ä"
,
"ö"
,
"Ö"
,
"ü"
,
"Ü"
,
"ß"
,
" "
,
"."
);
$replace
=
array
(
"ae"
,
"Ae"
,
"oe"
,
"Oe"
,
"ue"
,
"Ue"
,
"ss"
,
"_"
,
"_"
);
$sanitized_name
=
str_replace
(
$search
,
$replace
,
$name
);
move_uploaded_file(
$_FILES
[
"file"
][
"tmp_name"
],
"upload/"
.
$sanitized_name
.
'.'
.
$extension
);
$uploader
=
$_SESSION
[
'username'
];
$uploaded
= time();
$DB
->query(
" INSERT INTO ds_files (name, extension, uploader, uploaded) VALUES ('$sanitized_name', '$extension', '$uploader', '$uploaded')"
);
}
}
header(
"Location: index"
);
}
else
{
header(
"Location: index"
);
}
?>
Verzeichnis hat existiert - aber egal ich hab deine funktion genommen und es funktioniert einwandfrei!
Dankeschön! -
horrorfilme schrieb:
Hab einmal den relativen pfad (/templates/...) und einmal den ganzen document_root ($_SERVER['DOCUMENT_ROOT'].'/temp...')
Nichts funktioniert
Das ist kein relativer Pfad, sondern ein absoluter. Wenn der Pfad mit / beginnt, wird ab dem Rootverzeichnis begonnen, ohne wird ab dem aktuellen Verzeichnis begonnen.
Bsp:
Dein Script liegt in: /home/abc/php
Angegebender Pfad: /templates/uploads/bild.jpg
PHP will dann nach /templates/uploads/bild.jpg schreiben, statt nach /home/abc/php/templates/uploads/bild.jpg
Richtiger Pfad wäre also: templates/uploads/bild.jpg -
chatter schrieb:
horrorfilme schrieb:
Hab einmal den relativen pfad (/templates/...) und einmal den ganzen document_root ($_SERVER['DOCUMENT_ROOT'].'/temp...')
Nichts funktioniert
Das ist kein relativer Pfad, sondern ein absoluter. Wenn der Pfad mit / beginnt, wird ab dem Rootverzeichnis begonnen, ohne wird ab dem aktuellen Verzeichnis begonnen.
Bsp:
Dein Script liegt in: /home/abc/php
Angegebender Pfad: /templates/uploads/bild.jpg
PHP will dann nach /templates/uploads/bild.jpg schreiben, statt nach /home/abc/php/templates/uploads/bild.jpg
Richtiger Pfad wäre also: templates/uploads/bild.jpg
bislang hatte ich mit /templates nie ein problem, egal ob php oder html, außer der include befehl brauchte den documentroot - sonst ging immer alles wunderbar.
Dachte immer templates/blabla sucht im aktuelleen verzeichnis nach dem order templates ->
Bsp:
Script liegt in /home/abc/php/irgntwas
wenn ich jetzt templates/uploads angebe sucht der doch in /home/abc/php/irgntwas/templates/uploads, statt in /home/abc/php/templates -> daher muss ich dann wohl doch vom root aus gehen (was ich ja mit document_root mach) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage