v2.5.2
Giriş yap

php sayfa yenilemeden iş yaptırma

zehrabilkin
1,011 defa görüntülendi

Merhabalar php ile yazmaya çalıştığım sistemde bir sorunum var daha dogrusu yapmam gereken bir şey var
sistem sorunsuz çalışıyor. anasayfada son haberler kısmı anlık olarak güncelleniyor ama ajax ile sayfa yenilemeden veri çekemeye çalıştığım için sitem sürekli vt ile baglantı kurmaya çalışıyor
ben bunu örnegin son id 5 ise 6. id geldiginde çalışmasını istiyorum bunu nasıl yapabilirim
keyword verirseniz o bile yeter

bir de içeride kaç kişi var xenforor daki gibi online kişi sayacı yaptırmak istiyorum vt de adam girdi çıktı bunları görmek istiyorum bunları nasıl yapabilirim

Cevap yaz
Cevaplar (2)
h4ckdr0
730 gün önce

Elimden geldiğince bu konuyu detaylı bir şekilde size anlatmaya çalışacağım... (PDO'suz anlattım siz PDO ile yapabilirsiniz :))

AJAX kullanarak veri çekme işlemini aşağıdaki adımları izleyerek gerçekleştirebilirsiniz:

1.Öncelikle, AJAX isteğini gönderecek bir JavaScript fonksiyonu oluşturun. Bu fonksiyon, bir GET isteği gönderecek ve dönen veriyi kullanarak sayfada güncelleme yapacak. Örnek bir JavaScript fonksiyonu aşağıdaki gibi olabilir:

function getData() {
  // veri çekilecek URL'i belirleyin
  let url = 'http://www.example.com/getdata.php';

  // AJAX isteği oluşturun
  let request = new XMLHttpRequest();
  request.open('GET', url, true);

  // isteği gönderirken yapılacak işlemleri belirleyin
  request.onload = function() {
    // veri alındıktan sonra yapılacak işlemler
    if (request.status >= 200 && request.status < 400) {
      // veri başarıyla alındı, sayfada güncelleme yapın
      let data = request.responseText;
      // veriyi kullanarak sayfada güncelleme yapın
    } else {
      // veri alınırken bir hata oluştu
      console.log('Veri alınırken bir hata oluştu');
    }
  };

  // isteği gönderin
  request.send();
}
  1. PHP dosyasında, veritabanından son haberleri çekecek bir sorgu oluşturun ve döndürün. Örnek bir PHP dosyası aşağıdaki gibi olabilir:
<?php
// veritabanı bağlantısını açın
$conn = mysqli_connect('host', 'username', 'password', 'database');

// son haberleri çekmek için bir sorgu oluşturun
$query = "SELECT * FROM news ORDER BY id DESC LIMIT 10";

// sorguyu çalıştırın ve sonuçları alın
$result = mysqli_query($conn, $query);

// sonuçları döndürün
$news = array();
while ($row = mysqli_fetch_assoc($result)) {
  $news[] = $row;
}

echo json_encode($news);

// veritabanı bağlantısını kapatın
mysqli_close($conn);
?>
  1. JavaScript fonksiyonunu kullanarak veri çekme işlemini başlatabilirsiniz. Örneğin, sayfa yüklendiğinde veri çekmek için aşağıdaki gibi bir kod parçacığı kullanabilirsiniz:
document.addEventListener('DOMContentLoaded', function() {
  getData();
});

Bu şekilde, sayfa yüklendiğinde getData() fonksiyonu çalıştırılarak veri çekme işlemi gerçekleştirilebilir.

Online kişi sayacı oluşturmak için ise, veritabanında bir tablo oluşturarak kullanıcı giriş/çıkış bilgilerini tutabilirsiniz. Örnek bir tablo yapısı aşağıdaki gibi olabilir:

id	user_id	      login_time	            logout_time
1	1	      2023-01-01 12:00:00	    2023-01-01 12:30:00
2	2	      2023-01-01 12:15:00	    2023-01-01 13:00:00
3	1	      2023-01-02 10:00:00	    2023-01-02 11:00:00

Bu tablo verilerine göre online kişi sayısını hesaplayabilmek için, şu adımları izleyebilirsiniz:

  1. Veritabanında bir sorgu oluşturarak, login_time'ı bugünden küçük ve logout_time'ı bugünden büyük olan kayıtları çekin. Örnek bir sorgu aşağıdaki gibi olabilir:
SELECT COUNT(*) FROM user_sessions WHERE login_time < NOW() AND logout_time > NOW()
  1. Bu sorgunun döndürdüğü sayıyı online kişi sayısı olarak kullanın. Örneğin, aşağıdaki JavaScript kod parçacığı ile sayfada gösterebilirsiniz:
let onlineCount = 10; // sorgu sonucu döndürülen online kişi sayısı
document.getElementById('online-count').innerHTML = onlineCount;
  1. Kullanıcı giriş yaptığında, bir token oluşturun ve bu token'ı veritabanında bir tablo oluşturarak saklayın. Örnek bir tablo yapısı aşağıdaki gibi olabilir:
id	user_id	        token
1	1	        abcdefghijklmnopqrstu
2	2	        vwxyzabcdefghijklmnop
3	1	        qrstuvwxyzabcdefghijk

Token oluşturmak için, PHP'de aşağıdaki gibi bir fonksiyon kullanabilirsiniz:

function createToken() {
  // token'ı oluşturmak için 32 karakter uzunluğunda bir string oluşturun
  $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  $token = '';
  for ($i = 0; $i < 32; $i++) {
    $token .= $chars[rand(0, strlen($chars) - 1)];
  }
  return $token;
}

Bu fonksiyonu kullanarak token oluşturduktan sonra, veritabanına kaydedebilirsiniz. Örneğin:

// veritabanı bağlantısını açın
$conn = mysqli_connect('host', 'username', 'password', 'database');

// token'ı oluşturun
$token = createToken();

// kullanıcı id'sini alın (burada kullanıcı id'si 1 olarak varsayılmıştır)
$user_id = 1;

// token'ı veritabanına kaydedin
$query = "INSERT INTO tokens (user_id, token) VALUES ('$user_id', '$token')";
mysqli_query($conn, $query);

// veritabanı bağlantısını kapatın
mysqli_close($conn);
  1. Kullanıcı çıkış yaptığında, bu token'ı silerek kullanıcının oturum bilgilerini silin. Örneğin:
// veritabanı bağlantısını açın
$conn = mysqli_connect('host', 'username', 'password', 'database');

// kullanıcı id'sini alın (burada kullanıcı id'si 1 olarak varsayılmıştır)
$user_id = 1;

// kullanıcının token'ını sorgulayın ve silin
$query = "DELETE FROM tokens WHERE user_id = '$user_id'";
mysqli_query($conn, $query);

// veritabanı bağlantısını kapatın
mysqli_close($conn);
  1. Cronjob ile belirli aralıklarla veritabanındaki token bilgilerini kontrol ederek, kullanıcının sistemde olup olmadığını anlayabilirsiniz. Bunun için, cronjob'u kullanarak belirli aralıklarla çalışacak bir PHP dosyası oluşturmalısınız. Bu PHP dosyası, veritabanındaki token bilgilerini kontrol edecek ve eğer bir token bulunamazsa, o kullanıcının sistemde olmadığını anlayacaktır. Örnek bir PHP dosya aşağıdaki gibi olabilir:
<?php
// veritabanı bağlantısını açın
$conn = mysqli_connect('host', 'username', 'password', 'database');

// tüm token'ları sorgulayın
$query = "SELECT * FROM tokens";
$result = mysqli_query($conn, $query);

// tüm token'ları döngüye alın
while ($row = mysqli_fetch_assoc($result)) {
  $token = $row['token'];
  $user_id = $row['user_id'];

  // her bir token için, son 30 dakikada bir aktivite olup olmadığını sorgulayın
  $activity_query = "SELECT COUNT(*) FROM user_activity WHERE user_id = '$user_id' AND activity_time > DATE_SUB(NOW(), INTERVAL 30 MINUTE)";
  $activity_result = mysqli_query($conn, $activity_query);
  $activity_count = mysqli_fetch_row($activity_result)[0];

  // eğer son 30 dakikada bir aktivite yoksa, token'ı silin
  if ($activity_count == 0) {
    $delete_query = "DELETE FROM tokens WHERE token = '$token'";
    mysqli_query($conn, $delete_query);
  }
}

// veritabanı bağlantısını kapatın
mysqli_close($conn);

Bu dosyayı cronjob ile belirli aralıklarla çalıştırarak, veritabanındaki token bilgilerini kontrol ederek kullanıcının sistemde olup olmadığını anlayabilirsiniz. Örneğin, aşağıdaki cronjob komutu ile bu dosyayı her 15 dakikada bir çalıştırabilirsiniz:

*/15 * * * * /usr/bin/php /path/to/check_tokens.php

Bu komutu kullanarak, belirli aralıklarla check_tokens.php dosyasını çalıştırarak veritabanındaki token bilgilerini kontrol ederek, kullanıcının sistemde olup olmadığını anlayabilirsiniz.

Bu yöntem, kullanıcının sistemde olup olmadığını anlamanız için bir seçenek olabilir. Ancak, bu yöntemin tam olarak doğru bir yöntem olup olmadığını söylemek zor. Örneğin, bir kullanıcı sistemde aktif olmasına rağmen, son 30 dakikada bir aktivite gerçekleştirmediyse bile, bu yöntemle sistemden çıkarılabilir. Bu nedenle, kullanıcının sistemde olup olmadığını anlamak için alternatif yöntemler de düşünülebilir.

Biraz uzun ve karmaşıkmış gibi gelebilir ama umarım işinize yarar... (Parmaklarım uyuştu yoksa daha da anlatmak isterdim :))

"Bilgi paylaştıkça güzeldir :)"

zehrabilkin
730 gün önce

Kafamdaki şu x kişisi sisteme girince vt de şöyle bir tablo var
token ve url

her kullanıcıya session ile token atayıp sonra bu token i cronjob ile kontrol ettirmek istiyorum bu kullanıcı acık mı kapalı mı nasıl yapablirim