Ankündigung

Einklappen
Keine Ankündigung bisher.

Formular Reload $POST_data nicht nochmal senden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Formular Reload $POST_data nicht nochmal senden

    Hi

    - Ein File-Upload-Formular welches nach dem submit nicht extern weitergeleitet werden soll.
    - Bei einem Refresh (oder Back) fragt der Browser (FF,IE) ob die Daten wiedergesendet werden sollen. Ziel dies zu unterbinden.

    Versucht:
    PHP-Code:
    echo "<meta http-equiv=\"refresh\" content=\"0;url=".$HTTP_SERVER_VARS[php_SELF]."\">"
    Versucht:
    PHP-Code:
    header("Expires: Sat,5 Jul 2000 00:00:00 GMT"); // Datum in der Vergangenheit 
    Versucht:
    PHP-Code:
    setcookie("Killer",$value,time()+1);
    setcookie("Killer",''); 
    Alle bisherigen Versuche haben nichts bewirkt. Das Formular wird im Hintergrund zur Verarbeitung per action an eine php weitergereicht.

    Gibts da ev. Tricks die Popups der Browser zu verhindern?

    Danke und Gruss

  • #2
    Wenn man eine Seite per POST angefordert hat und dann die Seite aktualisiert müssen die POST Daten ja wieder gesendet werden, damit die gleiche Siete angezeigt werden kann. Dies fragt der Browser ab.
    Du kannst versuchen den User per header auf die gleiche Seite aber per GET geladen weiter zu leiten, dann gibt es nicht mehr das Problem beim aktualisieren aber wenn er auf Zurück klickt wird wirst du nicht verhindern können, dass die Meldung in seinem Browser kommt.

    lg
    draco

    Kommentar


    • #3
      Möchtest du unterbinden, dass die Abfrage kommt oder dass die Daten neu gesendet werden?
      [I]Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)[/I]
      [I]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/I]

      Kommentar


      • #4
        Möchtest du unterbinden, dass die Abfrage kommt oder dass die Daten neu gesendet werden?
        Wenn möglich irgendwie rumtricksen damit die Abfrage gar nicht erst kommt.
        Schlussendlich geht es aber darum dass die Daten nicht erneut gesendet werden (auch wenn der User "falsch klickt"). Dies sehr störend da die Uploaddateien bis zu 50mb gross sein können.

        Kommentar


        • #5
          Der einfachste weg ist eine Weiterleitung mit header('Location: ...'); zu machen. Diese Weiterleitung läuft dann über GET. Sollte man dann auf aktualisieren klicken dann würde die Seite ganz normal wieder laden.

          Kommentar


          • #6
            Zitat von strgg Beitrag anzeigen
            Wenn möglich irgendwie rumtricksen damit die Abfrage gar nicht erst kommt.
            Schlussendlich geht es aber darum dass die Daten nicht erneut gesendet werden (auch wenn der User "falsch klickt"). Dies sehr störend da die Uploaddateien bis zu 50mb gross sein können.
            JavaScript kann dir helfen. Upload per Ajax und dem swfUploader durchführen.

            Somit gibt es kein reguläres POST request mehr was doppelt ausgeführt werden könnte.

            Du könntest auch in der Session des Benutzers speichern das er den Upload bereits durchgeführt hat und dies bei einem erneutem Upload abfragen. Die Uploadsperre wird entfernt, sobald der User das Formular erneut aufruft. D.h. wenn über Reload oder Zurück das verarbeitende Script erneut aufgerufen wird, tut es einfach nichts.
            "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

            Kommentar


            • #7
              Zitat von Dark Guardian Beitrag anzeigen
              Du könntest auch in der Session des Benutzers speichern das er den Upload bereits durchgeführt hat und dies bei einem erneutem Upload abfragen. Die Uploadsperre wird entfernt, sobald der User das Formular erneut aufruft. D.h. wenn über Reload oder Zurück das verarbeitende Script erneut aufgerufen wird, tut es einfach nichts.
              Stimmt so nicht. Sobald ein reguläres POST-Formular verwendet wird, wird auch die Datei in aller Regel IMMER wieder mitgesendet beim Aktualisieren. Auch ein Header oder sonsteine Sperre ändert de Fakto daran erst einmal nichts. Die Uploadsperre in der Session verhindert nicht, dass erst einmal die 50MB erneut über die Leitung gehen.

              Die einzige saubere Lösung hast du mit Ajax jedoch bereits genannt.
              [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
              Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

              Kommentar


              • #8
                Der einfachste weg ist eine Weiterleitung mit header('Location: ...');
                Hab ich schon versucht ohne Wirkung (auf [php_SELF]). Falls Du das hinkriegst, bitte konkreten Code. Danke

                Du könntest auch in der Session des Benutzers speichern das er den Upload bereits durchgeführt hat
                Ist dies möglich, wie würdest Du denn dies vollziehen:
                PHP-Code:
                session_start( );
                $_SESSION['filename']=$_FILES['name'];
                if (!isset(
                $_SESSION['filename']=''))
                {
                ...

                Auch wenns nicht gehen mag, poste doch mal den Code, rein aus Neugierde.

                JavaScript kann dir helfen. Upload per Ajax und dem swfUploader durchführen.
                Danke für den Hinweis. Wollte eigentlich diesen Umweg verhindern (Nutze fest definierte Klassen welche ich nun wahrscheinlich zur Implementation mit swfUploader aufbrechen muss) aber scheint wohl unumgänglich. Hoff nur, dass mir das nicht über den Kopf wächst.

                SWFUpload is not a drag & drop upload control. It requires knowledge of JavaScript and the DOM.
                Vom Regen in die Traufe. hehehe

                Kommentar


                • #9
                  mache es auch über nen redirect und es funktioniert.
                  PHP-Code:
                  header('Location: index.php'); 
                  Das includen der aktuellen Seite erfolgt dann auf der index.php.

                  Kommentar


                  • #10
                    Es geht um das Verhindern, dass mittels Zurück-Button zum Erneuten Versenden des Formulars und damit der Datei aufgefordert wird. Und die Header-Location Weiterleitung verhindert das schlichtweg nicht. Sie verhindert nur, dass ein direktes Klicken auf Aktualisieren einen erneuten Formularversand auslöst. Nach Klicken auf Zurück wird jedoch jeder aktueller Browser wieder das Formular versenden bzw. dazu auffordern.
                    [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
                    Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

                    Kommentar


                    • #11
                      Zitat von mepeisen Beitrag anzeigen
                      Stimmt so nicht. Sobald ein reguläres POST-Formular verwendet wird, wird auch die Datei in aller Regel IMMER wieder mitgesendet beim Aktualisieren. Auch ein Header oder sonsteine Sperre ändert de Fakto daran erst einmal nichts. Die Uploadsperre in der Session verhindert nicht, dass erst einmal die 50MB erneut über die Leitung gehen.

                      Die einzige saubere Lösung hast du mit Ajax jedoch bereits genannt.
                      Stimmt, die Daten werden trotzdem erst gesendet. Dann fällt die Option natürlich raus.
                      "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                      Kommentar


                      • #12
                        Danke für die Unterstützung Leute. Nun herrscht Klarheit über den 'Way to go'.
                        Werds nun mit dem swfuploader regeln versuchen.

                        Aus Neugierde:
                        mache es auch über nen redirect und es funktioniert.
                        PHP-Code:
                        header('Location: index.php');
                        Das includen der aktuellen Seite erfolgt dann auf der index.php.
                        Bei mir resultiert eine Endlosschleife. index.php:
                        PHP-Code:
                        <? header('Location:index2.php'); ?>
                        index2.php:
                        PHP-Code:
                        <? include 'index.php';?>
                        Gegoogelter Ansatz (htaccess/rw) hat nicht behoben. Selbst daran scheiterts heute

                        Kommentar


                        • #13
                          Bei mir resultiert eine Endlosschleife.
                          Und das wundert dich jetzt? Du leitest auf die index2.php weiter und bindest die index.php ein, die wiederum auf index2.php verweist. Dann geht das ganze Spiel von vorne los.

                          So unglaublich ist das gar nicht
                          [URL]http://hallophp.de[/URL]

                          Kommentar


                          • #14
                            mache es auch über nen redirect und es funktioniert.
                            PHP-Code:
                            header('Location: index.php');
                            Das includen der aktuellen Seite erfolgt dann auf der index.php.
                            Analog Empfehlung. Na ja wenigstens hattet Ihr was zum Lächeln. Also bleibt ein getrickster Redirect auf die eigene Seite trotzdem möglich oder gehört er ins Reich der Mythen und Legenden ?

                            Kommentar


                            • #15
                              Der ist durchaus möglich. Jedoch musst du dafür sorgen, dass der Redirect nur stattfindet, wenn das Formular abgesendet wurde und nicht bei einem Standard-Get-Request. Dann gibt es auch keine Endlosschleife.
                              [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
                              Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

                              Kommentar

                              Lädt...
                              X