kostenloser Webspace werbefrei: lima-city


Bild nach Upload nutzlos?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    horrorfilme

    horrorfilme hat kostenlosen Webspace.

    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ß
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Schreib mal Deinen kompletten Code, damit wir Dir helfen können.
  4. horrorfilme schrieb:
    (move_uploaded_file funktioniert da für mich auch nicht, oder ich machs falsch)

    WAS funktioniert daran nicht? Fehlermeldung?
  5. Autor dieses Themas

    horrorfilme

    horrorfilme hat kostenlosen Webspace.

    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
  6. 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
  7. Autor dieses Themas

    horrorfilme

    horrorfilme hat kostenlosen Webspace.

    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
  8. 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
  9. Autor dieses Themas

    horrorfilme

    horrorfilme hat kostenlosen Webspace.

    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! :thumb:
  10. 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
  11. Autor dieses Themas

    horrorfilme

    horrorfilme hat kostenlosen Webspace.

    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)
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!