Upload File Problem

sonnySTAR

Erfahrenes Mitglied
Guten morgääännnn :D,

so, heute bahnt sich schon wieder ein neues Problem an *hrhr* ... ich möchte den usern die möglichkeit geben ein eigenes Profilbild upzuloaden. Momentan sieht mein Code dazu so aus:
PHP:
<?
$uploaddir = './user/';
           $uploadfile = $uploaddir . basename($_FILES['avatar']['name']);

           if (move_uploaded_file($_FILES['avatar']['tmp_name'], $uploadfile))
{
$result = mysql_query("UPDATE ".$pref."user SET userpic = '".$uploadfile."'");
}
           else 
{
               echo "Possible file upload attack!\n";
           }
?>
So, nun möchte ich aber, dass das Bild beim uploaden umgenannt wird (z.B: zu "$udata[userid]_1.jpg")! Gleichzeitig möchte ich aber auch, dass das Bild auf eine bestimmte größe gebracht wird (z.B: 390px breit und 270px hoch)! Nur weiss ich nicht wie ich das anstellen soll. Ich habe noch etwas in der art gecoded :D.

Vielen Dank im vorraus
MFG
Tim
 
Okay, ich habe es nun mal ausprobiert, doch ich bau hier irgendwie nur sch***** ^^:

PHP:
<?
$uploaddir = './user/';
$uploadfile = $uploaddir . basename($_FILES['userpic']['name']);   

$max_width = 100;
$max_height = 133;           
     Header("Content-type: image/jpeg");
  
   $size = GetImageSize($uploadfile); // Read the size
         $width = $size[0];
         $height = $size[1];
        
         // Proportionally resize the image to the
         // max sizes specified above
        
         $x_ratio = $max_width / $width;
         $y_ratio = $max_height / $height;

         if( ($width <= $max_width) && ($height <= $max_height) )
         {
               $tn_width = $width;
               $tn_height = $height;
         }
         elseif (($x_ratio * $height) < $max_height)
         {
               $tn_height = ceil($x_ratio * $height);
               $tn_width = $max_width;
         }
         else
         {
               $tn_width = ceil($y_ratio * $width);
               $tn_height = $max_height;
         }
     // Increase memory limit to support larger files
    
     ini_set('memory_limit', '32M');
    
     // Create the new image!
     $src = ImageCreateFromJpeg($uploadfile);
     $dst = ImageCreateTrueColor($tn_width, $tn_height);
     ImageCopyResized($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height);
     // ImageJpeg($dst);
if (move_uploaded_file($_FILES['userpic']['tmp_name'], $dst))
{
$result = mysql_query("UPDATE ".$pref."user SET userpic = '".$dst."'");
// Destroy the images
ImageDestroy($src);
ImageDestroy($dst);
}
           else 
{
               echo "Possible file upload attack!\n";
           }
?>

wassen daran falsch ? ... ich peil des einfach ned ^^
 
Sorry, hab mir den Code jetzt nicht angeschaut, aber wieso machst du es nicht einfach wie hier im Forum, du erlaubst einfach nur ein Bild bis zu einer bestimmten größe und der Rest wird nicht gestattet. Dadurch sparst du erstens Traffic und zweitens hast du dann nicht son großes Script. Ich kann dir meins gerne mal zeigen.
 
Vielen dnak für diene Antwort.

Wäre nett wenn du mir deins mal zeigen könntest, vielleicht kannste es mir ja auch kommentieren ? ;)

MFG
Tim
 
Sorry, hat etwas länger gedauert! Aber hier nun mein etwas abgeänderter, Kommentierter Code. Wenn du Fragen hast, einfach Posten! Bin aber erst ab 21 Uhr wieder dauerhaft online, bis dahin nur ab und zu!

PHP:
<?php
class Avatar {

    function saveAvatar($id,$avatarid,$avatarurl,$upload,$status = ''){
        //-- $id            = Die ID des zu bearbeitenden Users
        //-- $avatarid      = Ob Avatar angezeigt werden soll oder nicht
        //-- $avatarurl     = Die URL Wenn Upload von einer Webseite
        //-- $upload        = Wenn Datei von Festplatte hocgleaden wird übergeben werden muss $_FILES['upload'] an stelle von uplaod musst du den Namen deines "file" Elements im Formular nehmen
        //-- $status        = dort werden die Fehlermeldungen drin gespeichert

        //-- Instanzierung der Klasse mysql_log Verbindung zur datenbank und Sicherung des Inputs vor SQL-Injections und Protokollierung der MySQL Abfragen
        $mysql = new mysql_log();
        //-- Wenn ein Avatar angezeigt werden soll mache...
        if($avatarid){
            //-- Wenn eine URL und eine Datei von der Festplatte hochgeladen werden soll... FEHLER in $status
            if($avatarurl != 0 && $upload != 0){
                $status .= 'Du kannst entweder eine URL angeben oder ein Bild von deinem Computer hochladen.';
            }
            //-- Wenn eine URL angegeben wurde...
            elseif($avatarurl){
                //-- Methode zum hochladen von einer URL aufrufen, wenn erfolgreich...
                if($this->uploadFromURL($avatarurl)){
                    //-- Dateinamen Zerlegen und in DB speichern
                    $url = explode("/", $avatarurl);
                    $dateiendung = explode('.',$url[count($url)-1]);
                    $dateiendung = $dateiendung[1];
                    //-- Dateiname bekommt den Wert der User ID --> avatarimg = '".$_SESSION['userid'].'.'.$dateiendung."'
                    //-- Wenn das Update des Users erfolgreich war Ausgabe das Upload erfolgreich
                    if($mysql->query("UPDATE users SET avatar = '1', avatarimg = '".$_SESSION['userid'].'.'.$dateiendung."' WHERE id = '$id' LIMIT 1")){
                        $replacement['status'] = '<div class="error">Benutzerbild ge&auml;ndert!</div>';
                        $content_template = new template('intern/manageProfile.tpl');
                        $content_template->compile_tags($replacement);
                        $content_template->output();
                    }
                    //-- Ansonsten Fehlerausgabe
                    else {
                        $replacement['status'] = '<div class="error">Benutzerbild nicht ge&auml;ndert!</div>';
                        $content_template = new template('intern/manageProfile.tpl');
                        $content_template->compile_tags($replacement);
                        $content_template->output();
                    }
                }
                //-- Wenn der Upload nicht erfolgreich war Fehlerausgabe
                else {
                    $replacement['status'] = '<div class="error">Benutzerbild nicht ge&auml;ndert!</div>';
                    $content_template = new template('intern/manageProfile.tpl');
                    $content_template->compile_tags($replacement);
                    $content_template->output();
                }
            }
            //-- Wenn eine Datei von der HDD gewählt wurde
            elseif($upload){
                //-- Methode zum Upload von der HDD aufrufen, wenn erfolgreich...
                if($this->uploadFromHDD($upload,'img/user/')){
                    //-- Dateinamen Zerlegen und in DB speichern
                    $dateiendung = explode('.',$upload['name']);
                    $dateiendung = $dateiendung[1];
                    //-- Dateiname bekommt den Wert der User ID --> avatarimg = '".$_SESSION['userid'].'.'.$dateiendung."'
                    //-- Wenn das Update des Users erfolgreich war Ausgabe das Upload erfolgreich
                    if($mysql->query("UPDATE users SET avatar = '1', avatarimg = '".$_SESSION['userid'].'.'.$dateiendung."' WHERE id = '$id' LIMIT 1")){
                        $replacement['status'] = '<div class="error">Benutzerbild ge&auml;ndert!</div>';
                        $content_template = new template('intern/manageProfile.tpl');
                        $content_template->compile_tags($replacement);
                        $content_template->output();
                    }
                    //-- Ansonsten Fehlerausgabe
                    else {
                        $replacement['status'] = '<div class="error">Benutzerbild nicht ge&auml;ndert!</div>';
                        $content_template = new template('intern/manageProfile.tpl');
                        $content_template->compile_tags($replacement);
                        $content_template->output();
                    }
                }
                //-- Wenn Upload nicht erfolgreich, Fehlerausgabe
                else {
                    $replacement['status'] = '<div class="error">Benutzerbild nicht ge&auml;ndert!</div>';
                    $content_template = new template('intern/manageProfile.tpl');
                    $content_template->compile_tags($replacement);
                    $content_template->output();
                }
            }
            //-- *grübel* ich glaube dieser Abschnitt ist Sinnlos
            else {
                $replacement['status'] = '<div class="error">Benutzerbild nicht ge&auml;ndert!</div>';
                $content_template = new template('intern/manageProfile.tpl');
                $content_template->compile_tags($replacement);
                $content_template->output();
            }
        }
        //-- Wenn User kein Avatar anzeigen will
        else {
            $result = $mysql->query("SELECT avatarimg FROM users WHERE id = '".$_SESSION['userid']."' LIMIT 1");
            $data = mysql_fetch_array($result);
            //-- Bild löschen
            @unlink('img/user/'.$data['avatarimg']);
            //-- DB Updaten das kein Bild des users vorhanden ist
            if($mysql->query("UPDATE users SET avatar = '0', avatarimg = '' WHERE id = '$id' LIMIT 1")){
                $replacement['status'] = '<div class="error">Benutzerbild ge&auml;ndert!</div>';
                $content_template = new template('intern/manageProfile.tpl');
                $content_template->compile_tags($replacement);
                $content_template->output();
            }
            //-- Wenn der Update der DB nicht erfolgreich war, Fehlerausgabe
            else {
                $replacement['status'] = '<div class="error">Benutzerbild nicht ge&auml;ndert!</div>';
                $content_template = new template('intern/manageProfile.tpl');
                $content_template->compile_tags($replacement);
                $content_template->output();
            }
        }
    }

    function uploadFromURL($file){
        //-- $file = URL zur Datei
        //-- Dateiendung der Datei bekommen
        $url = explode("/", $file);
        $dateiendung = explode('.',$url[count($url)-1]);
        $dateiendung = $dateiendung[1];
        //-- Dateityp aus der datei lesen, für den Fall das ein User die Dateiendung geändert hat
        $filetype = @getimagesize($file);
        //-- Wenn der Dateityp nicht gif, png, oder jpg ist schreibe das in $status --> bewirkt keine Fehlerausgabe
        if(($filetype[2] != 1) && ($filetype[2] != 2)  && ($filetype[2] != 3)){
            $status[] = "Nur gif, png und jpeg Dateien d&uuml;rfen hochgeladen werden.";
        }
        //-- Wenn Bild größer als 90 x 90 Pixel schreibe das in $status --> bewirkt keine Fehlerausgabe
        if($filetype[0] > 90 || $filetype[1] > 90){
            $status[] = "Die Bildma&szlig;e stimmen nicht. Das Bild darf maximal eine gr&ouml;&szlig;e von 90 x 90 Pixeln haben.";
        }
        
        //-- Wenn $status leer ist mache...
        if(empty($status)){
            //-- liest die Datei in einen String
            $src = file_get_contents($file);
            //-- öffnet eine Datei
            $file_s = fopen("img/user/".$_SESSION['userid'].'.'.$dateiendung,'w');
            //-- Wenn Datei geschrieben werden konnte     
            if(fwrite($file_s,$src)){
                return true;
            }
            //-- Wenn Datei nicht geschrieben werden konnte
            else {
                return false;
            }
            //-- Datei schließen
            fclose($file_s);
        } else {
            return false;
        }
    }

    function uploadFromHDD($file,$uploaddir){
        //-- $file      = s.o
        //-- $uploaddir = Ziel des Bildes, wo es hinkopiert werden soll
        
        //-- Wenn der Dateityp png, gif, oder jpg ist, mache 
        if($file['type'] == 'image/pjpeg' || $file['type'] == 'image/jpeg' || $file['type'] == 'image/gif' || $file['type'] == 'image/png'){
            //-- Dateiendung der Datei auslesen
            $dateiendung = explode('.',$file['name']);
            $dateiendung = $dateiendung[1];
            //-- kopiert eine Datei die durch einen Upload erstellt wurde von der Quelle zum Ziel            
            move_uploaded_file($file['tmp_name'], $uploaddir . $_SESSION['userid'] . '.' . $dateiendung);
            $filetype = getimagesize($uploaddir. $_SESSION['userid'] . '.' . $dateiendung);
            //-- Wenn der Dateityp nicht gif, png, oder jpg ist schreibe das in $status --> bewirkt keine Fehlerausgabe
            if(($filetype[2] != 1) && ($filetype[2] != 2)  && ($filetype[2] != 3)){
                $status[] = "Nur gif, png und jpeg Dateien d&uuml;rfen hochgeladen werden.";
            }
            //-- Wenn Bild größer als 90 x 90 Pixel schreibe das in $status --> bewirkt keine Fehlerausgabe
            if($filetype[0] > 90 || $filetype[1] > 90){
                $status[] = "Die Bildma&szlig;e stimmen nicht. Das Bild darf maximal eine gr&ouml;&szlig;e von 90 x 90 Pixeln haben.";
            }
            //-- Wenn $status nicht leer ist, lösche Datei wieder
            if(!empty($status)){
                unlink($uploaddir . $file['name']);
                return false;
            } else {
                return true;
            }
        }
    }
}
?>
 
Okay, vielen dank erstmal! Ich werde mich in der nächsten Zeit mal hinsetze und es versuchen =]. Falls Probleme auftauchen werde ich mich melden

MFG
Tim
 
Okay, gib bescheid ob ich dir weiterhelfen konnte. bei Interesse kann man ja daraus evt. mal nen ordentliches Tutorial machen.
 
Okay, also richtig was checken tu ich bisher noch ned *gg*! Jedoch versuche ich es weiter :D ... Interess an einem Tutorial dafür hätte ich definitiv! Und ich glaube da bin ich nicht der Einzigste :D
 
Zurück