Problem mit Header Funktion
Hallo ạllerse̱i̱ts,
ich habe auf meinem Raspberry (nicht Blackberry) eine Website mit zwei Bildern (on und off buttons) hinzugefügt, welche mit href auf jeweils auf ein PHP-Script referenzieren. Diese widerrum rufen jeweils ein Bash Script auf welches GPIOS steuert.
Zusätzlich möchte ich den On Knopf aus Sicherheitsgründen verschwinden sobald dieser geklickt wurde.
Die Funktion in jQuery habe ich bereits implementiert!
Code:
function hideOn () {
if ($('#on').hasClass('col-sm-4'))
$("#on").fadeOut(700, function(){
});
}
Mein PHP Script sieht so aus:
PHP-Code:
<?php
shell_exec ('/var/www/html/an.sh');
header("Location:index.html");
?>
Ihr seht wahrscheinlich schon das Problem, unzwar wird erst die jQuery Funktion ausgeführt, das heisst das Bild verschwindet, dann das PHP Script welches mit der header Funktion wieder die index.html refresht und damit der On Button wieder auftaucht. Ich möchte allerdings, dass der Onknopf verschwindet nach onclick, das PHP script aufgerufen wird und der On Button immer noch verschwunden ist.
Hoffentlich ist es verständlich angekommen.
Merci für mögliche Unterstützung:)
AW: Problem mit Header Funktion
Hab nicht wirklich Ahnung wie man sowas gewöhnlich löst, aber meine erste Idee wäre eigentlich im onclick Handler der Bilder das fadeout & ein XMLHttpRequest zu machen.
Damit sparst du dir den Header redirect.
Gibt aber mit Sicherheit elegantere Lösungen ;)
AW: Problem mit Header Funktion
Mach dir doch noch ein Script welches den Status des GPIO abfragt, shell_exec sollte dir in PHP normalerweise den Exitcode deines Shellscripts zurückgeben. Dann kannst du mittels PHP unterschiedlichen HTML-Code ausgeben. Ist doch viel cooler wenn du im Browser auch den Status deines IO Pins siehst.
AW: Problem mit Header Funktion
Ich würde in die Richtung von gORDon_vdLg gehen bzw. sogar weiter. Du schreibst der Button soll aus Sicherheitsgründen verschwinden, dann ist das verstecken eines Buttons ja irgendwie eine seltsame Idee. Ich würde vorschlagen, dass du den Status ausliest und jeweils die Option anbietest die Sinn macht. Aktuell an? Dann gibt es nur einen Button zum Ausschalten. Aktuell aus? Dann gibt es nur einen Button zum Einschalten
AW: Problem mit Header Funktion
AW: Problem mit Header Funktion
Die Ansätze klingen gut, jedoch habe ich in PHP kaum Erfahrung, aber das sollte kein Hindernis sein.
Den Einwand von rax mit Hilfe von Ajax finde ich auch gar nich so schlecht, denn durch ajax sind solche Methoden ohne Seite-reload möglich.
Werde mich jedoch auf die PHP Lösung stürzen.
Besten Dank an das Trio
AW: Problem mit Header Funktion
Vorschlag:
Löse das ganze eventuell über ein externes Php Script, das du in nem unsichtbaren Iframe lädst beim Button klick.
So hast du zwar kein Exit-Code deines Scripts zur verfügung, du kannst aber easy den Button verstecken & er bleibt auch versteckt.
Beispiel:
Code:
<iframe id="myframe" src="#" width="0" height="0"></iframe>
<input type="button" id="mybt" value="Anschalten" onClick="javascript:on();">
<script>
function on()
{
document.getElementById('myframe').src="SwitchItOn.php"; //Php Script in Iframe laden
document.getElementById('mybt').style="display:none;"; //Button wegmachen
}
</script>
Müsstest du aber testen ob das ganze so machbar wäre.. Habe bisher nicht mit dem Rapsberry gearbeitet und kann dir da leider nichts genaueres zu sagen deshalb.
Mein Vorschlag ist nicht die schönste Methode, aber sollte theoretisch klappen :rolleyes:
Alternative Idee:
Du könntest dein HTML Code & den Code zum aufruf des Shell scriptes alles in eine PHP Datei packen.
Beim Button-Drücken rufste nun die gleiche PHP Datei auf, schickst aber nen POST oder GET Befehl mit.
Wenn der POST / GET Befehl nun vom Script erkannt wird, weiß es "Da hat jemand den Anschalt Knopf gedrückt".. und du könntest dann den Button automatisch vom Script einfach ausblenden lassen (garnicht erst den HTML Code des Buttons an den Browser ausgeben).
Und zusätzlich halt dann dein Shell Script Kram PHP basiert machen.
Pseudocode:
Code:
<?
$bt_pressed = $_GET['pressed'];
echo "HTML CODE";
echo "HTML CODE";
echo "HTML CODE";
if($bt_pressed != "true")
{
echo "HTML CODE FÜR BUTTON";
}else
{
ShellScriptAufrufen();
}
echo "HTML CODE";
echo "HTML CODE";
echo "HTML CODE";
?>
Beim Button OnClick einfach deine Php datei mit dem Parameter "?pressed=true" (In der Url) aufrufen, und voila.
Der Button ist dann automatisch "ausgeblendet" wenn der Parameter erkannt wird.
Schöner gelöst ises dann aber wie vorgeschlagen das ganze mit Exit Code zu checken.. so kannst Dynamisch den richtigen Button einblenden etc.:)
AW: Problem mit Header Funktion
Ich glaube ich würde beides mischen, PHP-Script was live den Status abfragt. Das dann aber per Ajax aufrufen und das Toggeln auch, wie rax schon sagt. Ist funktional zwar Wumpe, ist aber furchtbar cool.