programm ausführen per button

yui05

Mitglied
hallo,

vorne weg ich hab nicht sehr viel ahnung von php hab aber denoch versucht mein programm über einen button zu starten was aber nicht funktioniert.

das einzige was ich geschafft habe ist dass das programm startet wenn ich die seite lade :)
das war aber nicht wirklich schwer.

Code:
<html>
<body>

<?php

	$lampen = exec('E:\Programme\z-parswitch\Z-ParSwitch.exe -schalt 888 24 1000 0');

echo "<button type='submit' onClick='$lampen'>2 lampen</button>"

?>

z-parswitch ist ein programm wo ich über den drucker-port meine steckerleiste an/aus schalten kann.
 
Mit PHP kannst Du keine Programme auf dem Client ausfuehren, sondern nur auf dem Server.
Falls Du also auf dem System wo das Programm ausgefuehrt werden soll den Webserver laufen hast ist alles in Ordnung. Aber falls Du das Programm auf Deinem Client ausfuehren willst und das Script auf einem Server liegt, dann wirst Du mit PHP keinen Erfolg haben.
 
ja das ist ja klar dass das nicht auf dem client geöffnet werden soll :)

das programm liegt hier auf meinem server.
 
Ich mein ja nur. Da Du sagtest Du hast nicht so viel Ahnung von PHP und ich ausserdem erst vor kurzem hier jemanden hatte der auf diesen Hinweis gebruellt hat "Doch, das geht"

Der Weg den Dein Source-Code geht sieht ziemlich nach JavaScript aus.
Ich zerlege das mal ein wenig:
Du weist dem Button ein OnClick zu, der Inhalt des OnClicks ist $lampen.
Dieses setzt Du vorher =exec('E:\Programme\z-parswitch\Z-ParSwitch.exe -schalt 888 24 1000 0');
Das Problem hierbei ist jedoch, dass dies jetzt nicht in Inhalt steht, sondern so ausgefuerht wird und in $lampe die letzte Zeile des Outputs des Programmes steht.
Siehe exec()
Falls Du exec('E:\Programme\z-parswitch\Z-ParSwitch.exe -schalt 888 24 1000 0'); als String in $lampen haben willst musst Du "" drumrum setzen.
Jedoch wird auch das nicht zum Erfolg fuehren, denn OnClick wird clientseitig ausgefuehrt, was bei PHP nunmal nicht gegeben ist.
PHP wird ja vorher auf dem Server verarbeitet und der Client sieht nichts vom PHP-Script.

Was Du machen kannst ist folgendes:
Du hast einfach einen Submit-Button, nach dem Druecken wird ja die Action des Formulars ausgefuehrt, soll heissen es wird neu geladen. Dabei ueberpruefst Du ob der Button gedrueckt wurde und fuehrst dann dementsprechend das Programm aus.

Also, lange Rede kurzer Sinn: Back to the drawing board ;)
 
ich hab verstanden was du meinst aber das in die tat umzusetzen wird für mich schwierig.

mir ist grad noch was eingefallen.

ich könnte ja so eine art index machen.

ich kann 8 steckdosen schalten.

könnte ich dann 8 buttons machen die jeweils zu einer anderen seite verlinkt sind in denen dementsprechend die parameter für das programm gesetzt sind damit die seite zb steckdose nr. 5 einschaltet.
 
Du brauchst die nicht zu anderen Seiten verlinken, das geht alles mit einem Script.

Beispiel: schalter.php
PHP:
<html>
<body>
<?php
if ($_POST["switch"])
 {
  $switch=$_POST["switch"];
  if ($switch==1)
   {
    //Dose 1 schalten
   }
  if ($switch==2)
   {
    //Dose 2 schalten
   }
  if ($switch==3)
   {
    //Dose 3 schalten
   }
  if ($switch==4)
   {
    //Dose 4 schalten
   }
 }
?>
<form method="post" action="schalter.php">
<button type="submit" name="switch" value="1">Dose 1</button>
<button type="submit" name="switch" value="2">Dose 2</button>
<button type="submit" name="switch" value="3">Dose 3</button>
<button type="submit" name="switch" value="4">Dose 4</button>
</form>
</body>
</html>

Vielleicht ist es auch einfach moeglich die Variable $switch an Dein Programm weiterzugeben um diesem mitzuteilen welche Dose geschaltet werden soll, dann kannst Du Dir halt ein paar Zeilen sparen.
 
genial :-)

es funktioniert :D

danke!

ich hätte zwar noch ideen wie man das ganze ausbauen könnte aber das wird denk ich nicht so leicht wie das hier eben :)
 
Gut, dass es klappt.
Schreib einfach mal auf Deine Ideen, vielleicht ist's ja doch leichter als Du denkst.

By the way: Halte Dich bitte an die Gross- und Kleinschreibung.
 
okay.

ich muss vorher noch was zu dem programm sagen.

wenn du willst kannst du es dir mal hier downloaden.
http://www.free-archiv.de/z-parsw.zip

ich hab in dem programm 8 buttons. die kann ich alle (steckdosen) per klick anschalten.

jetzt kommt das mit den parametern.

wenn ich machen will dass dose 1 angeht, zb wie jetzt in dem php-script, dann muss ich hinter den pfad
-schalt 888 1 1000 0 dranhängen.

bei dose 2 wäre das dann
-schalt 888 2 1000 0

wenn ich jedoch dose 1 und 2 zusammen schalten will muss ich
-schalt 888 3 1000 0
dranhängen.

kannst du ja selbst mal testen indem du die Ports anklickst die beim programmstart
eingeschaltet werden soll und klickst rechts auf "Cron"

jetzt zu meiner idee.

interessant wäre es natürlich wenn ich auslesen könnte welche ports bereits geschaltet sind. denke aber das ist schwierig.

gut wäre es wenn ich auf der seite dann haken setzen könnte was angehn soll und was nicht :)

**edit**
Sorry. Das mit der Groß- und Kleinschreibung hab ich zu spät gesehen.
 
Zuletzt bearbeitet:
Erstmal mit Buttons, aber verkuerzt:
PHP:
<html>
<body>
<?php
if ($_POST["switch"])
{
  $switch=$_POST["switch"];
  $command="E:\Programme\z-parswitch\Z-ParSwitch.exe -schalt 888 ".$switch." 1000 0";
  exec($command);
}
?>
<form method="post" action="schalter.php">
<button type="submit" name="switch" value="1">Dose 1</button>
<button type="submit" name="switch" value="2">Dose 2</button>
<button type="submit" name="switch" value="4">Dose 3</button>
<button type="submit" name="switch" value="8">Dose 4</button>
<button type="submit" name="switch" value="16">Dose 5</button>
<button type="submit" name="switch" value="32">Dose 6</button>
<button type="submit" name="switch" value="64">Dose 7</button>
<button type="submit" name="switch" value="128">Dose 8</button>
</form>
</body>
</html>

Ich seh grad keinen Weg um per Parameter abzufragen welche Dose wie geschaltet ist.
Das macht es natuerlich schwer eine Seite mit Checkboxen zu bauen wo Du einfach nur an und ausklickst, uebernehmen drueckst und alles ist klasse.

Natuerlich koennte man die trotzdem bauen, jedoch wuerde sie wohl nicht anzeigen koennen wie der Status gerade ist.
 
Zuletzt bearbeitet:
Zurück