php teljes oldal vagy értékek frissítése

Fórumok

Üdv mindenkinek!

 

Dióhéjban annyi a történet, hogy intézményi szinten alapból tiltva van minden switch minden portja ami használaton kívül van.
Amikor költözködések vannak különböző irodák közt vagy új eszközt helyezünk üzembe, akkor megy a nyálazás a topológiatérkép alapján, hogy ez az az eszköz, ennek az az IP-je és amaz a portja, majd belépek a webes felületén engedélyezem a portot. Csináltam egy oldalt, ahol be vannak állítva a hálózati eszközök (IP, snmp adatok, típus). Az oldal lekérdezi az adott eszközt snmp-n keresztül, hogy hány portja van majd kilistázza soronként a portokat, így láthatóvá válik az adott port aktuális állapota, admin state, mtu, speed, stb...
 

Minden sor végére tettem egy gombot:
 

echo"	<tr> \n";
echo"		<td>".$i."</td> \n";
echo"		<td>".$ifname."</td> \n";
echo"		<td style='background-color:".$statec."'>".$state."</td> \n";
echo"		<td style='background-color:".$ifadminc."'>".$ifadmin."</td> \n";
echo"		<td style='background-color:".$ifspeedc."'>".$ifspeed."</td> \n";
echo"		<td>".$ifmtu."</td> \n";
echo"		<td>".$ifchanged."</td> \n";
echo"		<td>".$ifmac."</td> \n";
echo"		<td>"."<form method='post'><input type='submit' name='button".$i."' value='".$buttval."'/></form></td> \n";
echo"	</tr> \n";

 

Aminek adtam egy funkciót:

if(isset($_POST['button'.$i])) { 
    switch ($ifadmin){
		case "ENABLED":
			snmpset($ip, $commrw, $attr[5][$devices[0][4]].$i,'i','2');
		break;
		case "DISABLED":
			snmpset($ip, $commrw, $attr[5][$devices[0][4]].$i,'i','1');
		break;
	}
	//header("Location: http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
	//header('Location: '.$_SERVER['PHP_SELF']);
	//header('Location: '.$_SERVER['REQUEST_URI']);
	header("Refresh:0");
	//include 'index.php';
	//window.location.reload(true);
}

 

Ahogy látható is, a végén többféleképpen próbáltam az oldalt frissíteni a gombnyomás után.
2 eset szokott történni:

a) vagy lefrissül az oldal látszólag, de az állapotokat vagy nem kérdezi le újra vagy nem jelenik meg. Ha egy portot letiltok, a státusza ugyanúgy ENABLED marad csak ha kézzel ráfrissítek az oldalra, akkor látszik a valódi aktuális állapota
b) frissül az oldal, de csak addig a sorig listázza ki a portokat, amelyikben nyomtam a gombot (azt már nem, csak az előtte lévőket).

Ez utóbbit gondoltam úgy felhasználni, hogy a for cikluson kívülre rakom a gombot, de az azért nem lesz jó, mert az első sorban látható: 'button'.$i így értelmét veszti. Lényegében ugyanaz a számláló pörgeti, ami a sorokat is a for ciklusban.

Mit gondoltok, lehet erre megoldás?
Egyszerűen csak annyit szeretnék, ha megnyomom a gombot és lefut a kód amit akarok, utána frissüljenek az értékek.

 

kép

Hozzászólások

Ha mindenkeppen friss oldal kell, abbol nem lehet baj, ha a headerben Cache-Controllal teljesen letiltod a cachelest. (no-store?)

“The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it."

Szerkesztve: 2020. 05. 15., p - 12:12

Én megtűrnék pár sor dzsuvascriptet az oldalon és egy ajax(xhr) kérés keretében küldeném el a kérést és módosítanám az oldalt a válasz függvényében. Egyetlen  akciógomb érdekében nem tölteném újra az egész oldalt :)

https://www.w3schools.com/xml/ajax_php.asp

A gomb típusát "submit"-ról cseréd "button"-re a, vagy js-be egy újabb sor: preventdefault (hogy ne küldje el az egész oldalt), a js függvényt meg onClick eseményre kösd.

https://goo.gl/muWzKz (digitalocean)

Szerkesztve: 2020. 05. 15., p - 14:47

a probléma sztem máshol lesz: snmpset-ben vagy a lekérdezésben.  Az include elé/az átirányítás után nem ártana egy exit . Minek fusson le feleslegesen az index.php ?  (bár nem igazán érteni h mit csinálhat). Átirányítás előtt meg nem lehet semmi kimenet, még üres karakter sem!