Problem mit Refresh Button

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

  • Problem mit Refresh Button

    Hallo,
    (längere Erklärung des Problems muss sein, da ich es nicht kürzer erklären kann)

    ich habe ein ziemlich verzwicktes Problem mit dem Refreshbutton des IExplorers. Vorweg: Ich weiss das man ihn nicht abfragen kann wegen serverseitigem arbeiten von php.

    Nun zu meinem Problem:

    Ich habe ein Formular mit 3 Eingabefeldern (Bezieht sich auf eine Oracle9iR2 Tabelle). Dort können Aenderungen vom Benutzer vorgenommen und in einer Datenbank abgespeichert werden.

    Jetzt will ich folgendes verwirklichen: Wenn der Benuzter eine Aenderung vornimmt und vergisst diese abzuspeichern, dann soll er genau 1 Mal daran "erinnert werden". Das funzt auch alles einwandfrei.

    Folgendermassen habe ich das verwirklicht:

    Wenn der Benutzer nun über den Record der Maske "blättert", dann wird immer die nächste etc Zeile der DB in die Maske eingelesen. Zudem speichere ich mir die Werte der Query die aktuell angezeigt werden in einem Array namens Query_Werte_zum_Vergleich ab. Der Record und Save funzt alles über "Submit" Buttons. übertragen wird das Formular mit $_POST.

    Zu Begin des Skriptes frage ich immer ab ob die einzelnen Felder des POST Arrays = den Feldern des Query_Werte_zum_Vergleich Arrays sind. Gibt es unterschiede dann kommt wie gesagt die Fehlermeldung.

    So wie ich das nun umgesetzt habe passiert folgendes beim Aufruf des Skriptes:

    1 Aufruf: Zu Begin:$_POST Array leer, Query_Werte_zum_Vergleich Array
    leer. Gegen ende des Skriptes wird Query_Werte_zum_Vergleich
    Array aber gefüllt mit Query Werten.

    2-n ter Aufruf: zu_Begin: $POST Array enhält werte und
    Query_Werte_zum_Vergleich enhält auch die
    entsprechenden Werte der Query. Gegen ende des Skriptes
    werden aber schon die neuen Werte der Query in das array
    Query_Werte_zum_Vergleich eingelesen.


    Wie gesagt. Das alles funzt einwandfrei. Bis der Refreshbutton des Internetexplorers gedrückt wird. Denn dann enhällt das Query_Werte_zum_Vergleich Array schon die nächten Werte, aber Das Formular wird nicht (wie bei einem Submit-Button) abgeschickt. Somit enthällt $_POST noch die alten Werte. Folglich kommt die Meldung das eine Aenderung stattgefunden hat, aufgrund der unterschiedlichen Werte in den Arrays.

    Hoffe man konnte man Problem verstehen, aber es ist wirklich nicht einfach zu beschreiben. Hänge schon eine lange Zeit daran, aber ich weis nicht wie ich das lösen kann.

    Danke für Tipps

  • #2
    kannst du das nicht alles in einem array speichern? also um eine dimension erweitern? so daß dir werte nicht verloren gehen? ließe sich damit eine lösung finden? (mit $_SESSION o.ä.)

    meinst du internet explorer oder browser?
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Also ich mein den Refresh vom Internetexplorer.(Hab nur mit diesem getestet)

      Das Problem mit dem überschreiben besteht. Weiss nicht ob das einen Unterschied machen würde, wenn ich statt in einem 2ten Array zu speichern ein mehrdimensionales anlegen würde. Die Daten würden beim Refresh doch auch dann am unteren Ende des Skriptes mit den neuen Werten der Query überschrieben werden. Das Problem beim Refresh ist ganz einfach das das $_POST Array nicht neu gefüllt wird. Darauf baut aber mein Skript eigentlich auf. Das die Query die Werte überschreibt ist normal. Das Passiert noch beim letzten aufruf des Skriptes vor der Refreshbetätigung

      Kommentar


      • #4
        Nomal zu meinem Problem. Habe jetzt schon mehrere Tage versuch mein Skript imun gegen das Betätigen des Refresh buttons zu machen. Jedoch ohne Erfolg.

        Dafür hier mal ein ganz simples Beispiel
        PHP-Code:

        if(!isset($_POST['senden']))
        {
        <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
        <input type="text" name="name">
        <input type="submit" name="senden" value="Senden">
        </form>
        }
        else
        {
         ech "sie heissen ".$_POST['name']."<br>";
        <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
        <input type="text" name="name">
        <input type="submit" name="senden" value="Senden">
        </form>
        }
        Beim ersten Aufruf wird noch kein Name ausgegeben und ab dem 2ten werden die eingegebenen Namen angezeigt. Wie kann ich denn nun hierbei sicherstellen, dass der Refreshbuton keine Wirkung hat(hat hier sowieso keine, da es ein stark vereinfachtes skript ist, was keine Werte vergleicht etc)

        Also ich würde jetzt geren durch gezieltes setzen von Variablen beim betätigen des Refreshbuttons ausgegeben haben: echo "refresh".

        Habe hier oder in einem anderen Forum einen Beitrag gelesen, worin stand dass man durch setzten von Variablen ein refresh vermeiden kann.

        Kann mir dabei jemand helfen
        Zuletzt geändert von galaxy2; 08.03.2006, 15:31.

        Kommentar


        • #5
          Ich weiß jetzt nicht, ob es dein Problem trifft, aber du könntest überprüfen, ob der Submit-Button gedrückt wurde ($_POST['NAMEDESSUBMITBUTTONS']... falls nicht, dann ist es "der erste Aufruf", außer natürlich er hat ihn schonmal gedrückt und refresht dann...

          Das Problem dürfte eig. nicht am IE liegen, da PHP ja Serverseitig ist...

          Gruß
          icecream
          icedcream.de Webdesign Regensburg

          Kommentar


          • #6
            Ich könnte mir vorstellen, dass man sich in einer Session Variabeln serverseitig merken musst, was man ihm gesandt hast. Mit Refresh bekommst Du genau die gleiche Anfrage nochmals inklusive allfälliger hidden Felder. Aber auf die Session Variabeln hat Refresh keinen Einfluss. Es könnte auch mit einem Cookie gehen, davon sollte IE den alten Wert auch nicht mehr haben, wenn er refresht. Das Cookie kann die Anzahl Aufrufe zählen (ich habe sowas, bei refresh zählt es tatsächlich weiter).

            HTH.

            Kommentar


            • #7
              Hallo,

              ich arbeite bei meinen Skripten mit einer Session. Den Tipp das man eine Variable setzten soll und so weiter habe ich auch schon gelesen. Aber wie genau das gehehn soll weiss ich nicht. Habe schon viele Variablen gesetzt, jedoch immer erfolglos. Mich würde mal interessieren wie man sowas hier lösen kann.

              Danke für Tipps

              Kommentar


              • #8
                Hi,

                Du speicherst alles was vom Formular kommt in einer Session und bevor du das machst, überprüfst du, ob der Inhalt der Session sich mit dem Inhalt von POST deckt. Wenn ja, dann nichts machen, wenn nein, dann dein Script ausführen und Sessioninhalt ersetzen.

                Gruß Thomas

                Kommentar


                • #9
                  Ob jemand SUBMIT oder REFRESH gedrückt hat, kann man mit einem Cookie (anstatt Session) und einem verborgenen Feld herausfinden. Allerdings ist Session die bessere, weil robustere Version.

                  Die Idee mit Cookie ist folgende:
                  PHP-Code:
                  #alte Werte speichern (sofern vorhanden)
                    
                  $cookiealt=$_COOKIE['cookie'];
                    
                  $postedcookie=$_POST['postedcookie'];
                    
                  $cookieneu$cookiealt+1;
                    
                  #neue Werte ausgeben
                    
                  setcookie('cookie',$cookieneuexpires=30 minuten)
                    <
                  input type=hidden name=postedcookie value=$cookieneu>

                    if (
                  $postedcookie!=$cookiealt) echo 'er hat nicht submitted, sondern refreshed'
                  Man muss dann noch die Fälle "Cookie nicht gesetzt" und "POST-Variable nicht gesetzt" behandeln, um keine Syntaxfehler zu bekommen. Bei mir funktioniert das. Bei einem POST bekommst Du das neue cookie und das neue hidden. Bei einem Refresh bekommst Du das neue Cookie, aber nochmals das alte hidden. Damit kann man es unterscheiden.

                  Wenn ichs mir recht überlege, kann man einfach, anstatt cookie, session brauchen und dann könnte es gehen. Zumindest würde ich, nachdem cookie läuft, so weitermachen.

                  Kommentar


                  • #10
                    sorry, fehlbedienung, gelöscht.

                    Kommentar

                    Lädt...
                    X