Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Script nur einmal aufrufen lassen

Einklappen

Neue Werbung 2019

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

  • PHP Script nur einmal aufrufen lassen

    Ich habe ein größeres Problem, wenn sich ein User ausbezahlen lassen möchte, und Klicks auf Auszahlung, und Klickt dabei ständig auf die Return Taste, wird der User mehrfach ausbezahlt, und sein Guthaben geht ins Minus. Gibt es eine Möglichkeit dies zu vermeiden.

    Für eine schnelle Hilfe, wäre ich sehr dankbar.


  • #2
    kannst mit java script den button sperren.
    wenn dus lieber server seitig willst, mach ne zeit sperre. so das es nach der ausführung 1 minute oder so nicht ausgeführt werden kann.

    oder wie meinst du das?
    Klick mich


    Kommentar


    • #3
      Es wird ja das Guthaben aus der SQL-Datenbank ausgelesen, aber durch das mehrfach Klicken gibt es dann mehere Auszahlungen. Es müsste so gemacht werden, das der User das PHP Script wirklich nur einmal aufrufen kann, und nicht 30 mal hintereinander.

      Wie genau würde das mit der Serverseitigen Sperre Funktionieren?

      Kommentar


      • #4
        pflanz bei der script abfrage die zeit, zu der es ausgeführt wurde in die datenbank. bei jeder weiteren abfrage vergleichst du die zeit mit der gerade vorherrschenden zeit und errechnest die differenz. und je nachdem entweder auszahlen oder net.
        Klick mich


        Kommentar


        • #5
          Das habe ich schon Probiert, funktioniert aber nicht, die Auszahlungen werden dennoch mehrfach durchgeführt, erkommt garnicht dazu dies auszulesen.

          Kommentar


          • #6
            des kann ich mir net vor stellen.
            wenn das auslesen eine if bedingung ist, und das if nicht erfüllt ist, führt der das auch net aus.
            Klick mich


            Kommentar


            • #7
              Ich denke mal, das Problem ist, das Daten über eine externe Schnittstelle erst geladen werden müssen, was leider ein bisschen Zeit dauert, und in dieser zwischenzeit sind mehere Auszahlungen möglich, durch das viele Klicken. Da die SQL Datenbank erst abgeglichen wird, sobald die Daten von der externen Schnittstelle zurück gekommen sind.

              Kommentar


              • #8
                ich denke der fehler liegt an deinem code.

                die if frage wird ja so lange nicht ausgeführt bis die bedingung erfüllt ist.

                das hat mit der zeit meines wissens nix zu tun.
                Klick mich


                Kommentar


                • #9
                  Ich denke ich weiß jetzt wie ich es mache, ich ziehe einfach das Guthaben vorherr ab, bevor auf die extere Schnittstelle zugegriffen wird, so gibt es keine Zeitverzögerung mehr, und es sollte dann Funktionieren.

                  Kommentar


                  • #10
                    Wenn der Server unter Linux läuft kannst du das evl. über Shared Memory lösen ansonsten bliebe nur der Weg über die Datenbank oder einer Datei.

                    Shared Memory Funktionen -> http://www.php.net/shmop
                    Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                    Kommentar


                    • #11
                      Zitat von Markus Biehl
                      Das habe ich schon Probiert, funktioniert aber nicht, die Auszahlungen werden dennoch mehrfach durchgeführt, erkommt garnicht dazu dies auszulesen.
                      Dann hast du nen Logikfehler in deinem Script. Wir können aber nicht erraten welchen...

                      Kommentar


                      • #12
                        Ich versteh das Problem der Lösung nicht

                        Pro Klick wird ein Skript aufgerufen, das die Ausbezahlung übernimmt. Dieses Skript sollte halt vor jedem Aufruf/vor jeder Speicherung des neuen Kontostands den aktuellen Kontostand prüfen. Wo liegt das Problem?

                        Falls es um die Zeit zwischen zwei SQL-Anfragen geht: entweder Transaktionen oder einfache Anfragen (Prüfung und Ausbezahlung in derselben Anfrage) oder Sperrung (Lock) der entsprechenden Tabellen verwenden.

                        Kommentar


                        • #13
                          Zitat von Saraneus
                          oder Sperrung (Lock) der entsprechenden Tabellen verwenden.
                          wie sollte das denn gehen?
                          Ich hab mir mal die mysql Befehle angeschaut aber ich sehe so direkt keine Möglichkeit einen Lock einzustellen, auch der SQL "LOCK TABLE <name>" gibts in MySQL nicht.
                          Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                          Kommentar


                          • #14
                            http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

                            Kommentar


                            • #15
                              hmmm ok die Syntax ist komplett anders ...
                              Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                              Kommentar

                              Lädt...
                              X