Ankündigung

Einklappen
Keine Ankündigung bisher.

verhindern das bei aktualisieren eine aktion wiederholt wird

Einklappen

Neue Werbung 2019

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

  • verhindern das bei aktualisieren eine aktion wiederholt wird

    Guten Morgen,

    ich frag mich grade wie man es verhindern kann, dass bei einem aktualisieren des Browsersfensters das PHP Script nocheinmal ausgeführt wird bzw z.B. ein DB-Eintrag noch ein zweitesmal stattfindet. Gibts Techniken um dies zu unterbinden und wie sehen die aus?

    Viele Dank für eure Mühe

    Crypi
    PostgreSQL Forum:
    www.pg-forum.de


  • #2
    11.19. Wie verhindere ich mehrfaches Absenden eines Formulars?
    http://www.php-faq.de/q/q-formular-mehrfach.html

    Gruß
    phpfan

    Kommentar


    • #3
      jo vielen Dank!

      Hatte das bisher mit einem Schlüssel gelöst, der bei jedem Absenden mit übergeben wird und der mit einem Schlüssel der in der Session gespeichert wird verglichen wird. Wenn der Schlüssel veraltet ist => Fehler...
      Allerdings gibts ein Problem wenn mehrere Browser-Fenster geöffnet sind...dann sind möglicherweise korrekte Schlüssel abgelaufen weil sie in einem anderen Fenster bereits verwendet wurden...

      So gehts natürlich auch...

      Crypi
      PostgreSQL Forum:
      www.pg-forum.de

      Kommentar


      • #4
        hmm jetzt hab ich dazu noch ne Frage, wenn ich das so umsetze also nach erfolgreicher aktion umleiten, dann krieg ich ein Problem, man kann ja nur umleiten, wenn noch keine Header informationen versandt wurden, ich include aber vorher schon Dateien, z.B die wo meine Datenbankdaten für die Verbindung drin sind...

        Krieg jetzt immer ne Fehlermeldung, müssen die include dateien irgendeinem Muster entsprechen damit es doch geht oder geht das grundsätzlich nciht?

        Crypi
        PostgreSQL Forum:
        www.pg-forum.de

        Kommentar


        • #5
          ok, mit ob_start() klappts gut.

          Gibt es dabei etwas das ich beachten muss (Einschränkungen oder so)?

          Crypi
          PostgreSQL Forum:
          www.pg-forum.de

          Kommentar


          • #6
            Du solltest den Puffer auch wieder leeren ..
            Aber ich denke mal, dass es doch eigentlich egal sein sollte, wenn Du 'ne Datei einbindest, die nur die Verbindung zur Datenbank herstellt.
            Das impliziert ja keine Ausgabe, die an den Browser geschickt wird.

            Demnach .. einfach mal die Leerzeichen- und zeilen vor und hinter dem PHP-Code wegmachen.
            Dann sollte es auch mit header('Location: ...'); klappen.

            Ich kenn den Code jetzt nicht .. aber so wie ich es verstanden habe könnte das Problem dadurch zu lösen sein.

            Grüße Ben.
            privater Blog

            Kommentar


            • #7
              ok... sind mehrere Dateien die included werden, schon möglich, das da Leerzeilen drin sind, werd ich mal nachschauen.

              ob_end_clean();

              damit leer ich doch den Puffer wieder oder?

              Crypi
              PostgreSQL Forum:
              www.pg-forum.de

              Kommentar


              • #8
                schau doch im Manual

                da steht: ob_end_clean -- Bereinigt (löscht) den Ausgabe-Puffer und deaktiviert die Ausgabe-Pufferung
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  jo da hab ichs ja her

                  wollt nur sicher gehen...

                  Danke für die Hilfe!

                  Crypi
                  PostgreSQL Forum:
                  www.pg-forum.de

                  Kommentar


                  • #10
                    ich wärm das thema noch mal auf

                    beim aktiualisieren klappt das jetzt schon sehr gut, allerdings beim vor und zurück button werden die sachen immer noch hübsch ein zweites mal abgeschickt...

                    habt ihr das eine idee wie man das lösen könnte? also zu verhindern, das z.b. ein datensatz ein zweitesmal eingetragen wird.

                    Danke für eure Mühe!

                    Crypi
                    PostgreSQL Forum:
                    www.pg-forum.de

                    Kommentar


                    • #11
                      Das Abschicken kannst du wohl schwer verhindern, zumindest würde ich keine solche Schranke in mein Skript einbauen. Aber das doppelte Eintragen der Daten kannst du natürlich verhindern, in dem du eine Abfrage startest, ob der gleiche Datensatz bereits in der Datenbank ist, bzw. einzelne Spalten (Username, EMail, ..) auf UNIQUE setzt. Damit kann in der Tabelle keine weitere Zeile eingetragen werden, deren UNIQUE-Spalte mit einer anderen übereinstimmt.

                      Kommentar


                      • #12
                        ja, das stimmt... aber das ist auch eher so eine halbe Lösung, könnt ja sein das der eintrag bereits wieder bearbeitet wurde und ich dann zurück gehe und einen datensatz eintrage der eben bis auf die Veränderung gleich ist.

                        hmm ich glaub ich muss doch zu meinem system zurückkehren...

                        das heißt in der session einen zähler einbauen, der bei jeder aktion hochgezählt wird... und wenn der zähler in der session und der in dem post oder get übergebene zähler nicht übereinstimmen wird die aktion nicht ausgeführt.

                        Grmbl, dann muss ich nur noch eine Lösung finden für das problem mit mehreren browserfenstern und der gleichen session, nicht das eine aktion unterbunden wird weil der zähler in der session in einem anderen fenster hochgezählt wurde...

                        Crypi
                        PostgreSQL Forum:
                        www.pg-forum.de

                        Kommentar


                        • #13
                          Hi.

                          Nimm keinen Zähler, den du pro Session-Request hochzählst, sondern vergib jedem Formular, ggf. auch Link (zwecks Sicherheit) eine eindeutige ID verpassen und diese in eine Liste in die Session speichern. Dann löschst du einfach die IDs der "benutzten" Elemente raus.

                          Basti

                          Kommentar


                          • #14
                            aber wenn ich dich richtig verstanden habe kann ich dann doch jedes element nur einmal verwenden oder?
                            weils danach aus der liste gelöscht wurde?


                            edit:

                            oder meinst du, dass bei jedem erzeugen der seite diese ids neu vergeben wird?
                            also jeder link jedes formular eine id bekommt, die in der session gespeichert wird und wenn diese id dann benutzt wird geht der eintrag in der session verloren und die aktion ist ungültig... hm ja sehr clever!

                            Crypi
                            PostgreSQL Forum:
                            www.pg-forum.de

                            Kommentar

                            Lädt...
                            X