Befehl über Webserver bei Öffnen des Browsers nicht erneut senden

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich habe folgendes Problem mit meinem Webserver:

    Meine Heimautomation wird durch Befehle über den Webserver mittels php gesteuert. Das Problem ist, dass wenn ich über die Firefox-App an meinem Smartphone einen Befehl gesendet habe, den Browser einfach wegdrücke und ihn zu einem späteren Zeitpunkt wieder öffne wird diese Seite wieder geladen und der Befehl versehentlich erneut gesendet.

    Gibt es hier eine Möglichkeit dieses versehentliche Senden zu unterbinden? Und zwar nicht in der Weise die App so einzustellen, dass alle Seiten jedes Mal automatisch geschlossen werden.

    Wäre auch für einfache Stichworte als Denkanstoß schon dankbar. Kenne mich mit http & php Programmierung nicht besonders gut aus.

    Vielen Dank vorab.

  • Befehl über Webserver bei Öffnen des Browsers nicht erneut senden? Schau mal ob du hier fündig wirst!

  • Das einfache wegdrücken musst du lassen.

    Bzw. die Seite vor dem Wegdrücken manuell schließen, dann wird sie auch beim nächsten Öffnen nicht geladen. Tippst du die "Befehl-URLs" eigentlich manuell in die Adresszeile ein?! Das ist ja anstrengend... Gibt's da kein schickes Web-UI, womit dein Problem auch schon behoben wäre?

    -> Stichwort "Ajax".

  • Vielen Dank schonmal für die Antworten.

    Aber das manuelle Schließen jedes Mal nachdem ich zB eine Lampe eingeschaltet habe würde ich eigentlich gerne verhindern. Oder gibt es die Möglichkeit die Webseite nach dem Ausführen des Befehls vielleicht automatisch zur Startseite zurückzuleiten? Dann würde bei erneutem Öffnen einfach die Startseite geladen werden.

    Und nein natürlich tippe ich die Befehle nicht händisch ein :) Die werden durch Buttons ausgelöst.

  • Also ich habe Buttons die beispielsweise so erstellt werden:


    <a class="button" href="<?php print($_SERVER['PHP_SELF']); ?>?command=lamp">

    <h2>Lampe</h2></a>

    Und per php wird dann durch folgende Abfrage eine Aktion ausgelöst:

    if (isset($_GET['command'])) {

    if($_GET['command'] === 'lamp') {

    ...} // -> BEFEHL ausführen

    }

    Nach dem Senden des Befehls steht nun folgendes in der Addresszeile:

    http://.../programm.php?command=lamp

    Wenn ich die Browser-App nun durch Drücken der Home-Taste schließe und ein anderes Mal einfach öffnen will, dann läd er eben die letzte Seite http://.../programm.php?command=lamp und führt natürlich ungewollt den Befehl aus.

    Nun fehlt mir einfach irgendwie der Ansatz das zu verhindern.

  • State of the art wäre AJAX.

    Und per php wird dann durch folgende Abfrage eine Aktion ausgelöst:

    Das kann so bleiben.

    Nur das:

    <a class="button" href="<?php print($_SERVER['PHP_SELF']); ?>?command=lamp">

    <h2>Lampe</h2></a>

    Musst du so ändern, dass nicht die Seite mit zusätzlichem Parameter aufgerufen wird (was beim neu laden aufgrund der Übermittlung desselben Parameters Probleme macht), sondern du einen AJAX-Request absetzt, mit derselben URL. Auch wenn GET hier semantisch nicht korrekt ist.

  • Vielen Dank für die Hilfe.

    Ich habe es nun allerdings ganz simpel folgendermaßen gelöst:

    <?php

    if(isset($_GET['command'])) {

    if($_GET['command'] === 'lamp') {

    ...

    }

    elseif(...){

    ...

    }

    header("Location: " . $_SERVER['PHP_SELF']);

    exit();

    }

    ?>

    Funktioniert soweit ohne Probleme und bewirkt genau das was ich wollte.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!