Fonksiyon ile Post ( PHP )
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 ?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (9)
<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
$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>
<?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
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