Skocz do zawartości
  • 0

Wykonywanie określonej metody php bez przechodzenia na inną stronę

Pytanie

Cześć, tu znowu ja xD. Chciałem zrobić tak, aby każdy z przycisków włączał inną funkcje php bez przechodzenia na inną stronę posługując się tylko html i php. Da się tak? Próbowałem POST i GET, ale taki sam wynik. Od razu powie ktoś jak inaczej zapisać kod, żeby nie wykonywało się tylko jedno wysłanie $command tylko np. 4? Każde po kolei? 

<form method="get" action="phpmethods.php">
					<input type="submit" class="btn_normalcmd" name="usunWszystkieSesje" value="Usuń wszystkie sesje "/>
					<input type="submit" class="btn_normalcmd" name="uruchomSerwer" value="Uruchom serwer" />
					<input type="submit" class="btn_normalcmd" name="wylaczSerwer" value="Wyłącz serwer" />
					<input type="submit" class="btn_normalcmd" name="zrestartujSerwer" value="Zrestartuj serwer"/>
				</form>
<?php 

	if(isset($_GET['usunWszystkieSesje'])) {
					$server['ip'] = "127.0.0.1";
					$server['port'] = "22";
					$server['user'] = "root";
					$server['passwd'] = "hahaniepodamwam";
					
					$command = "killall screen";
					
					if($ssh = ssh2_connect($server['ip'], $server['port'])) {
						if(ssh2_auth_password($ssh,$server['user'], $server['passwd'])) {
							$stream = ssh2_exec($ssh,$command);
							stream_set_blocking($stream,true);
							$data = "";
							while($buffer = fread($stream, 4096)) {
								$data .= $buffer;
							}
							fclose($stream);
							print $data;
						}else {
							echo "Uzytkownik lub haslo zle!";
						}
					}else {
						echo 'IP albo port jest zly!';
					}
	}
				
?>

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

7 odpowiedzi na to pytanie

Polecane posty

  • 0

Kombinujesz jak koń pod górę... i to jeszcze całkowicie niepotrzebnie.

Po pierwsze przy GET w tym przypadku ( i wielu innych) w ogóle nie ma potrzeby używania formularza (ofc. można go używać, pytanie tylko - po co?).

 

Twój kod HTML powinien wiec wyglądać tak:

<a href="index.php?action=1"><button class="btn_normalcmd">Usuń wszystkie sesje</button></a>
<a href="index.php?action=2"><button class="btn_normalcmd">Uruchom serwer</button></a>
...

Natomiast PHP:

if(isset($_GET['action']))
{
	if($_GET['action'] == 1)
	{
		//kod, który usunie sesje
	}
	if($_GET['action'] == 2) //oczywiście możesz to zrobić na elseif i wtedy np. gdy nie ma parametru/jest niepoprany wywalić jakiś error
	{
		//kod, który uruchomi serwer
	}
}

10 godzin temu, kamilo10PL napisał:

bez przechodzenia

Bez przechodzenia czy bez przeładowywania? Bo to dość duża różnica, sposób bez przechodzenia (nie wiem w sumie - po co? bo przecież zawsze można zrobić zwrotnego redirecta) masz powyżej, natomiast aby wykonać to samo bez przeładowywania musisz już użyć JS'a i wysyłać to AJAX'owo.

+

Błagam - nie używaj w kodzie, zarówno po stronie frontendu jak i backendu polskiego - wszystkie nazwy zmiennych, klas, funkcji powinny być zapisywane w j. angielskim. 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Pani Kasia

  • 0

To tak, to był kod testowy, próbowałem po prostu różnych sposobów (tak, wiem, nie znam PHP). Co do Polskich nazw to też wiem, programuje w C# tam już normalnie pisze. Bez przechodzenia, chce tylko żeby wszystko odbywało się na indexie. 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

poprzez "bez przechodzenia na inną stronę" rozumiem - bez przeładowywania strony po kliknięciu buttona "Wyślij" 

Jako, że jesteś na początku drogi z PHP'em polecam podpiąć sobie JQuery i skorzystać z metody Ajax. Niektórzy "znafcy" powiedzą, że JQuery to kobyła i powinno się ją wykorzystywać, gdy korzystamy ze znacznej części funkcji w niej zawartych, bo nie ma sensu używać jej  w małych projektach,  ale to na razie olej - jak podszkolisz się bardziej, to będziesz mógł się bawić z czystym z zapytaniami Ajaxowymi w czystym JS'ie 

 

Nazwę funkcji, która wykona się w PHP'ie wpisujesz w atrybut "name" każdemu buttonowi 

 

Plik .php z funkcjami

<?php

      $funckja_do_wykonania =   $_POST['function_name'];
      $funckja_do_wykonania();



    function zrestartujSerwer(){
        // wykonaj akcję dla funkcji
        if("Ok"){
            echo json_encode("ok");
        }else{
            echo "error";
        }
    }

 

index

 

Spoiler
<!DOCTYPE html>
<html lang="pl">

<head>
    <meta charset="UTF-8">
    <title>Asynchronicznie</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

</head>

<body>
<form method="get">
    <input type="submit" class="btn_normalcmd" name="usunWszystkieSesje" value="Usuń wszystkie sesje "/>
    <input type="submit" class="btn_normalcmd" name="uruchomSerwer" value="Uruchom serwer" />
    <input type="submit" class="btn_normalcmd" name="wylaczSerwer" value="Wyłącz serwer" />
    <input type="submit" class="btn_normalcmd" name="zrestartujSerwer" value="Zrestartuj serwer"/>
</form>
<script>

    $(document).ready(function () {
        $("form>input[type='submit']").click(function () {
            event.preventDefault(); // zaniechaj domyślnej akcji
            $.ajax({
                url         : "akcje_do_formularza.php", //nazwa pliku z funkcjami
                method      : "post", //typ połączenia (get lub post)
                dataType    : 'json', //typ danych jakich oczekujemy w odpowiedzi
                data        : { //dane do wysyłki
                    function_name: $(this).attr("name")
                }
                })
             .done(function(res) {
                alert("Wszystko przebiegło ok")
            })
            .fail(function(res) {
                alert("Wystąpił błąd w połączeniu");
            })
            .always(function() {
                // np. ikonka ładowania lub oczekiwania (wykonywane zawsze)
            });
        })
    })

</script>
</body>

</html>

 

 

 

 

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Pani Kasia

  • 0

To już z 'get' mam i działa fajnie, tylko bardziej nie działa mi przechodzenie do folderów i totalnie nie wiem jakbym mógł to zrobić, bo też skrypt próbowałem zrobić na debianie żeby on robił wszystko ale tez przechodzenie do innych folderow nie dziala (debian 9) i nie wiem co mam robic juz...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
24 minuty temu, kamilo10PL napisał:

To już z 'get' mam i działa fajnie, tylko bardziej nie działa mi przechodzenie do folderów i totalnie nie wiem jakbym mógł to zrobić, bo też skrypt próbowałem zrobić na debianie żeby on robił wszystko ale tez przechodzenie do innych folderow nie dziala (debian 9) i nie wiem co mam robic juz...

Kompletnie nie rozumiem z czym masz problem? Mógłbyś to jakoś sensowniej opisać, a najlepiej załączyć kod z którym masz problem?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@carbonx ,a więc tak, musze przez ssh przejsc do folderu i odpalic funkcje bash, tylko ze jak to robie tym kodem to nie dziala po prostu, a jak chcialem skryptem to zrobic zeby tylko odpalac skrypt a nie komendy to tez nie dziala przejscie do innego folderu

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Pani Kasia

  • 0

Jak nie działa ci przejście do innego folderu i nie jest ci potrzebne skakanie po folderach, to może po prostu podaj całą ścieżkę do tego pliku?

Bardzo możliwe że po prostu nie działa ci przechodzenie, bo nawet nie wiesz gdzie jesteś w danym momencie, użyj pwd.


23jq3ie.jpg

 

Jakiś link padł? Napisz pw z prośbą o re-upload

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×
Okienko zamknie się za 5 sekund...