Kiska Kogtistaya: Upload beendet?

Hallo,

die Frage hatte ich schon mal gestellt, aber die es jetzt im Archiv verschwunden, und ich weiß nicht, ob ich in diesem Fall meinen alten Thread fortsetzen sollte und ob jemand den noch lesen wird. (Vergib mir, oh, allmächtiger Forumer, wenn ich was falsch gemacht habe.)

Ist es möglich während eines Datei-Uploads eine „Bitte-Warten“-Seite anzuzeigen und beim erfolgreichen Upload eine Bestätigungsseite auszugeben?

Die Antworten brachten mich auf folgende Überlegungen:
1.  if (file_exists(„bla“))
 bestätigungsseite laden
     else
          reload PHP_SELF

wenn die Datei nicht hochgeladen ist, dann existiert sie auch nicht und dementsprechend wird der Skript aufgerufen, solange Upload nicht beendet ist.

2. mit JavaScript: ich hatte versucht einen Preloader-Skript zu „missbrauchen“, wenn die Dateien für Preload nicht existieren, dann stoppt der Skript (zumindest der, den ich gefunden hatte). Hier kommt dann refresh ins Spiel und das ganze Spielchen geht von vorn. Es funktioniert mit Bildern. Nun habe ich nicht nur Bilder, die hochgeladen werden, sondern auch Office-Dateien und zip-Archive. Hier scheitert der Skript ohne Fehlermeldung, ich vermute, dass es an der Zeile:

document.preload.src = "document.doc";

liegt.

3. nach lange Suche habe ich folgenden Link gefunden: http://www.hoefler-online.de/phpfaq/q-formular-status.html . Drehe ich mich da im Kreis? Bitte sagt mir, ob so etwas überhaupt möglich ist und wenn ja, klitzekleinen Lösungsansatz.

Danke. Kiska.

  1. Ist es möglich während eines Datei-Uploads eine „Bitte-Warten“-Seite anzuzeigen und beim erfolgreichen Upload eine Bestätigungsseite auszugeben?

    Beim Upload passiert folgendes:

    1. Im Formular wird Absenden gedrückt.
    2. Der Browser sendet eine Anfrage an den Server, die genauer betrachtet  aus einem POST-Befehl und der zu übertragenden Datei besteht.
    3. Hat der Server die Anfrage _vollständig_ erhalten, setzt er das PHP-Skript in Gang.
    4. PHP-Skript kann Antwortseite schicken.

    Das bedeutet schonmal, daß Dein verarbeitendes PHP-Skript kein "Bitte warten" anzeigen kann, da es nicht eher gestartet wird, bevor nicht alle die Daten beim Server angekommen sind.

    Das "Bitte warten" muß also vom Formular selber per Javascript kommen, zum Beispiel indem ein anfangs verstecktes Element mit diesem Text über das Formular gelegt wird (DOM/CSS-display).

    Bedenke aber, daß die sicherlich eine Menge Leute durchaus wissen werden, daß sie eine Datei verschicken und sich dementsprechend auch im klaren darüber sind, daß das etwas dauern kann.
    Daß es noch dauert, erkennen mindestens genausoviele Leute daran, daß die Modemlampen (oder was der Rechner als Äquivalent anbietet) noch am blinken sind.

    Insofern solltest Du Dir mit dem "Bitte warten" nicht allzuviel Mühe geben, sprich: keine allzu verquere Konstruktion zusammenzimmern, die womöglich die Benutzung des Formulars auch noch einschränkt, weil sie Javascript voraussetzt anstatt Javascript als zusätzlichen Komfort nur optional zu nutzen.

    Anders ausgedrückt: Deine Besucher möchten eine Datei abschicken, nicht ein "Bitte warten"-Schild bewundern. Die "Bitte warten"-Funktion darf somit unter _keinen_ Umständen die Benutzung des Formulars behindern.
    Die Ausrede "Wer Javascript abschaltet ist blöd" zählt nicht und deutet nur darauf hin, daß die aussagende Person nicht in der Lage war, die eigentliche Aufgabenstellung zu erkennen, sondern sich lieber dem Sandkastenspieltrieb hingegeben hat :)

    Gruß,
      soenk.e

  2. hi!

    Also ich hab das mit dem Preloader so gelöst:

    function SendFormular() {
      document.formular.submit();
      document.body.innerHTML="Daten werden verarbeitet! Bitte warten..."
    }

    und beim Button einfach

    <input type="button" name="button_upload" value="Upload" onclick="javascript:SendFormular()">

    ist zwar nur eine sehr einfache Methode (ohne Statusanzeige)
    aber ich finde sie verrichtet auch ihren Job (ausserdem bin ich mir gar nicht so sicher ob es so geht wie du dir das vorstellst, da bei den meisten Preloadern eine fixe Größe vorgegeben ist)

    gruß
    DMIII

    1. hi!

      Also ich hab das mit dem Preloader so gelöst:

      Was hat das mit einem Preloader zu tun?

      function SendFormular() {
        document.formular.submit();
        document.body.innerHTML="Daten werden verarbeitet! Bitte warten..."
      }

      und beim Button einfach

      <input type="button" name="button_upload" value="Upload" onclick="javascript:SendFormular()">

      1. Was soll das denn? javascript: hat da nichts zu suchen. Du schreibst doch auch nicht <html:input type=...
      Event-Handler sind immer in der default-Scriptsprache der Seite (d.h. in der Regel: in Javascript).

      2. Ein Formular kann auch ohne Benutzung des Button abgeschickt werden.

      3. gibt es wegen 2. den onsubmit-Handler im form-Element

      Andreas

    2. hi!

      Also ich hab das mit dem Preloader so gelöst:

      function SendFormular() {
        document.formular.submit();
        document.body.innerHTML="Daten werden verarbeitet! Bitte warten..."
      }

      Danke. Das ist genau das, was ich seit Tagen gesucht hatte. Kopf voll mit PHP, JS und Konsorten, dabei das alte gute DHTML vergessen.

      Kiska.