Ramiel Geschrieben 13. März 2009 Geschrieben 13. März 2009 Hi Leute! Ich hab mir gedacht ich prog mal einen FileUpload zum Üben aber ich bekomm dabei ziemlich viele fehler könnte mir da jemand helfen? <?php require_once('connect.inc.php'); $target = "D/OnlinePics"; $max_size = 1500; $uploadfile=$_FILES['upload']['tmp_name']; $uploadname=$_FILES['upload']['name']; $uploadtype=$_FILES['upload']['type']; $uploaddesc=$_POST['desc']; $tempfile=fopen($uploadfile, 'rb'); $filedata=fread($tempfile, filesize($uploadfile)); $filedata=addslashes($filedata); switch($uploadtype) { case: image/gif case: image/jpeg case: image/jpg case: image/png break; echo ('File wurde erfolgreich hochgeladen!'); default: exit('Die Datei hat keinen unterstützten Datentyp!'); } if($_FILES['upload']['type']>$maxsize){ exit('Die Hochgeladene Datei ist zu groß!\n Es duerfen nur Dateien bis 1,5MB hochgeladen werden!'); } $uploadname= $target . time() . $_SERVER['REMOTE_ADDR'] . $_FILES['upload']['type']; $sql="insert into filestore set FileName='$uploadname', MimeType='$uploadtype', Description='$uploaddesc', FileData='$filedata'"; if(!@mysql_query($sql)) { exit('Datenbankfehler beim Einfügen der Datei:' . mysql_error()); } if(is_uploaded_file($uploadfile)) { echo '<p>Datei erfolgreich als $uploadname gespeichert!</p>'; }else{ exit"<p>Datei konnte nicht gespeichert werden!</p>"; } ?>[/PHP] ok, klar das mit switch ist schon mal falsch da es immer ausgegeben wird egal ob bild oder nicht und selbst wenn es eine bilddatei ist ist es falsch weil ja dann immer gleich die meldung ausgegeben wird und der rest dafür unwichtig ist. ansonsten finde ich irgendwie keinen fehler plz help! Zitieren
flashpixx Geschrieben 13. März 2009 Geschrieben 13. März 2009 Wie lauteten die Fehlermeldungen? Außerdem sollte man keine Dateien in einer Datenbank speichern, bzw Du solltest darauf aufpassen, dass die Binärdaten richtig maskiert sind Phil Zitieren
Ramiel Geschrieben 13. März 2009 Autor Geschrieben 13. März 2009 naja fehler: $maxsize){ exit('Die Hochgeladene Datei ist zu groß!\n Es duerfen nur Dateien bis 1,5MB hochgeladen werden!'); } $uploadname= $target . time() . $_SERVER['REMOTE_ADDR'] . $_FILES['upload']['type']; $sql="insert into filestore set FileName='$uploadname', MimeType='$uploadtype', Description='$uploaddesc', FileData='$filedata'"; if(!@mysql_query($sql)) { exit('Datenbankfehler beim Einfügen der Datei:' . mysql_error()); } if(is_uploaded_file($uploadfile)) { echo ' Datei erfolgreich als $uploadname gespeichert! '; }else{ exit" Datei konnte nicht gespeichert werden! "; } ?> aber wenn ich die daten so einfüge werden sie doch nicht in der datenbank gespeichert sondern nur die namen oder? und noch was wie kann ich den speicherort auf setzen ? ich glaube nicht das einfach $target reicht Zitieren
flashpixx Geschrieben 13. März 2009 Geschrieben 13. März 2009 $filedata=fread($tempfile, filesize($uploadfile)); $sql="insert into filestore set FileName='$uploadname', MimeType='$uploadtype', Description='$uploaddesc', FileData='$filedata'"; Was machst Du denn dann bitte mit diesen Zeilen? Außerdem ist das SQL Statement nicht korrekt. Phil Zitieren
Ramiel Geschrieben 13. März 2009 Autor Geschrieben 13. März 2009 naja schaun wir mal das das programm funzt und dann können wir darüber reden. denn ich glaub nicht das es daran liegt und was soll an meiner syntax falsch sein? Zitieren
flashpixx Geschrieben 13. März 2009 Geschrieben 13. März 2009 und was soll an meiner syntax falsch sein? MySQL Datenbankhandbuch: MySQL-Sprachreferenz mit vielen Beispielen: INSERT Außerdem ist Die Frage nicht beantwortet welche Fehler erscheinen bzw solltest Du auch einmal Dir die Warnings anzeigen lassen Phil Zitieren
Ramiel Geschrieben 13. März 2009 Autor Geschrieben 13. März 2009 naja sobald ich auf hochladen in der html-datei klicke bekomme ich die seite so angezeigt wie ich sie 4 posts ober dir beschrieben habe und in der fehlerkonsole steht auch nichts auser html-mist und was die sql befehle angehen ich glaube einfach nicht das die falsch sind weil ich sie schon in kleineren sachen so geschrieben habe und sie gingen aber wie gesagt ist ja auch egal ich möchte jetzt mla den eigentlichen code zum laufen bringen Zitieren
flashpixx Geschrieben 13. März 2009 Geschrieben 13. März 2009 naja sobald ich auf hochladen in der html-datei klicke bekomme ich die seite so angezeigt wie ich sie 4 posts ober dir beschrieben habe und in der fehlerkonsole steht auch nichts auser html-mist PHP: error_reporting - Manual Auf welchem Error Report steht Deine Konfiguration? Ich empfehle zur Entwicklung E_ALL aber wie gesagt ist ja auch egal ich möchte jetzt mla den eigentlichen code zum laufen bringen Deine Fehler sind so nicht nachvollziehbar, da niemand Deine Umgebung so zur Verfügung hat. Es sind semantischen Fehlern (switch bzw break ist falsch gesetzt, Variablen sind nicht konsequent benannt) enthalten. Schalte das Error Reporting wie oben beschrieben ein, korrigiere diese Fehler / Warnings, ich gehe davon aus, dass einige enthalten sein werden und poste dann den korrigierten Code, ggf erkennst Du damit auch Deine Fehler selbst Generell möchte ich hier Dir keinen korrigierten fertigen Code posten, da damit der Lerneffekt nicht vorhanden wäre. Phil Zitieren
Ramiel Geschrieben 14. März 2009 Autor Geschrieben 14. März 2009 folgendes ich hab noch nie mit error reporting gearbeitet wenn ich error_reporting(E_ALL); hinzuschreibe bekomme ich die gleiche ausgabe auf der seite wie vorhin. muss ich etwa noch was in der php.ini setzen? was die switch abfrage angeht ich weis normalerweise muss man nach jedem case eine break haben aber ich habe mir gedacht so spare ich mir ein paar zeilen ich hab mir gedacht so fragt er ab ob der typ jpeg oder jpg oder png oder gif ist und dann gibt er die meldung aus das es geht und wenn das nicht der fall ist soll er aussteigen. was er aber nicht macht. was die bennung der variablen angeht seh ich irgendwie keine probleme. und nein, ich möchte auch keinnen fertig korrigierten code Zitieren
Ramiel Geschrieben 14. März 2009 Autor Geschrieben 14. März 2009 ok wenn ich die error reorting ganz am anfang hinzufüge kommt was interessantes: wenn ich im html formular auf hochladen klicke möchte er mir die upload.php herunterladen was könnte denn da für ein fehler sein? Zitieren
flashpixx Geschrieben 14. März 2009 Geschrieben 14. März 2009 folgendes ich hab noch nie mit error reporting gearbeitet wenn ich error_reporting(E_ALL); hinzuschreibe bekomme ich die gleiche ausgabe auf der seite wie vorhin. muss ich etwa noch was in der php.ini setzen? setze das ErrorReporting in Deiner php.ini und starte den Dienst neu. Der unten genannte Fehler muss dann erscheinen was die switch abfrage angeht ich weis normalerweise muss man nach jedem case eine break haben aber ich habe mir gedacht so spare ich mir ein paar zeilen ich hab mir gedacht so fragt er ab ob der typ jpeg oder jpg oder png oder gif ist und dann gibt er die meldung aus das es geht und wenn das nicht der fall ist soll er aussteigen. was er aber nicht macht. PHP: switch - Manual Doch, Du musst exakter arbeite: $max_size = 1500; [/PHP] bzw [PHP] if($_FILES['upload']['type']>$maxsize) Verwende Konstanten und keine Variablen Phil Zitieren
Ramiel Geschrieben 14. März 2009 Autor Geschrieben 14. März 2009 ja, aber in deinem switch links steht das: # <?php switch ($i) { case 0: case 1: case 2: echo "i is less than 3 but not negative"; break; case 3: echo "i is 3"; } ?> [/PHP] und das ist bei mir doch ziemlich das gleiche wenn hier i 0,1 oder 2 ist dann kommt i is less than 3 . und das gleihce ist bei mir doch auch [PHP]switch($uploadtype) { case: image/gif case: image/jpeg case: image/jpg case: image/png break; echo ('File wurde erfolgreich hochgeladen!'); default: exit('Die Datei hat keinen unterstützten Datentyp!'); } wenn der typ gif jpeg jpg oder png ist wirds hochgeladen angezeigt wenn der typ ein anderer ist steigt es aus. und was maxsize angeht hab ich schon gesehen Zitieren
flashpixx Geschrieben 14. März 2009 Geschrieben 14. März 2009 Überlege Dir was $uploadtype für ein Typ von Variable ist und schau Dir Deinen switch genau (!) an Phil Zitieren
Ramiel Geschrieben 14. März 2009 Autor Geschrieben 14. März 2009 $_FILES['upload']['type']; gibt den mime-type der datei in einem array aus! meinst du das? aber was ist mit error_reporting(E_ALL); warum möchter er wenn ichs dazu schreibe die datei herunterladen? Zitieren
flashpixx Geschrieben 14. März 2009 Geschrieben 14. März 2009 $_FILES['upload']['type']; Ich meine den Typ der Variablen, nicht den Inhalt aber was ist mit error_reporting(E_ALL); warum möchter er wenn ichs dazu schreibe die datei herunterladen? Dann stimmt wohl nicht der MimeTyp Deines Webservers. Prüfe Deine Konfiguration Phil Zitieren
Ramiel Geschrieben 15. März 2009 Autor Geschrieben 15. März 2009 ok... ich gebe auf bitte sag mir die lösung Zitieren
robotto7831a Geschrieben 15. März 2009 Geschrieben 15. März 2009 Hallo, das kleine Statement kann ich auf Grund der ganzen Fehler noch nicht mal ohne Fehler anzeigen lassen. switch($uploadtype) { case: image/gif case: image/jpeg case: image/jpg case: image/png break; echo ('File wurde erfolgreich hochgeladen!'); default: exit('Die Datei hat keinen unterstützten Datentyp!'); } [/php] Wenn ich großzügig rechne, dann sehe ich vier Fehler. Frank Zitieren
Ramiel Geschrieben 15. März 2009 Autor Geschrieben 15. März 2009 also so ein spaziergang mit dem hund vollbringt wunder. wieso sollte ich denn einen echo ausgeben wenn das skript noch weiter arbeiten muss? ich muss einfach hinter jedem ein break schreiben - dann steigt er aus dem switch aus und macht weiter - es ist kein echo nötig! und wenn es kein typ davon ist macht er ein exit Zitieren
flashpixx Geschrieben 15. März 2009 Geschrieben 15. März 2009 Schau Dir einmal exakt den Syntax einer Switchanweisung an: http://de2.php.net/manual/de/control-structures.switch.phphttp://de2.php.net/manual/de/control-structures.switch.php und vergleiche sie einmal mit Deinem Syntax Phil Zitieren
robotto7831a Geschrieben 16. März 2009 Geschrieben 16. März 2009 wieso sollte ich denn einen echo ausgeben wenn das skript noch weiter arbeiten muss? ich muss einfach hinter jedem ein break schreiben - dann steigt er aus dem switch aus und macht weiter - es ist kein echo nötig! und wenn es kein typ davon ist macht er ein exit Selbst dann bekommt man es nicht ohne Fehlermeldungen hin. Frank Zitieren
Ramiel Geschrieben 17. März 2009 Autor Geschrieben 17. März 2009 die doppelpunkte gehören nach dem mime-type Zitieren
flashpixx Geschrieben 17. März 2009 Geschrieben 17. März 2009 Bitte schalte mal E_ALL ein, wenn Du nur den Doppelpunkt änderst, dann ist es immer noch nicht korrekt Phil Zitieren
Ramiel Geschrieben 18. März 2009 Autor Geschrieben 18. März 2009 kann ich nicht überprüfen da wenn ich auf hochladen drücke will er mir die datei herunterladen. Zitieren
robotto7831a Geschrieben 18. März 2009 Geschrieben 18. März 2009 Er bietet dir die PHP Datei als Download an? Frank Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.