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
  #11 (permalink)  
Alt 27.11.2008, 13:04
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.733
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Zitat:
Zitat von Skullsplitter Beitrag anzeigen
Najo finde das relativ schlecht, weil was interessiert einen User eine Fehlermeldung wie "CHMOD konnte nicht gesetzt werden".
Dass eine Funktion im Fehlfall den Grund des Fehlers zurückgibt, muss nicht heißen, dass du diesen direkt an den Benutzer zurückgibst.
Für dich als Entwickler ist es jedoch hilfreich, neben der Tatsache, dass ein Fehler auftrat, auch zu erfahren, was der mögliche Grund dafür ist.

Und noch ein Hinweis zum Programmierstil: Da bei deinem Konstrukt fast jeder „else“-Zweig eine Abbruchbedingung ist, kann deine Schreibweise schnell unübersichtlich werden (was du ja schon durch Kommentare zu verhindern suchst):
PHP-Code:
if (foo) {
    if (
bar) {
        if (
baz) {
            
// alle Bedingungen sind erfüllt
        
} else {
            return 
errorBaz;
        }
    } else {
        return 
errorBar;
    }
} else {
    return 
errorFoo;

Übersichtlicher wird es, wenn du die Abbruchbedingungen zu Anfang aufzählst, so bleibt die Hierarchie flach:
PHP-Code:
if (!foo) {
    return 
errorFoo;
}
if (!
bar) {
    return 
errorBar;
}
if (!
baz) {
    return 
errorBaz;
}
// alle Bedingungen sind erfüllt 
__________________
Markus Wulftange
Mit Zitat antworten
Sponsored Links
  #12 (permalink)  
Alt 27.11.2008, 14:38
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 16.09.2008
Beiträge: 29
Skullsplitter befindet sich auf einem aufstrebenden Ast
Standard

Hmh.

So habe ich das ganze noch garnicht betrachtet.

Werde mir das ganze mal ansehen und schauen, dass ich das ein bisschen besser Handeln kann mit den Errors.

Fehler so zu behandeln, wie du es beschrieben hast, ist aber nur in Funktionen möglich?
Weil sonst habe ich ja kein return und die Funktion wird ja nicht unterbrochen.

Angenommen ich prüfe, ob ein Formular abgeschickt wurde, indem ich den Button überprüfe.

PHP-Code:
if(isset($_POSt['button']))
{
   
//speichern
}
else
{
  
//Fehler

Würde es auch funktionieren, wenn ich das dann so mache:
PHP-Code:
if(!isset($_POSt['button']))
{
   
//Fehler
   
die();
  
//oder besser exit();?
}

//speichern 
So könnte man das handeln, wenn es keine Funktion ist oder?

@protonenbeschleuniger:
error_reporting(E_ALL | E_STRICT) läuft bei mir schon mit, keine angst.

Der gezeigte Code, sind jeweils nur Fragmente aus einer Datei.

Geändert von Skullsplitter (27.11.2008 um 14:53 Uhr)
Mit Zitat antworten
Sponsored Links
  #13 (permalink)  
Alt 27.11.2008, 14:54
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
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

PHP-Code:
$abmessungen getimagesize($path.$name); 
Sowas z.b. woher bist du so sicher dass $path.$name eine existierende Datei ist? wenn nicht erfährst du es nicht. Ist es wirklich ein Bild, d.h. ist die Funktion getimagesize() erfolgreich gewesen? Wenn nicht hantierst du später mit undefinierten Werten rum.

PHP-Code:
 $image_neu imagecreate($width_neu$height_neu); 
imagecreate() gibt laut Doku false zurück, wenn kein Bild erzeugt werden kann - wird nicht abgefragt.

usw. bei den folgenden image... Funktionen

Und da es offensichtlich Probleme gibt, tritt der Fehler irgendwo in einem von diesen Aufrufen auf. Nur hat niemand die Chance diesen zu finden.
Mit Zitat antworten
  #14 (permalink)  
Alt 27.11.2008, 14:56
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 16.09.2008
Beiträge: 29
Skullsplitter befindet sich auf einem aufstrebenden Ast
Standard

Hmh gute Einwende.

Werde sie gleich mal abprüfen lassen
Mit Zitat antworten
  #15 (permalink)  
Alt 27.11.2008, 15:13
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.733
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Zitat:
Zitat von Skullsplitter Beitrag anzeigen
So könnte man das handeln, wenn es keine Funktion ist oder?
Das ist eine Möglichkeit. Weitere wären Ausnahmen oder eher unschöne Konstrukte wie etwa folgendes:
PHP-Code:
$error false;
do {
    if (!
foo) {
        
$error errorFoo;
        break;
    }
    
// …
} while (false);
if (
$error) {
    
// Fehlerbehandlung

__________________
Markus Wulftange
Mit Zitat antworten
  #16 (permalink)  
Alt 27.11.2008, 16:11
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 16.09.2008
Beiträge: 29
Skullsplitter befindet sich auf einem aufstrebenden Ast
Standard

Hier mal meine überarbeitete Version:

user.php
PHP-Code:
            case 'saveavatar':
                
//checken ob das Formular abgeschickt wurde
                
if(!isset($_POST['speichern']))
                {
                     
//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();    
                
                    
//Script beenden
                    //die();
                
}
                
                
//Avatar des Users
                
if(!$_FILES['Foto']['tmp_name'] == "")
                {
                    
//Fehler Kein Foto ausgewählt zum Hochladen
                    
$reg_tmp_file "design/templates/error.html";
                    
$reg_template = new template($reg_tmp_file);                
                    
$reg_template->ersetzen('ERROR'
                    
'Sie haben kein Foto ausgewählt!<br /><br />
                                                          <a href="javascript:history.back();">zurück</a>'
);
                    
$inhalt $reg_template->returnTemplate();
                
                    
//Script beenden
                    //die();
                
}
                
                
//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")
                {
                    
//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();    
                
                    
//Script beenden
                    //die();
                
}
                
                
//wenn größer wie 2 MB fehler
                //2097152 == 2 MB
                
if($_FILES['Foto']['size'] > 1024)
                {
                    
//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();    
                    
                    
//Script beenden
                    //die();)
                
}
                
        
//Upload
                //Fehlerspeicher für Upload
                
$error '';
                
                
//Status | true = erfolgreich; false = fehler
                
$stauts true;
                
                
//Pfad
                
$path "design/images/user_pics/";
                
                
//hochladen des Fotos mit der upload_foto funktion
                
$foto upload_foto($_FILES['Foto']['tmp_name'], $_FILES['Foto']['type'], $path$status$error);
                
                if(
$status)
                {
                    
//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
                    
if(!rename($foto$neuer_name))
                    {
                        
//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 neue Foto konnte nicht umbenannt werden!<br /><br />
                                                      <a href="javascript:history.back();">zurück</a>'
);
                        
$inhalt $reg_template->returnTemplate();
                        
                        
//Script abbrechen
                        //die();
                    
}
                        
                    
//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',$error.'<br /><br />
                                                  <a href="javascript:history.back();">zurück</a>'
);
                    
$inhalt $reg_template->returnTemplate();    
                }
            break; 
Hier mit weniger else und mehr Abfrage auf false
$error = '' -> error meldung
$status => true bei erfolg, false bei misserfolg
werden mitgeschickt

hier die funktion:
PHP-Code:
function upload_foto($filename$type$path, &$status, &$error)
{
    
//$path
    //liefert das Verzeichnis - ob das Bild von einem User oder Unternehmen hochgeladen wird!
    //$status liefert true oder false bei Erfolg/Misserfolg
    //$error liefert die Fehlermeldung
    
    //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))
    {
        
$error "upload";
    }
        
    
//schreib- und leserechte für das bild 
    //sonst fehler auf servern mit hohen sicherheitseinstellungen
    
if(!chmod($path.$name0644))
    {
        
$error "chmod";
    }
    
    
//Falls die Datei nicht existiert
    
if(!file_exists($path.$name))
    {
        
$error "datei";
    }
    
    
//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 imagecreatetruecolor($width_neu$height_neu);
    if(!
$image_neu)
    {
        
$error "true color";
    }
    
    if(
$endung == "JPG")
    {
        
$image_alt imagecreatefromjpeg($file);
        
        if(!
$image_alt)
        {
            
$error "create";
        }
        
        if(!
imagecopyresized($image_neu$image_alt0000$width_neu$height_neu$width_orig$height_orig))
        {
            
$error "copy";
        }
            
        if(!
imagejpeg($image_neu$thumb_name100))
        {
            
$error "image";
        }
    }
    else
    {
        
$image imagecreatefromgif($file);
        
        if(!
$image_alt)
        {
            return 
"create";
        }
        
        if(!
imagecopyresized($image_neu$image_alt0000$width_neu$height_neu$width_orig$height_orig))
        {
            return 
"copy";
        }

        if(!
imagegif($image_neu$thumb_name100))
        {
            return 
"image";
        }
    }
    
    if(!empty(
$error))
    {
        
$status false;
        return 
$status $error;
        die();
    }
    
    
$status true;
    return 
$status $thumb_name;

Die Fehlermeldungen sind nur zum Testen. Da käme schon was vernünftiges hin.

Habe ich soweit das Prinzip richtig verstanden?


------------

Neues Problem, was wahrscheinlich auch auf dem Webserver die Ursache war...:

jetzt geht es aufm Localhost auch nicht mehr, wenn ich die "die();" bzw "exit();" setze. ==> Leere Seite

In einer Testdatei habe ich versucht eine If-Schleife mit "die()" bzw "exit()" zu verlassen und es hat geklappt...
Dachte mir, vielleicht hat ja mein apache ne macke ^^

Bewirkt "die()" bzw. "exit()" ein Totalabbruch des kompletten Scripts?
Wenn ja, wäre das das Problem:

ich include die user.php in die index.
Dann würde ja rein theoretisch das Script an der Stelle des Includes abgebrochen werden, oder?
Mit Zitat antworten
  #17 (permalink)  
Alt 27.11.2008, 16:14
Benutzerbild von kampfgnom
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 22.11.2006
Ort: Radebeul
Beiträge: 1.808
kampfgnom befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
exit — Gibt eine Meldung aus und beendet das aktuelle Skript
Zitat:
die — Entspricht exit()
siehe Manual
__________________
Meine Spielwiese: http://blog.kanedo.net
Ich bei Flickr? Da: Flickr: Fotostream von kanedo-projekt
Für open Source Liebhaber: open Com

Auch ich Zwitschere als @kanedo
Mit Zitat antworten
  #18 (permalink)  
Alt 27.11.2008, 16:38
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 16.09.2008
Beiträge: 29
Skullsplitter befindet sich auf einem aufstrebenden Ast
Standard

Hmh najo.

Wenn die die() wegfallen, was habe ich dann noch für Optionen?

Mit fällt jetzt nix mehr ein.
Mit Zitat antworten
  #19 (permalink)  
Alt 27.11.2008, 18:41
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.733
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Alternativen habe ich dir bereits genannt. Ich rate dir aber zu Ausnahmen.
__________________
Markus Wulftange
Mit Zitat antworten
Sponsored Links
  #20 (permalink)  
Alt 28.11.2008, 09:48
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
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, wie gesagt, kein PHP, aber gibt die() nicht eine Meldung aus?
Dann müßtest du so wenigstens was sehen
PHP-Code:
die $status $error
die() ist halt mit Vorsicht zu genießen, besser du verabschiedest die freundlich und baust einen Debug Modus ein (um später den Besucher nicht deatilierte Meldungen zu zeigen).
Mit Zitat antworten
Sponsored Links
Antwort


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 16:30 Uhr.