Anzeige

Datei upload mit überschreiben auf Anfrage

Datei upload mit überschreiben auf Anfrage | PSD-Tutorials.de

Erstellt von KATERchen, 12.08.2008.

  1. KATERchen

    KATERchen Aktives Mitglied

    Dabei seit:
    19.03.2006
    Beiträge:
    348
    Geschlecht:
    männlich
    Ort:
    -
    Software:
    -
    Kameratyp:
    -
    Datei upload mit überschreiben auf Anfrage
    Hallo PSD-Gemeinde!
    Erstes Problem: Ich bin noch ein Anfänger
    Zweites Problem: Ich versuche gerade ein Script zu schreiben um ein Foto auf einen Server zu laden. Wenn das Foto aber bereits existiert (Dateiname) soll eine Meldung kommen und eine Abfrage, ob das bestehende Foto überschrieben werden soll.
    Jetzt komme ich aber schon alleine deswegen nicht weiter, weil ich nicht so ganz weiß, wie der PHP-Interpreter arbeitet.
    Mein Foto wird hochgeladen, es wird festgestellt das es schon vorhanden ist und nun wird über ein Submit-Button die Seite neu aufgerufen und soll das Foto überschreiben. Aber ich vermute mal mit dem Abschicken der Seite ist das tmp-Foto bereits schon wieder gelöscht - oder?
    Hier mal das Script:
    PHP:
    1.  
    2. <?php
    3.     if (isset($_REQUEST['doppelt']))
    4.     {
    5.         move_uploaded_file($_FILES['datei']['tmp_name'], 'uploads/' . strtolower($_FILES['datei']['name']));
    6.     }
    7.  
    8.     if (isset($_FILES['datei']))
    9.     {
    10.    
    11.         if (file_exists('uploads/'.$_FILES['datei']['name']))
    12.         {
    13.        
    14.             $exist = strtolower($_FILES['datei']['name']);
    15.             echo 'Datei existiert bereits' .'<br>';
    16.             echo $exist;
    17. ?>
    18.  
    19. <form  method="POST" action="<? $_SERVER["PHP_SELF"];?>" >
    20.     <input type="hidden" value="doppelt"
    21.     <input class="del" name="Send" type="submit" value="Löschen">
    22. </form>
    23.  
    24. <?php        
    25.     }
    26.    }
    27.    
    28.    else {
    29.     move_uploaded_file($_FILES['datei']['tmp_name'], 'uploads/' . strtolower($_FILES['datei']['name']));
    30.   }
    31. ?>
    32. <form method="post" enctype="multipart/form-data">
    33.   <input type="file" name="datei" /><br />
    34.   <input type="submit" value="Upload!" />
    35. </form>
    36.  
     
    #1      
  2. gp812

    gp812 Newbster

    Dabei seit:
    23.12.2007
    Beiträge:
    278
    Geschlecht:
    männlich
    Ort:
    Stuttgart
    Software:
    CS3, EditPlus
    Datei upload mit überschreiben auf Anfrage
    AW: Datei upload mit überschreiben auf Anfrage

    Ich wurde folgendes machen:
    Datei hochladen => Falls doppelt - unter beliebigen Namen temporär speichern (z.B.: timestamp) => dem User Dialog zeigen, ob er alte Datei behalten will => falls ja, die temporär gespeicherte Datei löschen, falls nein, alte Datei löschen, temporäres umbenennen.
     
    #2      
  3. KATERchen

    KATERchen Aktives Mitglied

    Dabei seit:
    19.03.2006
    Beiträge:
    348
    Geschlecht:
    männlich
    Ort:
    -
    Software:
    -
    Kameratyp:
    -
    Datei upload mit überschreiben auf Anfrage
    AW: Datei upload mit überschreiben auf Anfrage

    Ha, sogar noch ein bißchen einfacher als ich es schon im Hinterkopf hatte. Danke :)

    Aber jetzt bin ich gerade auf etwas anderes gestoßen, das mich irritiert...
    Ich habe das Script von einer Lern-CD:
    PHP:
    1.  
    2. <?php
    3.   if (isset($_FILES['datei']))
    4.   {
    5.     echo 'Dateiname: ' . htmlspecialchars($_FILES['datei']['name']);
    6.     echo '<br />tempor&auml;rer Dateiname: ' . htmlspecialchars($_FILES['datei']['tmp_name']);
    7.     echo '<br />Dateigr&ouml;&szlig;e: ' . $_FILES['datei']['size'];
    8.     echo '<br />MIME-Typ: ' . $_FILES['datei']['type'];
    9.    
    10.     move_uploaded_file($_FILES['datei']['tmp_name'],       'uploads/' . basename($_FILES['datei']['name']));
    11.   }
    12. ?>
    13. <form method="post" enctype="multipart/form-data">
    14.   <input type="file" name="datei" /><br />
    15.   <input type="submit" value="Upload!" />
    16. </form>
    17.  
    Das habe ich jetzt auch als "Grundgerüst" für mein Script genommen.
    Eigentlich soll ja das if (isset($_FILES['datei'])) verhindern, daß etwas passiert wenn man auf hochladen drückt ohne eine Datei ausgewählt zu haben. Aber er tut dennoch etwas. Wenn ich jetzt aber FILES mit REQUEST austausche, passiert plötzlich gar nichts mehr.
    Warum das eine und das andere? Ist für mich gerade nicht wirklich verständlich.
     
    #3      
  4. gp812

    gp812 Newbster

    Dabei seit:
    23.12.2007
    Beiträge:
    278
    Geschlecht:
    männlich
    Ort:
    Stuttgart
    Software:
    CS3, EditPlus
    Datei upload mit überschreiben auf Anfrage
    AW: Datei upload mit überschreiben auf Anfrage

    Erstens: vergiss $_REQUEST. Benutze $_POST und $_GET. Dann kannst du nämlich selbst unterscheiden, wo die Variable herkommt.
    Zweitens: du kannst nicht $_FILES mit $_POST u.s.w. ersetzen. $_FILES ist genau deine vom Server temporär gespeicherte Datei. Die ist nur über $_FILES erreichbar.
    Drittens: isset() prüft, ob die Variable existiert, und nicht, ob die leer ist. D.h. mit absenden deines Formulares wird die Post-Variable 'datei' gesendet. Die ist zwar leer, aber die ist da. Deswegen wird isset() mit TRUE ausgeführt.
    Benutze stattdessen !empty($_FILES['datei'])
     
    #4      
  5. KATERchen

    KATERchen Aktives Mitglied

    Dabei seit:
    19.03.2006
    Beiträge:
    348
    Geschlecht:
    männlich
    Ort:
    -
    Software:
    -
    Kameratyp:
    -
    Datei upload mit überschreiben auf Anfrage
    AW: Datei upload mit überschreiben auf Anfrage

    Okay, das isset nicht prüft ob etwas leer ist vergesse ich immer wieder...
    Aber das mit dem !empty funktioniert auch nicht. Er versucht dennoch etwas hochzuladen.
    Das ich FILES und POST nicht ohne weiteres austauschen kann ist schon klar, dachte nur bei der Übernahme nach dem Abschicken in die if-Abfrage währe das so ziemlich egal da ich ja nicht die Datei prüfen will sondern ob überhaupt was da ist.

    [edit]
    Okay, war fast richtig.
    Mit if (!empty($_FILES['datei']['size']) ) geht es jetzt.
     
    Zuletzt bearbeitet: 13.08.2008
    #5      
  6. KATERchen

    KATERchen Aktives Mitglied

    Dabei seit:
    19.03.2006
    Beiträge:
    348
    Geschlecht:
    männlich
    Ort:
    -
    Software:
    -
    Kameratyp:
    -
    Datei upload mit überschreiben auf Anfrage
    AW: Datei upload mit überschreiben auf Anfrage

    Sorry für's Doppelpost, aber ich wollte nicht extra nen neuen Thread aufmachen.
    Ich bin langsam am verzweifeln. Seit Studen versuche ich mit einer foreach-Schleife einen simplen Datei-Upload hin zu bekommen, aber es klappt einfach nicht. Habe jetzt eigentlich schon alle Möglichkeiten durchprobiert, aber ohne Erfolg. Mitunter kommen Fehlermeldungen, in dem Beispiel jetzt kommt gar nix - die Datei verschwindet einfach im Nirvana...
    Kann mal jemand nen Blick drauf werfen und mir sagen, wo der Fehler liegt?

    PHP:
    1.  
    2. <?php
    3.     if (isset ($_REQUEST['submit']))
    4.     {
    5.  
    6.         foreach($_FILES['datei']['name'] as $org_name)
    7.         {    
    8.            move_uploaded_file($org_name['tmp_name'] , 'uploads/' . $org_name['name']);
    9.         }  
    10.  
    11.     }
    12.  
    13. ?>
    14.  
    15.  
    16.  
    17. <form  method="post" enctype="multipart/form-data">
    18.   <input type="file" name="datei[]" id="Datei1" /><br />
    19.   <input type="file" name="datei[]" id="Datei2" /><br />
    20.   <input type="file" name="datei[]" id="Datei3" /><br />
    21.   <input type="file" name="datei[]" id="Datei4" /><br />
    22.   <input type="file" name="datei[]" id="Datei5" /><br />
    23.   <input type="submit" name="submit" value="Upload!" />
    24. </form>
    25.  
     
    #6      
  7. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    Datei upload mit überschreiben auf Anfrage
    AW: Datei upload mit überschreiben auf Anfrage

    Lass doch mal bitte dieses $_REQUEST, streich es aus PHP und überlege Dir wie man noch prüfen könnte ob etwas vorhanden ist.

    Habe zwar noch nie probiert mehrere Files als Array hochzuladen, denke mir aber mal, dass es so funktionieren müsste:

    PHP:
    1.  
    2. <?php
    3. foreach($_FILES['datei'] as $org_name)
    4. {
    5. move_uploaded_file($org_name['tmp_name'] , 'uploads/' . $org_name['name']);
    6. }
    7. ?>
    8.  
    9.  
    10.  
    11. <form method="post" enctype="multipart/form-data">
    12. <input type="file" name="datei[]" id="Datei1" /><br />
    13. <input type="file" name="datei[]" id="Datei2" /><br />
    14. <input type="file" name="datei[]" id="Datei3" /><br />
    15. <input type="file" name="datei[]" id="Datei4" /><br />
    16. <input type="file" name="datei[]" id="Datei5" /><br />
    17. <input type="submit" name="submit" value="Upload!" />
    18. </form>
    19.  
    Edit: Sehe gerade, ein "action" hast Du auch nicht im Formular.
     
    Zuletzt bearbeitet: 14.08.2008
    #7      
  8. KATERchen

    KATERchen Aktives Mitglied

    Dabei seit:
    19.03.2006
    Beiträge:
    348
    Geschlecht:
    männlich
    Ort:
    -
    Software:
    -
    Kameratyp:
    -
    Datei upload mit überschreiben auf Anfrage
    AW: Datei upload mit überschreiben auf Anfrage

    Was ist an REQUEST anders als beispielsweise an POST?
    Die Schleife funktioniert aber immer noch nicht. Die Datei verschwindet einfach.
    Mit einer for-Schleife hatte ich das schon ganz gut hinbekommen. Da war aber dann das Problem (und ich wollte eigentlich nur mal "schnell" testen ob es das bei foreach auch gibt) das anstelle der nicht gesetzten <input>'s leere Dateien hochgeladen werden - die mein Scipt dann im Verlauf auch versucht hat zu verarbeiten und an den 0byte dann gescheitet ist.
    Meine Hoffnung war einfach, das foreach gleich bemerkt wenn nicht alle fünf Dateien gesetzt sind und dann auch nicht versucht alle zu verarbeiten.

    [edit zum edit]
    Das mit dem action hat mich auch schon gewundert - vor allem aber, das es ohne funktioniert. Wie oben schon erwähnt, habe ich das Script ursprünglich von einer Lern-CD genommen. Die machen übrigens auch das mit dem REQUEST :) - sollte mir vielleicht ne bessere CD zulegen...
     
    Zuletzt bearbeitet: 14.08.2008
    #8      
  9. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    Datei upload mit überschreiben auf Anfrage
    AW: Datei upload mit überschreiben auf Anfrage

    Dann würde ich doch auf ein Array verzichten, ist mir pers. zu kompliziert (ich weiss jetzt auch warum ich das noch nie ausprobiert habe). :D
    Irgendwie so würde ich das anstellen:
    PHP:
    1.  
    2. <?php
    3. if(isset($_FILES)){
    4.     foreach($_FILES as $key => $org_name){
    5.             if(isset($_FILES[$key]['tmp_name']) && isset($_FILES[$key]['name']))
    6.             move_uploaded_file($_FILES[$key]['tmp_name'] , 'uploads/' . $_FILES[$key]['name']);
    7.     }
    8. }
    9. ?>
    10.  
    11. <form method="post" enctype="multipart/form-data" action="">
    12. <input type="file" name="datei_1" id="Datei1" /><br />
    13. <input type="file" name="datei_2" id="Datei2" /><br />
    14. <input type="file" name="datei_3" id="Datei3" /><br />
    15. <input type="file" name="datei_4" id="Datei4" /><br />
    16. <input type="file" name="datei_5" id="Datei5" /><br />
    17. <input type="submit" name="submit" value="Upload!" />
    18. </form>
    19.  
    Wenn Du etwas mit GET oder POST schickst prüfe auch $_GET bzw. $_POST... $_REQUEST kann beides sein.
     
    #9      
  10. KATERchen

    KATERchen Aktives Mitglied

    Dabei seit:
    19.03.2006
    Beiträge:
    348
    Geschlecht:
    männlich
    Ort:
    -
    Software:
    -
    Kameratyp:
    -
    Datei upload mit überschreiben auf Anfrage
    AW: Datei upload mit überschreiben auf Anfrage

    Genau das habe ich gesucht. Aber weil ich versucht habe mich an die Logik von PHP zu halten habe ich den Fehler im Formular nicht gefunden. Mit ist nicht mal aufgefallen, daß das ein Fehler ist. Woher weiß er denn jetzt, was er ins Array schreiben soll? einfach durch $_FILES?

    Jetzt hänge ich aber schon wieder, an einer garantiert super simplen Sache. Aber obwohl ich google schon zum glühen gebracht habe finde die Lösung nicht.

    mit
    PHP:
    1. if (file_exists('uploads/'.$org_name[$key]))
    wird geprüft ob Dateien schon auf dem Server existieren. (und das können natürlich mehrere gleichzeitig sein) Darum will ich die Namen als einzelne Werte in ein Array schreiben, aber wie mache ich das??? Das kann eigentlich nur so simpel sein, daß ich mich sogar als Anfänger schäme das zu fragen.
    Ich hab's versucht mit:
    PHP:
    1. $doppelt = array($_FILES[$key]['name']);
    aber damit packt er mir alle Dateinamen als einen Wert rein.


    [EDIT]

    Okay, inzwischen weiß ich jetzt gar nicht mehr was ich jetzt eigentlich falsch mache.
    gebe ich $doppelt mit foreach aus werden mir die beiden doppelten Dateien richtig angezeigt.
    gebe ich aber echo $doppelt[0]; ohne foreach an bekomme ich auch beide Werte angezeigt. Das ist doch eigentlich unlogisch, oder??? Ich müßte doch nur den ersten Wert bekommen.
     
    Zuletzt bearbeitet: 15.08.2008
    #10      
  11. gp812

    gp812 Newbster

    Dabei seit:
    23.12.2007
    Beiträge:
    278
    Geschlecht:
    männlich
    Ort:
    Stuttgart
    Software:
    CS3, EditPlus
    Datei upload mit überschreiben auf Anfrage
    AW: Datei upload mit überschreiben auf Anfrage

    Mach halt so.
    PHP:
    1.  
    2. $doppelt = array();
    3. array_push($doppelt, $_FILE['bla-bla']);
    4.  
    Sieht dann etwa so aus:
    PHP:
    1.  
    2. $doppelt = array();
    3. if (file_exists('uploads/'.$org_name[$key]))
    4.  array_push($doppelt, $_FILES[$key]['name']);
    5.  
     
    #11      
  12. KATERchen

    KATERchen Aktives Mitglied

    Dabei seit:
    19.03.2006
    Beiträge:
    348
    Geschlecht:
    männlich
    Ort:
    -
    Software:
    -
    Kameratyp:
    -
    Datei upload mit überschreiben auf Anfrage
    AW: Datei upload mit überschreiben auf Anfrage

    Mit array_push habe ich es versucht, klappte aber nicht. Allerdings bin ich mir nicht sicher, ob ich es in eine if-Anweisung gepackt hatte. Aber ich vermute, es würde eh nicht so funktionieren. Aber das hat mich auf eine andere Idee gebracht...
    Da ich mich schon zu weit von Thread-Titel entfernt hatte, habe ich ganz frech nen neuen aufgemacht. Da gibts auch mal ein komplettes Script - bin über Kritik dankbar...
    Siehe hier
     
    #12      
x
×
×