Ankündigung

Einklappen
Keine Ankündigung bisher.

Aktualisierungssperre im Affenformular

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Aktualisierungssperre im Affenformular

    Hi,

    Ich habe dieses Affenformular:

    [seite1.php]
    PHP-Code:
    if (!empty ($_POST["kaufen1"])) 
        {
          
    $aendern "UPDATE user Set kauf1 = 1 WHERE username LIKE '$username' LIMIT 1";
          
    $update mysql_query($aendern);
          
          
    $money $row->money;
          
    $money2 $money "5000";
          
    $aendern "UPDATE user Set money = $money2 WHERE username LIKE '$username' LIMIT 1";
          
    $update1 mysql_query($aendern);
        }
       else
        {
          echo 
    "<form action=\"seite1.php\" method=\"post\"><input type=\"submit\" name=\"kaufen1\" value=\"Kaufen\"></form>";                  
        } 
    Wen die Seite aufgerufen wird, führt PHP das else aus (dementsprechend das Formular). Wen jetzt der User auf den Formularbutton klickt, wird die ganze Seite neu geladen. Da aber im POST-Wert den Wert "kaufen1" übergeben wird, führt der Script die Aktion aus (+5000 in die Zelle money). Aber wen ich den Button drücke und der script ist ausgeführt und ich jetzt F5 drücke, führt PHP die Aktion zum 2. Mal aus.

    Wie kann ich das Verhindern? Mit Sessions? Oder kann man die Taste F5 Sperren?

    Danke für Antworten

    GLG sämi


  • #2
    Ich frage mich zunächst, welchen Sinn das ganze macht. Ansonsten enfach bei der Formularausgabe $_SESSION["canSend"] = true; und beim PHP-Code $_SESSION["canGet"] = false;
    Dann kannst du im PHP-Scipt abfragen, ob der User direkt vom Formular oder über F5 auf deine Seite kommt.
    Allerdings bitte mal den Sinn des Formulars posten, ich denke es gibt bessere Lösungen dafür..

    Kommentar


    • #3
      Hallo,

      du kannst nach dem erfolgreichen Speichern eine Weiterleitung vornehmen:
      PHP-Code:
      header("Location: /seite1.php");
      exit; 
      Somit geht der POST-Request verloren, F5 hat dann keine Wirkung mehr. Allerdings ist das Formular danach auch leer, aber das ist ja OK, schließlich wurde das Formular ja erfolgreich verarbeitet.
      "Mein Name ist Lohse, ich kaufe hier ein."

      Kommentar


      • #4
        Hi,

        Danke für die Antworten...

        Ist erfolgreich umgesetzt.

        glg sämi

        Kommentar


        • #5
          Ach so...

          der Sinn dafür ist, dass ich nicht plötzlich 10'000 in meiner money-Zelle habe, weil das führt zu Problemen.
          Aber es klappet gut...

          glg sämi

          Kommentar


          • #6
            Aber jetzt könnte theoretisch der User wieder auf die form gehen und die Daten neu eingeben und noch einmal "5000 Money" dazubekommen ..?
            was genau soll das für einen Sinn haben ..?
            man kann das formular ja immer wider abschicken, das wird durch die wieterleitung nicht verhindert ...
            PHP-Code:
            if ( $humans >= ) {
               
            war ();

            Kommentar


            • #7
              Nein, denn das Formular enthält nur einen Submitbutton und kein Textfeld. Wen der Button gedrückt ist, wird die Seite neu geladen und der POST-Inhalt stimmt mit der IF Bedingung überein.

              Aber ich habe es jetzt anders gelöst:

              PHP-Code:
              <td><?php  
              $no 
              1;
              $kauf "kauf".$no;
              $verkauf "verkauf".$no;

                   if(!empty (
              $_POST["$kauf"]) and $_SESSION["kauf".$no] == 1)
                   {
                    
              $aendern "UPDATE user Set kauf$no = 1 WHERE username LIKE '$username' LIMIT 1";
                    
              $update1 mysql_query($aendern);


                    
              $money $row->money;
                    
              $money2 $money "5000";
                    
              $aendern "UPDATE user Set money = $money2 WHERE username LIKE '$username' LIMIT 1";
                    
              $update1 mysql_query($aendern);
                    
              $_SESSION["kauf".$no] = 0;
                    echo 
              "<meta http-equiv=\"refresh\" content=\"0\">";
                    
                    if(
              $row->$kauf == "1")
                    {
                     echo 
              "<form action=\"[seite1].php\" method=\"post\"><input type=\"submit\" name=\"kauf\".$no value=\"Verkaufen\"></form>";
                    }
                     
                    }
                   if(!empty (
              $_POST["$verkauf"]) and $_SESSION["kauf".$no] == 0)
                   {
                    
                     
              $aendern "UPDATE user Set $verkauf = 0 WHERE username LIKE '$username' LIMIT 1";
                     
              $update mysql_query($aendern);
                  
                     
              $money $row->money;
                     
              $money $money 2500;
                     
              $aendern "UPDATE user Set money = $money WHERE username LIKE '$username' LIMIT 1";
                     
              $update1 mysql_query($aendern);
                     
              $_SESSION["feld".$no] = 1;
                     echo 
              "<meta http-equiv=\"refresh\" content=\"0\">";
                     
                     
                      if(
              $row->money >= "5000" and $row->$kauf == "0")
                      {
                       echo 
              "<form action=\"[seite1].php\" method=\"post\"><input type=\"submit\" name=\"verkauf\".$no value=\"Kaufen\"></form>";
                      }
                     
                    }
                  }
                 else
                  {
                   if(
              $row->$felder == "0")
                   {
                    if(
              $row->money >= "5000" and $row->$felder == "0" and $row->felder >= "$no")
                    {
                     echo 
              "<form action=\"[seite1].php\" method=\"post\"><input type=\"submit\" name=\"kauf\".$no value=\"Kaufen\"></form>"$_SESSION["kauf".$no] = 1;
                    }
                   }
                  else
                   {
                    if(
              $row->$kauf == "1")
                    {
                     echo 
              "<form action=\"[seite1].php\" method=\"post\"><input type=\"submit\" name=\"verkauf\".$no value=\"Verkaufen\"></form>"$_SESSION["kauf".$no] = 0;
                    }
                   }                  
                  }                      
                                         
              ?></td>
              Etwa so (Fehler vorbehalten wegen änderung).
              Aber das mit den Sessions ist eine gute Lösung. Die sind auch ziemlich sicher. Es läuft so gut und auch mit F5 ist man jetzt nicht der schläuere...

              GLG sämi

              Kommentar


              • #8
                besser, mach einen Header refresh :
                PHP-Code:
                header("Location: neueSeite.php"); 
                PHP-Code:
                if ( $humans >= ) {
                   
                war ();

                Kommentar


                • #9
                  Ja ich weiss, Chriz hat es auch schon vorgeschlagen. Aber jetzt habe ich schon alles so programmiert und es funktionniert...

                  Wenn ich mal Zeit habe werde ich mir diese Lösung mal anschauen. Aber trotzdem DANKE!
                  GLG sämi

                  Kommentar


                  • #10
                    - Ein Meta-Refresh darf nicht irgendwo stehen. Meta gehört immer in den HTML-Head! Dein Code ist ungültig. Dass er funktioniert ist Zufall.
                    - location-header-Befehle benötigen eine vollständige URL!
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      Dein Skript ist vermutlich anfällig für SQL-Injections.
                      "Mein Name ist Lohse, ich kaufe hier ein."

                      Kommentar


                      • #12
                        Was sollte passieren? Wen man auf die Seite möchte, muss man Firefox benuzen. Mit dem IE funktionniert der Script nicht.

                        Der Script funktionniert auf ca. 5 verschidenen PC und auf denen von meinen Kunden auch. Ich denke ich kann es so belassen. Oder sollte ich trotzdem den Script ändern?

                        Und was ist genau ein SQL-Injections?

                        DANKE

                        glg sämi

                        Kommentar


                        • #13
                          Selbst lesen macht klug. Besser Du lernst schnell, das Internet zu nutzen.
                          und auf denen von meinen Kunden
                          Grusel
                          Ich denke ich kann es so belassen
                          Ich denke das nicht

                          [MOD: Thread geschlossen]
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar

                          Lädt...
                          X