# PHP-Datei/Befehl durch JS ausführen lassen



## enforcer#22 (26. Dezember 2017)

Hallo liebe Community,

ich habe schon ewig nicht mehr auf Weboberflächen programmiert oder gescriptet (zuletzt zu der Zeit von HTML 4, gegen 2006) benötige aber jetzt Hilfe, da ich durch meine Suche im Netz keine hinreichende Auskunft für mein Problem finden konnte 

meine index.php soll zwei Buttons ausführen können


```
<div onClick="switchOn()" class="backbox">einschalten</div>
<div onClick="switchOff()" class="backbox">ausschalten</div>
 <script src="js/execute.js"></script>
```

die Funktionen aus onClick sind in execute.js geschrieben

```
function switchOn() 
{
  $.get("SchalterEIN.php");
  return false;
}
function switchOff() 
{
  $.get("SchalterEIN.php");
  return false;
}
```

und die beiden auszuführenden Dateien beinhalten jeweils den selben Befehl:


```
<?php
  exec('sudo ~/wiringPi/433Utils/RPi_utils/send 10001'); // oder send 10000
  //echo "hallo welt";
?>
```

Wenn ich auf meiner Raspberry Console die Schalter-Dateien mit "php SchalterEIN.php" (oder ...AUS.php) ausführe dann funktionieren diese auch. Nur die Weboberfläche scheint zu streiken, doch ich weiß lieder nicht woran es liegen könnte. Ich hoffe hier sind erfahrene und schlaue Köpfe die vllt. eine Lösung haben oder finden.

Vielen Dank schonmal im voraus.


----------



## Sempervivum (26. Dezember 2017)

Dein Javascript benutzt jQuery, hast Du es eingebunden? Wirf mal einen Blick in die Console.


----------



## enforcer#22 (26. Dezember 2017)

Danke erstmal für die erste Antwort 

Im Header der index.php ist *<script src="js/jquery.js"></script> *eingebunden. Der Inhalt ist jedoch nicht eingerückt und deshalb verzichte ich lieber darauf diesen in den Beritrag aufzunehmen.

Falls es hilft: Ich habe die Dateien aus folgendem Link abgeändert. Die ausführbare Syntax habe ich nicht angerührt.

https://cdn.raspberry.tips/2014/08/Heimautomation-Beispiel-Dateien1.zip


----------



## Sempervivum (26. Dezember 2017)

Und die beiden PHP-Dateien liegen auch im selben Verzeichnis wie die index.php? Webserver mit PHP läuft?


----------



## enforcer#22 (26. Dezember 2017)

Ja. Da habe ich auch drauf geachtet. 
Sind die Aufrufe in der execute.js sonst denn korrekt? Und auch, dass diese im Ordner "js" liegen und die ganzen *.php im darunter liegenden?


----------



## Sempervivum (26. Dezember 2017)

```
function switchOn()
{
  $.get("SchalterEIN.php");
  return false;
}
function switchOff()
{
  $.get("SchalterEIN.php");
  return false;
}
```
Sehe ich jetzt erst: Wenn der Code wirklich so aussieht, kann es nicht funktionieren, denn Du aktivierst beide Male *die selbe* PHP-Datei.


----------



## enforcer#22 (26. Dezember 2017)

Hab ich auch nicht gesehen, aber nach der Korrektur auf SchalterAUS.php keine Veränderung.


----------



## EuroCent (27. Dezember 2017)

Was gibt dir den der Parameter $.get() aus?
Schon mal geschaut was dir der Debugger sagt?

Ansonsten versuch es via $.ajax()


----------



## ComFreek (28. Dezember 2017)

Was sagt denn die JS Entwicklerkonsole? Kommen Fehler? Werden die Netzwerkanfragen ausgeführt?


----------



## enforcer#22 (28. Dezember 2017)

EuroCent hat gesagt.:


> Was gibt dir den der Parameter $.get() aus?
> Schon mal geschaut was dir der Debugger sagt?
> 
> Ansonsten versuch es via $.ajax()


Der Debugger meldet nur die Ausführung einer weiteren function, welche für die Uhrzeit zuständig ist



ComFreek hat gesagt.:


> Was sagt denn die JS Entwicklerkonsole? Kommen Fehler? Werden die Netzwerkanfragen ausgeführt?


wenn ich den Den Button zum einschalten drücke, dann kommt in der JS-Konsole keine Reaktion. Bei dem Button zum ausschalten "404 not found"


----------



## Kalito (28. Dezember 2017)

Da dein php-code keine Antwort zurück gibt, kann es sein, dass "Schalter ein" funktioniert. Bei 404 findet er die Datei nicht dort, wo sie liegen soll.


----------



## EuroCent (28. Dezember 2017)

Versuch mal mit console.log() zu arbeiten und schau ob deine Funktion überhaupt per JS angesprochen wird. 
Zudem stell dein execute.js Script in den Head Bereich.

Könnte mir vorstellen dass du switchOn() bzw. switchOff() aufrufst bevor deine function überhaupt existiert. 

Oder setz deine function wie folgt:

```
$(document).ready(function() {
    function switchOn() {
        $.get("SchalterEIN.php");
        return false;
    }

    function switchOff() {
        $.get("SchalterAUS.php");
        return false;
    }
});
```


----------



## ComFreek (28. Dezember 2017)

enforcer#22 hat gesagt.:


> Bei dem Button zum ausschalten "404 not found"


Entweder die Datei existiert nicht (was @Kalito schon schrieb) oder deine PHP-Datei sendet absichtlich einen 404-Code zurück. (Letzteres kann durchaus unabsichtlich passieren, gerade wenn man ein größeres Framework nutzt. Andersrum geht's auch: bei mir hat neulich der lokale Server konstant die index.html zurückgeliefert, auch wenn ich einen nichtexistenten Pfad /a/b/c.js angesprochen habe  )



EuroCent hat gesagt.:


> ```
> $(document).ready(function() {
> function switchOn() {
> $.get("SchalterEIN.php");
> ...


Das wird so sehr wahrscheinlich nicht funktionieren. Der Code wird die zwei Funktionen nur innerhalb des Kontextes der umgebenen anonymen Funktion bekannt machen. Dementsprechend werden sie nie von außen ansprechbar sein.

Wenn du sie global verfügbar haben möchtest, müsstest du 
	
	
	



```
window.switchOn = function () { /* ... */ }
```
 schreiben. Das ist dann aber äquivalent zu dem, wenn du die Funktionen einfach direkt in einem <script> definierst.


----------

