zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Uploader problem

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 26.11.2008, 22:05
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 16.09.2008
Beiträge: 29
Skullsplitter befindet sich auf einem aufstrebenden Ast
Standard Uploader problem

Hallo,

ich habe ein kleines Problem und zwar folgendes:

In meinem Usercenter können User ein Anzeigebild (Avatar) hochladen.

Dies geschieht über dieses Formular:
HTML-Code:
<div id="inhalt3">
	<h1>Usercenter - Anzeigebild &auml;ndern</h1>
	<a href="index.php?nav=myaccount">zur&uuml;ck zur &Uuml;bersicht</a><br /><br />
    aktuelles Foto:<br />
    {FOTO}<br />
    <br />
 	<form action="index.php?nav=user&do=saveavatar" method="post" enctype="multipart/form-data" name="step1" id="step1">
        <label>neues Foto:
        <input type="file" name="Foto" id="foto" title="Laden Sie hier ein Foto von Ihnen hoch."/>
        </label>
        <br />
      (max 2MB, nur *.jpg, *.jpeg Dateien, *.gif, wird auf 200x200px verkleinert)
      <br />
      <br />
      <input type="submit" name="speichern" id="speichern" value="speichern" title="Speichern der &Auml;nderungen."/>
    </form><br /><br />
    <form action="index.php?nav=user&do=delavatar" method="post" name="delete">
    <label>
    <input name="deleter" type="checkbox"/> Anzeigebild l&ouml;schen
    </label><br />

    <label>
    <input type="submit" name="loeschen" id="loeschen" value="l&ouml;schen" />
    </label>
    <br />
    </form>
</div>
Wie es sich bei einem Uploadscript gehört ist "enctype="multipart/form-data"" gesetzt.

Wenn nun in der Datei user.php dieser Verweis (nav=user&do=saveavatar) aufgerufen wird, funktioniert das zwar bei mir aufm Lokalhost, jedoch nicht auf meinem Webserver.

Dort lädt der irgendwie ins Unendliche und gibt nur einen weißen Bildschirm aus. Es werden keine Fehlermeldungen oder so angezeigt.

Die Datei wird allerdings auf den Server mit den Rechten, die mittels CHMOD gesetzt wurden, hochgeladen!

Wenn ich ein Bild bei mir lokal hochlade, habe ich das Problem, dass das Bild in einer sehr schlechten Qualität hochgeladen wird. Kann mir das bitte einer erklären?

Hier ein Beispiel:


Hier der Code aus der user.php:
PHP-Code:
    #############################
    //Anzeigebild speichern/hochladen
    #############################
            
case 'saveavatar':
                
//checken ob das Formular abgeschickt wurde
                
if(isset($_POST['speichern']))
                {
                    
//Avatar des Users
                    
if($_FILES['Foto']['tmp_name'] != "")
                    {
                        
//Nur Jpg und Gif erlaubt
                        
if($_FILES['Foto']['type'] == "image/jpeg" OR $_FILES['Foto']['type'] == "image/jpg" OR
                           
$_FILES['Foto']['type'] == "image/pjpeg" OR $_FILES['Foto']['type'] == "image/gif")
                        {
                        
//MAX 2 MB
                            
if($_FILES['Foto']['size'] < 2147483648)
                            {
                                
//hochladen des Fotos mit der upload_foto funktion
                                
$foto upload_foto($_FILES['Foto']['tmp_name'], $_FILES['Foto']['type'], "design/images/user_pics/");
                                if(
$foto != "false")
                                {
                                    
//Name des Bildes
                                    
if($_FILES['Foto']['type'] == "image/jpeg" OR $_FILES['Foto']['type'] == "image/jpg" OR
                                       
$_FILES['Foto']['type'] == "image/pjpeg")
                                    {
                                        
$neuer_name "design/images/user_pics/".$_SESSION['u_id'].".jpg";
                                    }
                                    else
                                    {
                                        
$neuer_name "design/images/user_pics/".$_SESSION['u_id'].".gif";
                                    }
                                    
                                    
//ermitteln des alten Bildes
                                    
$altesbild_sql mysql_query("SELECT `Foto` FROM `benutzer_daten`
                                                                WHERE `users_BenutzerID` = '"
.$_SESSION['u_id']."'");
                                    
                                    
//Wenn vorhanden, wird es gelöscht
                                    
if(mysql_num_rows($altesbild_sql) == 1)
                                    {
                                        
$altesbild_res mysql_fetch_array($altesbild_sql);
                                        
                                        
//löschen des alten Bildes, wenn gefunden
                                        
if(file_exists($altesbild_res[0]))
                                        {
                                            
//löschen
                                            
unlink($altesbild_res[0]);
                                        }
                                    }
                                    
                                    
//Updaten der Datenbank
                                    
$update_foto mysql_query("UPDATE `benutzer_daten` SET `Foto` = '".$neuer_name."' 
                                                                WHERE `users_BenutzerID` = '"
.$_SESSION['u_id']."'");
                                    
//Umbennen des Fotos
                                    
rename($foto$neuer_name);
                                    
                                    
//Laden der Templatefile - gibt die Erfolgsmeldung zurück
                                    
$save_tmp_file "design/templates/user_speichern.html";
                                    
$save_template = new template($save_tmp_file);
                    
                                    
//Ausgabe der Erfolgsmeldung (TEMPLATE)
                                    
$inhalt $save_template->returnTemplate();    
                                }
                                else
                                {
                                    
//Fehler - CHMOD konnte nicht gesetzt werden
                                    
$reg_tmp_file "design/templates/error.html";
                                    
$reg_template = new template($reg_tmp_file);                
                                    
$reg_template->ersetzen('ERROR',
                                    
'Das Foto <b>'.$_FILES['Foto']['name'].'</b> konnte nicht hochgeladen werden!<br /><br />
                                                                      <a href="javascript:history.back();">zurück</a>'
);
                                    
$inhalt $reg_template->returnTemplate();    
                                }
                            }
                            else
                            {
                                
//Fehler - größer als 2 MB
                                
$reg_tmp_file "design/templates/error.html";
                                
$reg_template = new template($reg_tmp_file);                
                                
$reg_template->ersetzen('ERROR',
                                
'Das Foto <b>'.$_FILES['Foto']['name'].'</b> ist größer als 2 MB!<br /><br />
                                                                  <a href="javascript:history.back();">zurück</a>'
);
                                
$inhalt $reg_template->returnTemplate();    
                            }
                        }
                        else
                        {
                            
//Fehler Falsches Format
                            
$reg_tmp_file "design/templates/error.html";
                            
$reg_template = new template($reg_tmp_file);                
                            
$reg_template->ersetzen('ERROR'
                            
'Das Foto <b>'.$_FILES['Foto']['name'].'</b> hat kein gültiges Format!<br /><br />
                                                              <a href="javascript:history.back();">zurück</a>'
);
                            
$inhalt $reg_template->returnTemplate();    
                        }
                    }
                }
                else
                {
                    
//Aufrufen der Seite ohne Formular abzuschicken
                    
$reg_tmp_file "design/templates/error.html";
                    
$reg_template = new template($reg_tmp_file);                
                    
$reg_template->ersetzen('ERROR''<b>Sie haben einen ungültigen Verweis aufgerufen!</b><br /><br />
                                                  <a href="javascript:history.back();">zurück</a>'
);
                    
$inhalt $reg_template->returnTemplate();    
                }
            break; 
Hier die "upload_foto"-Funktion

PHP-Code:
function upload_foto($filename$type$path)
{
    
//$path
    //liefert das Verzeichnis - ob das Bild von einem User oder Unternehmen hochgeladen wird!
    
    //eindeutiger zufallsname für das Bild!
    
$zufallsname md5(uniqid(rand(), TRUE));
    
    
$endung 'JPG';
    
    if(
$type == "image/jpeg" OR $type == "image/jpg"    OR $type == "image/pjpeg")
    {
        
$name $zufallsname.".jpg";
    }
    else
    {
        
$name $zufallsname.".gif";
        
$endung 'GIF';
    }
    
    
//Verschieben
    
if(move_uploaded_file($filename$path.$name))
    {    
        
//schreib- und leserechte für das bild 
        //sonst fehler auf servern mit hohen sicherheitseinstellungen
        
if(chmod($path.$name0755))
        {
            
//Bildmaße ermitteln
            
$abmessungen getimagesize($path.$name);
            
            
//Die Datei
            
$file $path.$name;
            
            
$width_orig $abmessungen[0];
            
$height_orig $abmessungen[1];
            
            
//Maximale Höhe des neuen Bildes!
            
$width_neu 200;
            
$height_neu 200;
            
            
//name des Bildes
            
$thumb_name $path.$name;
            
            
//Erzeugen eines neuen Bildes mit den Abmessungen
            
$image_neu imagecreate($width_neu$height_neu);
            
            if(
$endung == "JPG")
            {
                
$image_alt imagecreatefromjpeg($file);
                
imagecopyresized($image_neu$image_alt0000$width_neu$height_neu$width_orig$height_orig);
                    
                
imagejpeg($image_neu$thumb_name100);
            }
            else
            {
                
$image imagecreatefromgif($file);
                
imagecopyresized($image_neu$image_alt0000$width_neu$height_neu$width_orig$height_orig);

                
imagegif($image_neu$thumb_name100);
            }
            
            return 
$thumb_name;
        }
        
//Schreibrechte vergeben fehlgeschlagen
        
else
        {
            return 
false;
        }
    }
    
//Bild hochladen fehlgeschlagen
    
else
    {
        return 
false;
    }

Ich habe im Hintergrund, für die Templates, die Template-Klasse, die ich mit der Hilfe von ein paar Usern hier aus dem Forum geschrieben habe. (hier die Klasse)

Vielen, vielen herzlichen Dank für eure Hilfe!

Bin über jeden Beitrag sehr dankbar!

Gruß
Stefan
Angehängte Grafiken
Dateityp: jpg 1.jpg (33,3 KB, 38x aufgerufen)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 26.11.2008, 22:09
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.735
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Verwende mal die „imagecreatetruecolor()“- statt die „imagecreate()“-Funktion.
__________________
Markus Wulftange
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 26.11.2008, 22:17
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 16.09.2008
Beiträge: 29
Skullsplitter befindet sich auf einem aufstrebenden Ast
Standard

Nabend!

Das ging ja ruck zuck!

Mit der Funktion imagecreatetruecolor() ist das Bild schon mal in der richtigen Qualität.

Vielen herzlichen Dank!

Auf dem Server hat sich allerdings nicht geändert.
Hatte schon Hoffnungen, dass die Funktion imagecreate() ihm zugesetzt hat, aber dem war leider nicht so.

Er liefert immer noch ein weißes Bild.

Gruß
Mit Zitat antworten
  #4 (permalink)  
Alt 27.11.2008, 07:59
Benutzerbild von paracelsus
be simple
XHTMLforum-Kenner
 
Registriert seit: 16.07.2007
Ort: Kapfenberg - Austria, einige meinen am "Anus Mundi"
Beiträge: 4.788
paracelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nett
Standard

Möglicherweise hat das Bild denselben Dateinamen, und das alte befindet sich daher noch im Browsercache?
Mit Zitat antworten
  #5 (permalink)  
Alt 27.11.2008, 08:12
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 16.09.2008
Beiträge: 29
Skullsplitter befindet sich auf einem aufstrebenden Ast
Standard

Hmh das glaube ich weniger.

Habe das ganze auch auf meinem Laptop versucht und dort hat es auch nicht geklappt.

Entwickle und schreibe sonst am PC.

Könnte es eventuell mit den Schreibrechten zusammenhängen?

Ich habe derzeit, auf grund dieses Themas, auf dem Ordner, indem die Bilder landen, CHMOD 0755.

Das Bild erhält ebenfalls CHMOD 0755.

Könnte es eventuell damit zusammenhängen?

Oder ist einfach mein Upload-Script nicht Fehlerfrei?

Gruß
Skull
Mit Zitat antworten
  #6 (permalink)  
Alt 27.11.2008, 09:49
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.034
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Zitat:
Zitat von Skullsplitter Beitrag anzeigen
Könnte es eventuell mit den Schreibrechten zusammenhängen?

Ich habe derzeit, auf grund dieses Themas, auf dem Ordner, indem die Bilder landen, CHMOD 0755.
Wird denn eine Datei in dem Verzeichnis angelegt?
Wenn ja, dann kann es schon mal nicht an den Rechten liegen.

Zitat:
Zitat von Skullsplitter Beitrag anzeigen
Das Bild erhält ebenfalls CHMOD 0755.
Willst du die Grafik ausführen? Für Dateien reicht 644.
Mit Zitat antworten
  #7 (permalink)  
Alt 27.11.2008, 11:05
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 16.09.2008
Beiträge: 29
Skullsplitter befindet sich auf einem aufstrebenden Ast
Standard

Hallo.

Ja, das Bild wird im Verzeichnis angelegt.

Okay, dann werde ich den CHMOD mal auf 644 ändern beim Upload.

Sieht jemand eventuell einen Fehler im Script?

Danke,
Gruß
Mit Zitat antworten
  #8 (permalink)  
Alt 27.11.2008, 11:23
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.975
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Ich kann kein PHP, aber üblicherweise geben Funktionen als Rückgabewert informationen über Erfolg oder Mißerfolg einer Operation, ist das in PHP nicht so?
Oder warum prüfst du das nicht?
Mit Zitat antworten
  #9 (permalink)  
Alt 27.11.2008, 12:24
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 16.09.2008
Beiträge: 29
Skullsplitter befindet sich auf einem aufstrebenden Ast
Standard

Apropo prüfen:

Bei meine Fehlerrückgabewerte werden als boolische Werte zurück gegeben und ich prüfe, ob sie mit $upload != 'false'.

Also als wären sie Strings.

Werde das mal ändern.

Wenn beim Upload ein Fehler auftritt, wird "false" zurück gegeben. Also gibt die Funktion schon einen Fehler zurück.

Glaube du meinst aber eine art Error-Handler, der auch eine dementsprechende Meldung liefert, richtig?

Najo finde das relativ schlecht, weil was interessiert einen User eine Fehlermeldung wie "CHMOD konnte nicht gesetzt werden".

Da bleibe ich beim False und gebe eine allgemeine Fehlermeldung zurück, die auch für den User verständlich ist.

Danke für deinen Beitrag. Dank dir bin ich auf den Fehler mit dem Variablentyp gestoßen!
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 27.11.2008, 12:43
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.975
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Skullsplitter Beitrag anzeigen
Glaube du meinst aber eine art Error-Handler, der auch eine dementsprechende Meldung liefert, richtig?

Najo finde das relativ schlecht, weil was interessiert einen User eine Fehlermeldung wie "CHMOD konnte nicht gesetzt werden".

Da bleibe ich beim False und gebe eine allgemeine Fehlermeldung zurück, die auch für den User verständlich ist.
Ja toll, das heißt du wirst nie erfahren wenn etwas falsch läuft.

Wenn du die Fehlermeldungen nicht anzeigen lassen willst, kannst du sie natürlich auch in eine Datei schreiben. Aber so wie du es jetzt praktizierst muss du schon viel Gottvertrauen haben und merkst aber wie schwierig es ist, wenn mal was nicht läuft, die Stelle des Fehlers zu finden.


[EDIT]Weil ich grad mal den Code etwas ganauer angeschaut habe, so wie du es jetzt machst würde dir der Code in jeder anderen Programmiersprache um die Ohren fliegen. Leider ist PHP ja so gutmütig, wie der IE wenn es um Fehler im JS Code geht, dass es freiwillig nur schwere Syntaxfehler meldet. Ich würde ohne error_reporting(E_ALL); nicht anfangen zu entwickeln

Geändert von protonenbeschleuniger (27.11.2008 um 12:47 Uhr)
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Font der Überschrift ändern (Problem) artist CSS 2 07.12.2007 10:01
Design zu CSS/HTML verarbeiten - Problem häufen sich. Grafikamateur CSS 2 06.08.2007 09:57
Problem mit WordPress und dem Bilder Upload Maxefix Serveradministration und serverseitige Scripte 0 19.12.2006 14:58
Problem bei Div's - zwei mal das gleiche und doch nicht ... Niriel CSS 10 09.06.2005 17:39
Problem mit einem CSS Layout nARC CSS 20 21.05.2005 06:28


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:26 Uhr.