Mehrfaches senden von Formular auch im IE unterbinden

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

  • Mehrfaches senden von Formular auch im IE unterbinden

    Hoi zämä,

    Mein Problem:
    Der Inhalt eines Forumlars (Sitzplatzreservation, ausgewählte Plätze) soll in eine Datenbank gespeichert werden.
    Um ein mehrfaches senden durch reload oder Doppelklick auf den Senden-Button zu verindern, überprüfe ich, ob die Werte schon gespeichert sind. Wenn nicht, wird statt speichern eine Fehlermeldung ausgegeben.

    Das funktioniert einwandfrei so... - zu mindest im Firefox.
    Im IE aber kann ich durch ganz schnelles Klicken auf den Sendenknopf manchmal doch die Werte mehrfach in die Datenbank schreiben.

    Wie ist sowas überhaupt möglich?
    Gibt's dazu ein Lösungsansatz?

    Zum besseren Verständnis mein Code dazu:
    PHP-Code:
        //gibt es eine Auswahl Sitze zu speichern?
        //Inhalt des versteckten Formularfeldes inpSitzWahl verarbeiten....
            
    if (""!=$SitzAuswahl[0]) {//wenn das Feld nicht leer ist...
                //Auswahl speichern
                
    $besetzteSitze = array();//Array für schon besetzte Sitze
                
    foreach ($SitzAuswahl as $key=>$PlatzBez) {
                    if (
    SitzFrei($PlatzBez$drpShow)) {
                        
    $query "INSERT INTO tx_platzda_res (`pid`,`tstamp`,`crdate`,`bem`,`gast`, `show`,`sitz`, `status`) 
    VALUES ("
    .$vorverkaufPageId.", ".time().", ".time().", 
    '',"
    .$User["uid"].", ".$drpShow.", ".SitzUID($PlatzBez).", 1)";
                        
    $res $GLOBALS['TYPO3_DB']->sql_query($query);
                        }
                    }else{
                        
    $besetzteSitze[] = $PlatzBez;
                    }                
                }
                if (
    ""!=$besetzteSitze[0]) {//wenn Sitze nicht gebucht werden konnten, weil sie schon belegt sind...

                    
    $PlatzReservierenFehler "<p... "//Var für ganze Fehlermeldung bei schon belegten Sitzen
                
    }
            } 
    Zuletzt geändert von Centi; 02.06.2006, 16:15.

  • #2
    Willkommen,

    http://www.php-resource.de/forum/sho...threadid=50454

    Kommentar


    • #3
      besser so? ;-)

      Kommentar


      • #4
        jau!

        hierzu einfach den UNIQUE-Key setzen(MySQL). Die Datenbank meldet dann automatisch, dass der Datensatz schon vorhanden ist.

        abfragen kannst du das mit einem if(mysql_errno() == 1062)

        Kommentar


        • #5
          Danke für deine schnelle Antwort. :-)

          hmm, eigentlich kann der Sitz ja mehrfach gebucht werden, nur nicht für die selbe Veranstaltung..

          So sehen die relevanten Felder der Tabelle aus:

          Code:
          |Buchungs-UID |        Sitzplatz         |    Datum der Show    |        Besucher         |
          -----------------------------------------------------------------------------------------------
          |  eindeutig  | UID von Sitzplatztabelle | UID von Show-Tabelle | UID von BEsuchertabelle |
          nur das erste Feld ist unique, der Rest kann, logischer Weise, mehrfach vorkommen.

          (Ablauf für den Besucher: Er wählt ein Datum aus und wählt seine zu reservierenden Sitze aus. Diese Daten werden zusammen mit seiner ID verbucht.)

          Ich könnte natürlich für jeden Platz und jede Vorstellung eine eindeutige Bezeichnung kreieren, was aber in meinen Augen nicht unbedingt Sinn macht in einer relationalen Datenbank.

          Kommentar


          • #6
            hmm, eigentlich kann der Sitz ja mehrfach gebucht werden, nur nicht für die selbe Veranstaltung..
            Ja, das sind doch ideale vorraussetzungen!

            der Rest kann, logischer Weise, mehrfach vorkommen.
            nööö! Ansonsten könntest/müsstest du ja auch "doppelte" Einträge zulassen.

            Ich könnte natürlich für jeden Platz und jede Vorstellung eine eindeutige Bezeichnung kreieren, was aber in meinen Augen nicht unbedingt Sinn macht in einer relationalen Datenbank.
            Bloß nicht! Ist schon in ordnung so.

            Kommentar


            • #7
              noch was:
              Diese Funktion prüft, ob die Sitze schon verbucht sind. Wenn ja, wird der Fragliche Sitz im Array für ungebuchte Sitze gespeichert und es sollte eigentlich nicht mehr gespeichert werden.


              PHP-Code:
              SitzFrei($PlatzBez$drpShow
              Wie gesagt: Im Firefox funktioniert das tadellos. Nur der IE scheint die SitzFrei()-Abfrage vom nächsten Aufruf schon auszuführen, bevor die Sitze des ersten Aufrufs gespeichert sind.

              Kommentar


              • #8
                nööö! Ansonsten könntest/müsstest du ja auch "doppelte" Einträge zulassen.
                natürlich nicht alle doppelt.
                Aber der selbe Sitz kann an verschiedenen Veranstaltungsdaten gebucht werden.
                Ebenso kann derselbe Besucher denselben Sitz an mehreren Abenden reservieren. (Schön wär's wir hätten solche Fans. ;-) )

                Kommentar


                • #9
                  du hast mich nicht verstanden

                  b_id | vorstellung | platz
                  1 | ice age | 45
                  2 | ice age | 45
                  3 | wilde engel | 45

                  1 + 2 doppelter eintrag
                  2 + 3 kein doppelter eintrag

                  genau das sollst du der DB beibringen.

                  Kommentar


                  • #10
                    Original geschrieben von TobiaZ
                    du hast mich nicht verstanden

                    b_id | vorstellung | platz
                    1 | ice age | 45
                    2 | ice age | 45
                    3 | wilde engel | 45

                    1 + 2 doppelter eintrag
                    2 + 3 kein doppelter eintrag

                    genau das sollst du der DB beibringen.
                    richtig. Reden wir also vom gleichen.
                    Doch wie bring ich der DB bei, dass das nicht gehen soll?

                    Kommentar


                    • #11
                      über den unique-key, s.o.

                      Kommentar


                      • #12
                        danke, wusste bisher nicht, dass ein unique-key auch über mehrere Spalten geht. Jetzt klappts. :-)

                        Kommentar


                        • #13
                          Wunderbar!

                          Merke: Ein funktionierendes DB-Layout ist der schlüssel zu einer erfolgreichen Anwendung.

                          Kommentar

                          Lädt...
                          X