v2.5.2
Giriş yap

Fonksiyon ile Post ( PHP )

rennie
571 defa görüntülendi

Selamlar...

<a href="nojavascript...ServerRestart();"><span class="orange">Restart</span></a>

Bu şekilde bir yapı var. Yapmak istediğim olay şu:
Click yaptığım zaman

function ServerRestart(){
    alert("UYARI: Tebrikler, sunucunuz yeniden başlatıldı. Başlama süresi max: 10 saniyedir.");
}

Bu fonksiyon çalışacak ama "alert" öncesi farklı bir sayfaya bilgi göndermem lazım. Yani restart komutunu.
Oda bu komut:

$Restart = "screen -dr $who -X quit; sleep 1;

Click işlemi a.php ' de
Restart işlemi b.php ' de

Son olarak kişi 2. kez restart yapmak istediğinde 5 dakika beklemelisin uyarısı çıkması gerek. Biraz karışık oldu ama bunu nasıl yapabilirim ?

Cevap yaz
Cevaplar (9)
ersiin
936 gün önce
<script type="text/javascript">
	function ServerRestart() {
  var baglan = new XMLHttpRequest();
  baglan.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
var response = this.responseText;

        }
  }
  baglan.open("GET", "b.php", true);
  baglan.send();
}
</script>

tıklama yaptıracağın sayfada bunu kullanabilirsin. var = response satırının altına alert(); ekleyebilirsin.
b.phpye istediğin komutu yazabilirsin. şuanki zamanın dakikasını date('m') alıp sessiona atar 5 eklersin, şuanki zaman, sessiondakinden küçükse işlem yaptırmaz, 5 dk beklemelisin uyarısı verirsin.
umarım işine yarar

ersiin
935 gün önce

$date="" kısmı yerine $date="6" daha doğru. şuan çok daha iyi. son hali. bunu kullanın. kolay gelsin.

<?php
session_start();
function kacDKOldu( $tarih ){
    try {    
        $date1 = new DateTime( date('Y-m-d H:i:s') );
        $date2 = new DateTime( $tarih );
 
        $interval = $date1->diff( $date2 );
 
        $result = $interval->format('%i');  
        $result = preg_replace('/\b0+\s+[a-zA-Z-ıü]+,?\s*/is','',$result);
         
        return $result;
    } catch (Exception $e) {    
        return false;
    }       
}

if($_SESSION){
if($_SESSION["tiklamazamani"]==""){
    $date = "6";
}else{
	$zaman = $_SESSION["tiklamazamani"];
    $date = kacDKOldu($zaman);
}
}

if($_GET){
    if($_GET["action"]=="serverrestart"){
        if($date > 5){
        			//bu alandaki kodlar sadece ilk tıklama yapıldığında çalışır.
        			//ikinci bir tıklamada çalışması için tıklama üzerinden 5dk geçmesi gerekir.
                    //php kodların
        	
            $_SESSION["tiklamazamani"] = date('Y-m-d H:i:s');
        }else{
        	$gecenzaman = kacDKOldu($zaman);
        	$kalanzaman = 5 - $gecenzaman;
        	if($gecenzaman=="0"){
        		setcookie("restartmesaji", "Tıklama üzerinden henüz birkaç saniye geçti. $kalanzaman dakika sonra yeniden deneyin. ");
        	}else{

        		if($gecenzaman=="5"){
        			setcookie("restartmesaji", "Tıklama yapabilmeniz için birkaç saniye kaldı.");
        		}else{
        	setcookie("restartmesaji", "Tıklama üzerinden henüz $gecenzaman dakika geçti. $kalanzaman dakika sonra yeniden deneyin. ");
        }
        }
        }
     
    }
}
?>
<script type="text/javascript">
	function getCookie(cname) {
  let name = cname + "=";
  let decodedCookie = decodeURIComponent(document.cookie);
  let ca = decodedCookie.split(';');
  for(let i = 0; i <ca.length; i++) {
    let c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}
	function ServerRestart() {
  var baglan = new XMLHttpRequest();
  baglan.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
var response = this.responseText;
let restartmesaji = getCookie("restartmesaji");
 if (restartmesaji != "") {
alert(getCookie("restartmesaji"));
}

        }
  }
  baglan.open("GET", "deneme.php?action=serverrestart", true);
  baglan.send();
}

</script>
<a href="nojavascript...ServerRestart();"><span class="orange">Restart</span></a>
ersiin
935 gün önce

Ne demek hocam. Küçük buglar olabilir, çok test etmeden yolladım ama mantığı anladıysanız halledebilirsiniz diye düşünüyorum. Kolay gelsin

rennie
935 gün önce

Mükemmel paylaşım sağol :)

ersiin
935 gün önce
<?php
session_start();
function kacDKOldu( $tarih ){
    try {    
        $date1 = new DateTime( date('Y-m-d H:i:s') );
        $date2 = new DateTime( $tarih );
 
        $interval = $date1->diff( $date2 );
 
        $result = $interval->format('%i');  
        $result = preg_replace('/\b0+\s+[a-zA-Z-ıü]+,?\s*/is','',$result);
         
        return $result;
    } catch (Exception $e) {    
        return false;
    }       
}

if($_SESSION){
if($_SESSION["tiklamazamani"]==""){
    $date = "";
}else{
	$zaman = $_SESSION["tiklamazamani"];
    $date = kacDKOldu($zaman);
}
}

if($_GET){
    if($_GET["action"]=="serverrestart"){
        if($date=="" || $date > 5){
        			//bu alandaki kodlar sadece ilk tıklama yapıldığında çalışır.
        			//ikinci bir tıklamada çalışması için tıklama üzerinden 5dk geçmesi gerekir.
                    //php kodların
        	
            $_SESSION["tiklamazamani"] = date('Y-m-d H:i:s');
        }else{
        	$gecenzaman = kacDKOldu($zaman);
        	$kalanzaman = 5 - $gecenzaman;
        	if($gecenzaman=="0"){
        		setcookie("restartmesaji", "Tıklama üzerinden henüz birkaç saniye geçti. $kalanzaman dakika sonra yeniden deneyin. ");
        	}else{

        		if($gecenzaman=="5"){
        			setcookie("restartmesaji", "Tıklama yapabilmeniz için birkaç saniye kaldı.");
        		}else{
        	setcookie("restartmesaji", "Tıklama üzerinden henüz $gecenzaman dakika geçti. $kalanzaman dakika sonra yeniden deneyin. ");
        }
        }
        }
     
    }
}
?>
<script type="text/javascript">
	function getCookie(cname) {
  let name = cname + "=";
  let decodedCookie = decodeURIComponent(document.cookie);
  let ca = decodedCookie.split(';');
  for(let i = 0; i <ca.length; i++) {
    let c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}
	function ServerRestart() {
  var baglan = new XMLHttpRequest();
  baglan.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
var response = this.responseText;
let restartmesaji = getCookie("restartmesaji");
 if (restartmesaji != "") {
alert(getCookie("restartmesaji"));
}

        }
  }
  baglan.open("GET", "sayfaadi.php?action=serverrestart", true);
  baglan.send();
}

</script>
<a href="nojavascript...ServerRestart();"><span class="orange">Restart</span></a>

//php kodların kısmına, yazmak istediğin komut vs. şeyleri yazabilirsin yine.
Zaman değerini cookieye atarsak kullanıcı cookieyi değiştirerek sistemi kandırabilir diye session'a atadım. Mesajı cookieye atama nedenim de js tarafında da cookieye erişmek ve js ile alert etmek.
response text'i kullanmadım çünkü aynı sayfa içerisinde hem php hem js yani html kullandığımız için response text'e tüm page döndürülecekti.
5 dakika geçmeden 2. tıklamayı kabul etmemek için bunu kullanabilirsin, kolay gelsin. Biraz karmaşık ama anlayacaksın eminim :)
"sayfaadi.php?action=serverrestart" kısmını, kodu yazdığın sayfa adı ile değiştirip direkt kopyalayıp yapıştırabilirsin tüm kodu. Çalışıyor.

Kaynaklar

İki tarih arasındaki farkı bulmak için yararlandığım kaynak: https://www.vyz.gen.tr/php-ile-kac-dakika-once-yazildi
JavaScript cookie için yararlandığım kaynak: https://www.w3schools.com/js/js_cookies.asp

rennie
935 gün önce

Zaman olayını çözemedim, sürekli restart atıyor :)

ersiin
936 gün önce

Aynı sayfada işlem yapacaksan eğer, sayfayı şöyle düzenlersin

<?php
if($_GET){
    if($_GET["action"]=="serverrestart"){
        //php kodların
    }
}
?>
<script type="text/javascript">
	function ServerRestart() {
  var baglan = new XMLHttpRequest();
  baglan.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
var response = this.responseText;

        }
  }
  baglan.open("GET", "?action=serverrestart", true);
  baglan.send();
}
</script>
<a href="nojavascript...ServerRestart();"><span class="orange">Restart</span></a>

Bu kod ile aynı sayfaya bir get isteği atıyor ve bunu yakalıyorsun. Ama bu şekilde response text alamazsın okadar.
"//php kodların" satırında yine dakika kontrolü kodlarını ve çalıştırmak istediğin restart komutunu yazabilirsin
Eğer sorun çıkarsa, "?action=serverrestart" kısmını "sayfaninadi.php?action=serverrestart" yapabilirsin

rennie
936 gün önce

Hocam peki aynı sayfada işlem yapacaksak nasıl olacak acaba?

rennie
936 gün önce

çok teşekkür ederim...