Reloadsperre greift nur bei Aktualiseren im Browser; Button iost

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

  • Reloadsperre greift nur bei Aktualiseren im Browser; Button iost

    Hallo zusammen,

    das folgende Skript soll mir Daten in die DB schreiben, was es auch tut. Um allerdings doppelte Einträge zu vermeiden, soll nach dem ersten Klick auf speichern kein weiteres speichern möglich sein.
    Im Formular klappt das auch. Wenn ich den Browser aktualiere, wird anstatt des Buttons der Text "Bereits gespeichert" angezeigt. So wie es sein soll. Das Skript funktioniert aber nur so.
    Wenn ich mehrmals auf speichern drücke, wird der Satz auch mehrfach gespeichert. WEin Unique-Feld nützt mir nicht, das der Zählerstand sich ändert.
    Ich dachte, mit der selben if-Bedingung wie im Formular, aber das haut nicht hin.

    Wo ist mein Fehler, kann mir mal jemand helfen ! ! !

    PHP-Code:
    echo "<form action='index.php?navi=" $_GET['navi'] . "&menu=neuangebotgesamt' method='post'";
    echo 
    "<input type='submit' name='hauptmenu' value='Hauptmenü'></td>";
    echo 
    "<input type='submit' name='drucken' value='Drucken'></td>";
    echo  
    "<input type='hidden' name='is_saved' value='" md5(time() + rand(01000)) . "'>";

    if(isset(
    $_POST['is_saved']) && isset($_SESSION['is_saved']) && 
    $_SESSION['is_saved'] == $_POST['is_saved'])
    {
     echo 
    "Bereits gespeichert !</td>";
    }
    else
    {
     echo 
    "<input type='submit' name='speichern' value='Speichern'></td>";
    }
    echo 
    "</form>";
    echo 
    "</div>";


    if (isset (
    $_POST['speichern']) && $_POST['speichern'] == 'Speichern' && (!isset($_SESSION['is_saved'])
     || 
    $_SESSION['is_saved'] != $_POST['is_saved'])) 
    {

       
    Datenbank schreibenDas lass ich mal raussonst wirds zu lang 

     $_SESSION
    ['is_saved'] = $_POST['is_saved'];

    Zuletzt geändert von fritzje610; 16.04.2008, 13:32.
    Gruß

    Michael

  • #2
    wahrscheinlich wird bei Dir ja bei jedem aktualisieren
    $_SESSION['is_saved'] = $_POST['is_saved']; gesetzt und damit wirkt Deine EBdingung nicht mehr
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Bei jedem Klick auf speichern werden die beiden Variablen neu geschrieben. Beim Aktualisiren des Browsers bleiben sie gleich.
      Ich doktere jetzt schon seid zwei Tagen an dem Problem rum. Irgendwie habe ich den Überblick etwas verloren.
      Wie muss denn diese mistige Bedingung für den Button aussehen?
      Das speichern darf nur gehen, wenn der Button speichern gedrückt ist
      $_SESSION['is_saved'] ungleich $_POST['is_saved'] ist. Anderenfalls gibts den Satz schon. Das haut aber so nicht hin. Warum nur?
      Gruß

      Michael

      Kommentar


      • #4
        speicher doch $_POST['is_saved'] ab und wenn dieser Wert schon vorhanden ist, dann dann wird nicht mehr gespeichert.

        Nebenbei kannste den submit button mit JS disablen
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          oder Du definierst einen unique key in deiner DB
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            Den Wert von $_POST['is_saved'] mit in die DB ? Der ändert isch doch bei jedem Klick auf speichern!

            Allerdings muss ich doch dann wenn ich auf speichern klicke erst den letzteingetragenen Key lesen und dann entscheiden, ob schreiben gehen soll oder nicht. Richtig?
            Wie sollte der key sinnigerweise auissehen?
            Gruß

            Michael

            Kommentar


            • #7
              also was möchtest Du?
              verhindern dass ein user mehrfach das gleiche Formular abschickt oder das Datensätze doppelt auftreten?

              Wenn ersteres speichere den is_saved wert ab und vergleiche ihn immer wieder
              wenn zweites setze einen unique key auf die betreffenden Felder, die nicht doppelt sein dürfen.
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Kommentar


              • #8
                So funktioniert's. Einfach mal ne Stunde was anderes machen und schon klappt das wieder.


                PHP-Code:
                if(isset($_POST['is_saved'])){
                    
                // Irgendwas tun, da bereits versandt!
                    
                echo  "<input type='hidden' name='is_saved' value='" $_POST['is_saved'] . "'>";
                    echo 
                "Bereits versandt!";
                }else{
                    echo  
                "<input type='hidden' name='is_saved' value='" md5(time() + rand(01000)) . "'>";
                    echo 
                "<input type='submit' name='speichern' value='Speichern'>";
                }
                echo 
                "</form>";
                echo 
                "</div>";

                /** Neue Bdingung **/
                if (isset ($_POST['speichern']) && $_POST['speichern'] == 'Speichern' 
                && (!isset($_SESSION['is_saved']) || $_SESSION['is_saved'] != $_POST['is_saved'])) 
                {

                der Rest bleibt wie gehabt
                Trotzdem vielen Dank für die Hilfe ! ! !
                Gruß

                Michael

                Kommentar

                Lädt...
                X