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:
<?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:
<?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