JS / php her dakika için eklemek

4 Cevap php

Ne yapmak istediğim her kullanıcı 1 puan her dakika alır olmasıdır. Şimdi ben addpoints.php içinde php kodu var, ve sonra ben jQuery javascript ile kendimi denedim:

function addpoints()  { 
  var userid = document.getElementById('user_id_points');
  var postFile = 'addpoints.php?userid='+ userid.value;
  $.post(postFile, function(data){  
    $("#points").html(data); 
    setTimeout(addpoints, 60000);
  });
}    

Bu oldukça iyi çalışıyor, ve bir noktasını her 1 dakika verir .. AMA bir sorun, sadece komut dosyası üzerinde sayfayı yenileyin, sonra bir nokta alırsınız ki .. bu yüzden büyük olasılıkla sadece sayfa bazı kere yenilemek ve olabilir o zaman size puan yükseltmek ..

Ben () son datestamp denetlemesidir 1 dakikadan daha uzun ise, o zaman dışarı vermek nokta başka hata yapmak addpoints.php belki düşünüyordum ..

Küçük sorunu önlemek yapmak için daha iyi bir fikir / bir şey vardı, ben sadece merak ediyorum?

4 Cevap

(using a timestamp for instance) puan artırılır oldu son kez tarih + saati saklanması, yanında o puana (be it in $_SESSION veya veritabanı) gerçekten bir çözüm olabilir:

  • when a request to increment the score arrives, check the timestamp
    • o daha 60 saniye önce ise, o skoru artırmak ve zaman damgası güncellemek
    • Başka, skoru ne zaman damgası güncelleme yok

Pascal MARTIN @ cevabına dayanarak, çözüm de ise, Pascal Martin 'yanıtı @ seçin

function addpoints()  { 
  var userid = document.getElementById('user_id_points');
  var postFile = 'addpoints.php?userid='+ userid.value;
  $.post(postFile, function(data){  

    $("#points").html(data.html); 
    setTimeout(addpoints, data.ts);
  });

}   

Sadece "addpoints_get_ts" damgası olsun

(function(){
  var userid = document.getElementById('user_id_points');
  var postFile = 'addpoints_get_ts.php?userid='+ userid.value;
  $.get(postFile, function(data){  
      setTimeout(addpoints, data.ts);
  });
})();

Ben MYSQL tablosunda bir sütun last eklemek için öneririm. Bu şekilde, sur onlar hile olmaz yapabilirsiniz.

mysql_query('UPDATE `users` SET `points` = `points`+1, `last`='.time().' WHERE `last` < '.(time()-60).' AND `user_id` = '.intval($_GET['userid']).' LIMIT 1);

Ayrıca, OTURUMU kullanabilirsiniz emin doğru kullanıcı kullanıcı ;) oturum emin olun senaryoyu bile aramaları, ya da yapmak için varaibles

Siz gerçekten sadece $ _SESSIONS içinde damgası depolamak ve veritabanında ne endişe edilmemelidir. Eğer otomatik komut önlemek için yapabileceğiniz güzel bir şey, tercihen bir girişi ve güçlü bir kaptan ile, sayfaya erişmek için kimlik doğrulama çeşit sağlamaktır. Ayrıca formu sızdırma karşı güvenli ve aynı IP birden isteklerini saklamak ve bunları yasaklamak için emin olun. Birden fazla yenilenir ile sunucu DOS'sing birini engeller. Otomatikleştirilmiş Bieng eğer vb IP, yönlendirme kontrolü, gibi, belirlemek için başka şeyler kullanabilirsiniz