Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrfaches absenden durch Browserrefresh verhindern

Einklappen

Neue Werbung 2019

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

  • Mehrfaches absenden durch Browserrefresh verhindern

    hallo,

    ich habe ein formular, über welches daten in die db gespeichert werden.
    das formular sendet die daten per POST. nach dem absenden gelangt man auf die gleiche seite. vor dem erneuten anzeigen werden die post-daten verarbeitet und in die db gespeichert.

    wenn ich jetzt nach dem ersten absenden im browser F5 drücke, wird ja nicht nur die seite neu geladen, sondern auch die post daten neu verarbeitet, also alles nochmal gespeichert.

    wie kann ich das am effizientesten verhindern?
    ich möchte ungern vor dem eintragen eie zusätzliche db-abfrage einbauen, die checkt, ob die daten schon existieen. oder ist das diie einzige lösung?

  • #2
    Ich würd einfach ne Seite dazwischen schalten ...

    Eine PHP Seite die dir die Einträge einträgt/löscht/ändert .. Was auch immer du willst ...

    machdb.php?do=edit

    z.B.: ==> und wenn erfolgreich dann zurück zu der Seite wo de her gekommen bist .. mit nem Verweis : Erfolgreich eingetragen



    dadurch kann da keiner F5 drücken

    Aber doppelte Eintrage kannst auch per MySQL abfangen .. musst halt 'n UNIQUE Feld haben .. Weiß ja nicht worum 's sich genau bei dir dreht ...

    Kommentar


    • #3
      Wenn das Speichern geklappt hat entweder auf eine andere Seite weiterleiten, denn es macht ja keinen Sinn nach dem Speichern nochmal das komplett ausgefüllte Formular zu zeigen und damit zu suggerieren, dass das Formular noch garnicht versendet wurde -ODER- die Formular-Werte manuell zurücksetzen -ODER- wie du gesagt hast, prüfen ob die Daten schonmal in der DB vorkommen. Das solltest du aber sowieso, sonst trägt sich jeder Hannes so oft ein wie er will, das dürfte aber nur selten im Interesse des Webmasters sein.

      Kommentar


      • #4
        Du könntest im Prinzip auch ein Header("location..."); setzen. Dann wirst Du zur der Seite zurückgebracht die zum Beispiel als Start für alles diente un die Post Variablen werden gelöscht. Aber sobald man dann zurück klickt wird noch einmal gesendet, glaube ich zumindest.

        Alternativ könntest Du natürlich noch eine IP Sperre einbauen indem Du seine IP speicherst in der Datenbank. Kommt drauf an für was Du es brauchst und ob so eine IP Sperre nötig wäre.

        Kommentar


        • #5
          okay etwas genauer:
          auf der seite sieht man eine grafik und darunter ein kleines formular. der user kann nur einmal zu jeder grafik einen kommentar abgeben.
          auf der seite wird bei jedem laden gecheckt, ob dieser user diese grafik schon kommentiert hat. wenn nein, wird das formular eingeblendet, sonst halt alle kommentare angezeigt.

          deshalb möchte ich auch keine seite dazwischen haben. denn so sieht man sofort das feedback. ein extra-feld möchte ich auch nicht unbedingt einfügen, und das müßte ich ja auch abfragen. dann doch lieber die zwischenseite :-/

          Kommentar


          • #6
            @fips da sich das script in einem cms befindet, möchte ich ungern den header ändern und die ip-sperre finde ich etwas buckelig für diesen zweck

            Kommentar


            • #7
              möchte ich ungern den header ändern
              dann hast du pech, das ist eben die standard-methode.
              da sich das script in einem cms befindet
              die begründung ist unverständlich - wurde denn so schlecht programmiert?
              [URL=http://www.mozilla.org/products/firefox/][img]http://www.nophia.de/misc/spreadtheword/feuerfuchs.gif[/img][/URL]

              Kommentar


              • #8
                wenn es die standard-methode ist, muß ich es mir wohl mal genauer anschauen.
                Aber sobald man dann zurück klickt wird noch einmal gesendet, glaube ich zumindest.
                hat mich allerdings etwas abgeschreckt.

                hast du ein beispiel parat, wo das beschrieben ist? es muß halt unbedingt verhindert werden, dass mehrfach gesendet wird. ihr kennt ja die leutz, die alles ausprobieren

                Kommentar


                • #9
                  http://www.traum-projekt.com/forum/5...oadsperre.html

                  hier steht genau dein Problem beschrieben ..

                  Einfach mal Google fragen hätte dich auch soweit gebracht ...

                  Kommentar


                  • #10
                    Idee: Du setzt eine Session-Variable sobald das Formular angezeigt. Wenn es abgeschickt wird, entfernst du die variable wieder. Sollte nun jemand
                    versuchen das Formular abzuschicken, wird das Script feststellen, dass das Formular vorher nicht ordnungsgemäß angezeigt wurde und somit *peng*
                    PHP-Code:
                    if ($_POST['send']) { // was auch immer
                      
                    if ($_SESSION['allowed']) {
                        
                    $_SESSION['allowed'] = FALSE;
                        
                    // normal
                      
                    } else {
                        
                    // verboten
                      
                    }
                    } else {
                      
                    $_SESSION['allowed'] = TRUE;
                      
                    // Formular

                    Setzt natürlich Sessions voraus
                    Nicht jeder Fehler ist ein Bug.

                    Kommentar


                    • #11
                      Um das gesagte mal in Code zu fassen:
                      PHP-Code:
                      <?php
                      if(speichereWasUndGibtErfolgzuruek($daten)) {
                          
                      machDasUserNichtNochmalDasFormularAngezeigtBekommt();
                          
                      header('Location: wurdeGespeichert.html');
                          exit;
                      }
                      printFormular($daten)
                      ?>
                      Wenn dich was ankotzt, machs besser.

                      Kommentar


                      • #12
                        Mein Code war zwar fehlerhaft, aber dafür verwende ich keine undefinierten Funktionen Eigentlich: Wollt nur kurz mitteilen, dass ich meinen Code korrigieren musst
                        Nicht jeder Fehler ist ein Bug.

                        Kommentar

                        Lädt...
                        X