Paul: $_GET-Anhang aus Adresszeile entfernen

Hallo,

wie der Betreff schon sagt möchte ich den GET-Anhang aus der Adresszeile entfernen.

Grund:

Ich übergeben diverse Informationen über GET, z. B.:

<a href="index.php?action=goto&direction=next">Weiter</a>

Das Skript in der index.php wertet es aus und reagiert, z. B.:

if ($_GET["action"] == "goto" {
 if ($_GET["direction"] == "next" {
  showNextUserList();
 }
}

Wenn das Skript nun fertig ist und die neue Seite fertig geladen ist, bleibt in der Adresszeile in diesem Fall "http://domain.de/index.php?action=goto&direction=next" stehen. Drückt man jetzt die F5-Taste so wird also das Skript nochmal mit den selben parameter ausgeführt - was nicht erwümscht ist.

Meine Idee also: Ich lösche die Parameter nach der Verarbeitung aus der Adresszeile - nur wie?

Oder gibt's da eine bessere Möglichkeit?

MFG Paul

  1. Meine Idee also: Ich lösche die Parameter nach der Verarbeitung aus der Adresszeile - nur wie?

    parameter löschen geht nicht

    Oder gibt's da eine bessere Möglichkeit?

    script abarbeiten und dann redirect auf seite ohne parameter ist eine möglichkeit

  2. Ich weiß zwar nicht ob dass Dir weiterhilft, aber versuchs doch mal mit POST statt GET.

    1. Ich weiß zwar nicht ob dass Dir weiterhilft, aber versuchs doch mal mit POST statt GET.

      das hilft auch nicht, beim F5-drücken wird halt die POST-Anfrage nochmal abgeschickt ;)

      1. Hallo suit,

        das hilft auch nicht, beim F5-drücken wird halt die POST-Anfrage nochmal abgeschickt ;)

        Eben nicht. Dann wird der Benutzer gefragt, ober die vorherige Aktion nochmal durchführen will.

        Besser ist aber immer noch ein Redirect.

        Jonathan

        1. Hallo suit,

          das hilft auch nicht, beim F5-drücken wird halt die POST-Anfrage nochmal abgeschickt ;)

          Eben nicht. Dann wird der Benutzer gefragt, ober die vorherige Aktion nochmal durchführen will.

          die vorherige aktion ist "blah blah blah post daten gesendet, wollen sie das nochmal tun"? klar ist eine zwischenabfrage, bei get nicht - aber es läuft aufs selbe raus

          Besser ist aber immer noch ein Redirect.

          sagte ich in meinem anderen post bereits, aber die frage nach der sinnhaftigkeit stellt sich mir in diesem fall

          die frage ist, was diese get parameter überhaupt machen - sprich ist es ein echter url oder ein scriptinterner request der sowieso nicht in der adresszeile stehen sollte?

    2. Hello,

      Ich weiß zwar nicht ob dass Dir weiterhilft, aber versuchs doch mal mit POST statt GET.

      Post sendet beim Reload auch dieselben Parameter nochmals mit.

      Man kann zwar mit den Cacheeinstellungen herumspielen, nur weiß man dann trotzdem noch nicht, ob sich der Browser daran hält.

      Ein harzliches Glückauf

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  3. Hello,

    Wenn das Skript nun fertig ist und die neue Seite fertig geladen ist, bleibt in der Adresszeile in diesem Fall "http://domain.de/index.php?action=goto&direction=next" stehen. Drückt man jetzt die F5-Taste so wird also das Skript nochmal mit den selben parameter ausgeführt - was nicht erwümscht ist.

    Du könntest dem Script beibringen, dass es auf dieselben Parameter nicht noch einmal reagiert, sondern sich dann so verhält, als hätte es keine.

    Dazu baust Du einen Key in die URL ein, der in einer Sperrliste registiert wird.
    Wenn er einmal abgearbeitet wurde, wird er ungültig.

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  4. Hi,

    <a href="index.php?action=goto&direction=next">Weiter</a>
    Das Skript in der index.php wertet es aus und reagiert, z. B.:

    gaaanz schlechtes Konzept.

    HTTP ist zustandslos. Das heißt, dass jeder in HTTP stattfindende Aufruf - beispielsweise durch eine URL - immer unabhängig von allem ist(!), was eventuell mal geschehen sein mag und/oder geschehen wird. Deine URL muss *immer* das selbe[1] Ergebnis liefern. Mit einem "next" fehlt Dir der Kontext: Das nächste von was?

    Baue also eine URL auf, die auch bei einem Aufruf in drei Wochen noch das liefert, was heute mit ihr zu erwarten ist.

    Cheatah

    [1] Nicht Bit für Bit, sondern sinngemäß, also beispielsweise immer "die Liste der aktuellen Nachrichten".

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah!

      HTTP ist zustandslos. Das heißt, dass jeder in HTTP stattfindende Aufruf - beispielsweise durch eine URL - immer unabhängig von allem ist(!), was eventuell mal geschehen sein mag und/oder geschehen wird. Deine URL muss *immer* das selbe[1] Ergebnis liefern. Mit einem "next" fehlt Dir der Kontext: Das nächste von was?

      Hau mich net, aber genau dafür werden doch Sessions verwendet, dass die Reaktion eben nicht unabhängig vom vorherigen Geschehen ist,oder?

      Grüsse,
      Richard

      1. Hallo ritschmanhard,

        Hau mich net, aber genau dafür werden doch Sessions verwendet, dass die Reaktion eben nicht unabhängig vom vorherigen Geschehen ist,oder?

        Natürlich kann man Sessions und Cookies verwenden. Das ändert jedoch nichts dran, dass so ein Next-Verweis ziemlicher Unfug ist. Man kann ihn nicht Bookmarken, nicht an andere Leute schicken usw.

        Deshalb sollten normale GET-Abfragen immer das gleiche Ergebnis liefern (nicht unbedingt Bitgenau, wie Cheatah beschieb). Ansonsten nimmt man POST. Und wenn man nicht will, dass nach einem erfolgreichen POST-Aufruf aktualisiert werden kann, redirectet man den Benutzer (ein HTTP-Header-Redirect ist am sinnvollsten) nach dem Verarbeiten der Daten auf eine andere Seite (in einem Forum steht da dann z.B. häufig "Ihr Posting ist jetzt im Forum lesbar, blabla"). Eventuell muss man trotzdem serverseitig Maßnahmen implementieren, dass nicht zuviele Formulare hintereinander abgeschickt werden.

        Jonathan

      2. Hi,

        Hau mich net, aber genau dafür werden doch Sessions verwendet, dass die Reaktion eben nicht unabhängig vom vorherigen Geschehen ist,oder?

        ja. Das ändert aber nichts daran, dass die URL unter allen Umständen das (erwartungsgemäß) selbe zu liefern hat - und nicht plötzlich etwas anderes, wenn man mal den Reload-Button betätigt, mit dem Back-Button zurück geht und einen hyperinaktiven Cache besitzt, oder aber auch die Seite bookmarkt. Wenn eine Session im Spiel ist, gilt die Aussage innerhalb der Session - aber sie gilt.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
    2. Hi,

      <a href="index.php?action=goto&direction=next">Weiter</a>
      Das Skript in der index.php wertet es aus und reagiert, z. B.:

      gaaanz schlechtes Konzept.

      HTTP ist zustandslos. Das heißt, dass jeder in HTTP stattfindende Aufruf - beispielsweise durch eine URL - immer unabhängig von allem ist(!), was eventuell mal geschehen sein mag und/oder geschehen wird. Deine URL muss *immer* das selbe[1] Ergebnis liefern. Mit einem "next" fehlt Dir der Kontext: Das nächste von was?

      Baue also eine URL auf, die auch bei einem Aufruf in drei Wochen noch das liefert, was heute mit ihr zu erwarten ist.

      Cheatah

      [1] Nicht Bit für Bit, sondern sinngemäß, also beispielsweise immer "die Liste der aktuellen Nachrichten".

      Dies soll ja auch nicht der Fall sein. Die Blätterfunktion ist in einem abgesicherten Bereich und wird von einem Objekt zur Verfügung gestellt, dass sich auch die aktuelle Position merkt. Sobalt man sich abmeldet wird das Objekt gelöscht und somit ist die Funktion nicht mehr verfügbar.

  5. wie der Betreff schon sagt möchte ich den GET-Anhang aus der Adresszeile entfernen.

    Das macht mich neugierig.

    Wenn das Skript nun fertig ist und die neue Seite fertig geladen ist, bleibt in der Adresszeile in diesem Fall "http://domain.de/index.php?action=goto&direction=next" stehen. Drückt man jetzt die F5-Taste so wird also das Skript nochmal mit den selben parameter ausgeführt - was nicht erwümscht ist.

    Warum nicht erwünscht? Schliesslich liefert ja gerade diese Url eine bestimmte Ausgabe, die ja auch normalerweise reproduzierbar sein soll.

    Bei Formularen die nur einmal benutzt werden sollen, ist das klar, da bedient man sich ja dann auch gewisser Sperrroutinen, aber bei einer normalen Abfrage, wie zb. eine Blätterfunktion sehe ich keinen Grund.

    Aber da du bestimmt einen guten Grund hast, würde mich diese interessieren, vielleicht muss ich dann auch nochmal einige Projekte überdenken.

    Ina

  6. Was willst du den machen?
    Ich weiß es nicht genau deswegen kann es sein das ich mist schreibe.

    Versuch doch mit Sessions zu arbeiten die haben keinen Einfluss auf die url.

    <?php session_start();
    ?>