Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [JavaScript][CSS][PHP]button/guzik do sterowania przekaźnikiem
piterek-23
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Witam,

Panowie/Panie, jak zrobić stronkę w php (wydaje mi się, że będzie najlepiej) aby można było sterować przekaźnikami na serwerze?

Mam programik dzięki któremu steruje (konsola Linux, Debian) w ten sposób:
/var/www/power.sh on 1 -włączy przekaźnik nr.1
/var/www/power.sh off 1 -wyłączy przekaźnik nr.1
/var/www/power.sh status 1 -wyświetli status (on/off) przekaźnika nr.1

Do sedna... jak to zrobić, aby na stronie była ikona (ikony-docelowo około 100) która jest obrazkiem on.png lub off.png (według statusu) a jak ją kliknę to się zmieni w stan przeciwny?

Tak na chłopski rozum... Otwieram przeglądarkę, wchodzę na swoją stronę i wyświetlają mi się ikony z aktualnym stanem przekaźników. Kliknę na ikonę z np. "on", a ona mi się zmieni na "off" i w tle uruchomi program, czyli wyłączam przekaźnik.

Ten post edytował piterek-23 19.08.2014, 21:01:45
Go to the top of the page
+Quote Post
by_ikar
post
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. $power = empty($_GET['power']) ? false : $_GET['power'];
  4.  
  5. if(false !== $power)
  6. {
  7. exec('power.sh '.('on' == $power ? 'on' : 'off'));
  8. }
  9.  
  10. echo '<a href="'.$_SERVER['PHP_SELF'].'?power=on"><img src="images/on.png"></a> <-> <a href="'.$_SERVER['PHP_SELF'].'?power=off"><img src="images/off.png"></a>';


Ten post edytował by_ikar 19.08.2014, 20:49:04
Go to the top of the page
+Quote Post
piterek-23
post
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Chyba nie bardzo umiem to zastosować-nie działa, nic się nie dzieje po kliknięciu na ikonę.
To co pokazałeś to dwie ikony, a można zrobić tak aby to była jedna ikonka-takie wszystko w jednym?

Ten post edytował piterek-23 19.08.2014, 21:08:09
Go to the top of the page
+Quote Post
by_ikar
post
Post #4





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Można tak zrobić żeby była jedna ikona, tyle że wtedy powiedzmy twój power.sh musiał by zwracać stan w jakim się znajduje, w przeciwnym wypadku, możesz się już tylko sugerować tym czy przed chwilą został użyty "włącznik", tyle że wtedy kiedy otworzyłbyś stronę jeszcze raz, znów było by ON zamiast OFF. To jest tylko przykład jak może to być zrobione, pod warunkiem że niektóre dane podmienisz, bo ja nie wiem co ty tam masz. Jeżeli sobie z czymś takim nie radzisz (tzn nie rozumiesz tego co ci wysłałem) to przykro mi, ale nie wiem czy jestem w stanie ci jakoś to wytłumaczyć, ponieważ to są absolutne podstawy co ci tutaj wysłałem.

Możesz do tego przykładu dodać sobie wyświetlanie co zwraca exec:

  1. <?php
  2.  
  3. $power = empty($_GET['power']) ? false : $_GET['power'];
  4.  
  5. if(false !== $power)
  6. {
  7. echo exec('power.sh '.('on' == $power ? 'on' : 'off'));
  8. }
  9.  
  10. echo '<a href="'.$_SERVER['PHP_SELF'].'?power=on"><img src="images/on.png"></a> <-> <a href="'.$_SERVER['PHP_SELF'].'?power=off"><img src="images/off.png"></a>';


W ten sposób będziesz mógł sprawdzić czy komenda się wykonuje lub czy nie wyświetla jakichś błędów (np niepoprawna ścieżka do power.sh).
Go to the top of the page
+Quote Post
piterek-23
post
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Z pomocą wujka Google zrobiłem coś takiego
  1. <?
  2. if($_GET[on]=="on"){
  3. $script="/var/www/power.sh on 1";
  4. $message=shell_exec($script);
  5. header("Location: test.php");
  6. }
  7. if($_GET[off]=="off"){
  8. $script="/var/www/power.sh off 1";
  9. $message=shell_exec($script);
  10. header("Location: test.php");
  11. }
  12. ?>
  13. <html>
  14. <a href="?on=on"><img src="images/on.png"></a>
  15. <a href="?off=off"><img src="images/off.png"></a>
  16. </html>

Na stronie mam dwa guziki "on" i "off" wszystko działa.
Jak teraz zrobić aby to był jeden obrazek, a nie dwa ?
Jak to zrobić aby obrazek (obazek 2w1-on/off) sam się ustawił do stanu?

Napisałem skrypt /var/www/status1.sh który sprawdza stan:

#!/bin/bash

status1=$(/var/www/power.sh status 1)
echo "$status1"

Po wywołaniu w konsoli podaje stan "on" lub "off" zależnie od stanu przekaźnika 1

Jak to teraz wszysko wsadzić w jeden "guzik"?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Skoro masz wartosc to robisz prosty IF ELSE i wyswietlasz odpowiedni guzi w zaleznosci od wartosci


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piterek-23
post
Post #7





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 20.08.2014, 14:15:55 ) *
Skoro masz wartosc to robisz prosty IF ELSE i wyswietlasz odpowiedni guzi w zaleznosci od wartosci


Możesz coś więcej powiedzieć?
Skrypt BASH jeszcze potrafię sobie napisać, ale PHP, HTML to czarna magia dla mnie sad.gif
Go to the top of the page
+Quote Post
CuteOne
post
Post #8





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


  1. if($_GET[on]=="on"){
  2. $script="/var/www/power.sh on 1";
  3. $message=shell_exec($script);
  4. header("Location: test.php");
  5. }
  6. else {
  7. $script="/var/www/power.sh off 1";
  8. $message=shell_exec($script);
  9. header("Location: test.php");
  10. }
  11. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Dzis jakaś mania nieczytania ze zrozumieniem....

@CuteOne chodzi o to by się pojawiał jeden guzik a nie jak teraz dwa naraz... Jeden guzik a nie jeden IF ELSE.... tongue.gif

To są guziki
<a href="?on=on"><img src="images/on.png"></a>
<a href="?off=off"><img src="images/off.png"></a>

To one mają być w IF. Teraz jak już wszystko jasne, to możesz pomóc jeszcze raz CuteOne smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To weź sie wkoncu obudz bo skrypt jest nadal bledny.... Nigdzie nie inicjalizujesz zmiennej $icon. Weź pod uwage fakt, że gdy pierwszy raz wejdziesz w skrypt to ani OFF a ni ON nie pojdzie.

$icon ma byc ustalona na podstawie statusu ktory jest w zmiennej $status, a nie na podstawie wcisnietego guzika... Zeby takie podstawy musiec jeszcze tlumaczyc.,.. tongue.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Po odswiezeniu nadal masz zle. Powtarzam po raz kolejny
Cytat
$icon ma byc ustalona na podstawie statusu ktory jest w zmiennej $status, a nie na podstawie wcisnietego guzika



edit:
Aj, @CuteOne, nieladnie tak kasowac posty, na ktore ktos odpowiadał :/ A juz szczegolnie ze było tam 95% odpowiedzi i wystarczylo zrobic drobną poprawkę


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piterek-23
post
Post #12





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Kolego @CuteOne
Możesz jeszcze raz pokazać kod o którym mówi @nospor?
Go to the top of the page
+Quote Post
Rochu
post
Post #13





Grupa: Zarejestrowani
Postów: 64
Pomógł: 14
Dołączył: 25.09.2010

Ostrzeżenie: (0%)
-----


Jeżeli wszystko dobrze zrozumiałem to by tak to miało wyglądać + dodałem warunek, by nie było możliwości wywoływać ponownego uruchomienia, kiedy jest już on aktywny

  1. <?php
  2.  
  3. $status = shell_exec("/var/www/status1.sh"); //pobierasz aktualny status
  4.  
  5. if( in_array($_GET["action"], array("on", "off")) && $_GET["action"] != $status ){
  6.  
  7. $script = "/var/www/power.sh ".$_GET["action"]." 1";
  8. $message = shell_exec($script);
  9. header("Location: test.php");
  10.  
  11. }
  12.  
  13. $icon = ($status == "on") ? '<a href="?action=off"><img src="images/off.png"></a>' : '<a href="?action=on"><img src="images/on.png"></a>';
  14.  
  15. ?>
  16.  
  17. <html>
  18. <?php echo $icon; ?>
  19. </html>
Go to the top of the page
+Quote Post
piterek-23
post
Post #14





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Kolego @Rochu
Coś jest nie tak, bo jak wejdę na stronę to pokazuje mi się ikonka "off" (nie zależnie czy jest włączony czy nie przekaźnik) mogę na nią kliknąć tylko raz. Jeżeli jest wyłączony przekaźnik to go włączę i na tym koniec. Gdy jest włączony to nic nie zrobię sad.gif

Czy w ogóle da się coś takiego zrobić jak sobie wymyśliłem?
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No dobra, ale skopiowales to bezmyslnie:
$status = shell_exec("/var/www/status1.sh")
?
Czy moze jednak podstawiles swoją komende? Bo przeciez na sprawdzanie statusu masz inną komendę niz podano ci w kodzie.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piterek-23
post
Post #16





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Kolego @nospor
Tak zmieniłem ścieżki, @Rochu odwołał się do skryptu /status1.sh o którym pisałem. Ten skrypt również poda stan.
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No dobra, a patrzyles czy ten skrypt w podanym kodzie zwraca ci poprawną wartosc?

$status = shell_exec("/var/www/status1.sh")
var_dump($status);

wyswietla to co ma wyswietlac?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piterek-23
post
Post #18





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Odczytuje, ale "guzik nie przełącza.
Stan dobrze odczytuje.
https://imageshack.com/i/p5XX20TEj (czy tu na forum można wrzucać obrazki?)
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No wlasnie masz złe wartosci. Widac wyraznie, ze masz na koncu dodane dwa biale znaki, np. dwie spacje...

Tak ma byc:
$status = shell_exec("/var/www/status1.sh"); //pobierasz aktualny status
$status = trim($status); //wyrzucenie bialych znakow


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piterek-23
post
Post #20





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Teraz już ładnie pobiera status i odpowiednia ikona (on.png, off.png) ustawia się do aktualnego stanu przekaźnika smile.gif
Nie mogę teraz sobie przełączać on/off "guzikiem sad.gif

Ten post edytował piterek-23 21.08.2014, 12:50:16
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 18:46