belli bir süre sınırını(geri sayım) nasıl verebilirim

  • Konbuyu başlatan Konbuyu başlatan sfym
  • Başlangıç tarihi Başlangıç tarihi
Kodla Büyü

sfym

Seçkin Üye
Seçkin Üye
Mesajlar
388
.

Üyenin sınav olabileceği bir sayfa var..
Soruların yer aldığı ekranı geldiğinde o sayfada belirlediğim süre içerisinde kalmasını istiyorum.
Süresi dolduğunda o andan sonra sayfayı kullanamayacak.

PHP tecrübesi olan arkadaşların cevaplarını bekliyorum.


**************************************
ÇÖZÜM:

Açıklama: Çözüm için yakuter.com/onarimda-yazisi-tarihe-karisti/comment-page-1/#comment-65404 sayfasında verilen örneği kullandım. O örnekte belirlenen bir tarihe kadar geri sayım yapılıyordu.RuzgaraKarşı arkadaşım tavsiye etmişti: "Js kodunda tarih değişik olsa da kendin istediğin tarihi sabitle diye" onun da vermiş olduğu fikirle yakuter.com sitesindeki kodda üç değişiklik yaptım.

Yaptığım değişiklikler:

1: Geri sayım zamanını kaç dakika belirlemişsek,kullanıcının sayfaya giriş yaptığı saate onu ekleyerek, ulaşılmak istenen zaman olarak onu atadım.

$Tarih= date("F j, Y");
$BelirlenenSure = +20; (kullanıcıya o sayfada kalması için tanınan süre 20 dakika olsun)
$Saat=date("H:i:s",(time()+60*$BelirlenenSure));

2: Java kodu içerisinde yer alan tarih yerine bu değişkenlerimdeki değeri atadım:

var futuredate=new cdtime("countdowncontainer", "<?php echo $Tarih." ".$Saat; ?>")

if (arguments[1]==0){
var displaystring="<span style='font-size:40px'> "+arguments[2]+"</span><span style='font-size:30px; color:#FF6600'> dakika</span><span style='font-size:40px'> "+arguments[3]+"</span><span style='font-size:30px; color:#FF6600'> saniye</span>"
}
else{
var displaystring=" <span style='font-size:50px; '>"+arguments[1]+"</span><span style='font-size:30px; color:#FF6600'> saat</span><span style='font-size:40px'> "+arguments[2]+"</span><span style='font-size:30px; color:#FF6600'> dakika</span><span style='font-size:40px'> "+arguments[3]+"</span><span style='font-size:30px; color:#FF6600'> saniye</span>"
}

4: Süre dolduğunda istediğimiz sayfaya yönlendirmek

Süre doldu yazan kısmın altına

window.location.href="suredoldu.php"

kodunu ekleyerek sayfanın değiştirilmesini sağladım.

Sonuç olarak aşağıdaki kod oldu:

<script type="text/javascript">

/***********************************************
* Bu kod yakuter.com sitesinden alınarak düzenlenmiştir.(http://www.yakuter.com/onarimda-yazisi- ... ment-65404)
***********************************************/

function cdtime(container, targetdate){
if (!document.getElementById || !document.getElementById(container)) return
this.container=document.getElementById(container)
this.currentTime=new Date()
this.targetdate=new Date(targetdate)
this.timesup=false
this.updateTime()
}
cdtime.prototype.updateTime=function(){
var thisobj=this
this.currentTime.setSeconds(this.currentTime.getSeconds()+1)
setTimeout(function(){thisobj.updateTime()}, 1000) //update time every second
}
cdtime.prototype.displaycountdown=function(baseunit, functionref){
this.baseunit=baseunit
this.formatresults=functionref
this.showresults()
}
cdtime.prototype.showresults=function(){
var thisobj=this
var timediff=(this.targetdate-this.currentTime)/1000 //difference btw target date and current date, in seconds
if (timediff<0){ //if time is up
this.timesup=true
this.container.innerHTML=this.formatresults()
return
}
var oneMinute=60 //minute unit in seconds
var oneHour=60*60 //hour unit in seconds
var oneDay=60*60*24 //day unit in seconds
var dayfield=Math.floor(timediff/oneDay)
var hourfield=Math.floor((timediff-dayfield*oneDay)/oneHour)
var minutefield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour)/oneMinute)
var secondfield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour-minutefield*oneMinute))
if (this.baseunit=="hours"){ //if base unit is hours, set "hourfield" to be topmost level
hourfield=dayfield*24+hourfield
dayfield="n/a"
}
else if (this.baseunit=="minutes"){ //if base unit is minutes, set "minutefield" to be topmost level
minutefield=dayfield*24*60+hourfield*60+minutefield
dayfield=hourfield="n/a"
}
else if (this.baseunit=="seconds"){ //if base unit is seconds, set "secondfield" to be topmost level
var secondfield=timediff
dayfield=hourfield=minutefield="n/a"
}
this.container.innerHTML=this.formatresults(dayfield, hourfield, minutefield, secondfield)
setTimeout(function(){thisobj.showresults()}, 1000) //update results every second
}
function formatresults(){
if (this.timesup==false){//if target date/time not yet met
if (arguments[1]==0){
var displaystring="<span style='font-size:40px'> "+arguments[2]+"</span><span style='font-size:30px; color:#FF6600'> dakika</span><span style='font-size:40px'> "+arguments[3]+"</span><span style='font-size:30px; color:#FF6600'> saniye</span>"
}
else{
var displaystring=" <span style='font-size:50px; '>"+arguments[1]+"</span><span style='font-size:30px; color:#FF6600'> saat</span><span style='font-size:40px'> "+arguments[2]+"</span><span style='font-size:30px; color:#FF6600'> dakika</span><span style='font-size:40px'> "+arguments[3]+"</span><span style='font-size:30px; color:#FF6600'> saniye</span>"
}
}
else{ //else if target date/time met
var displaystring="<span style='font-size:40px; color:#FF6600'>Süreniz Doldu! </span>"
window.location.href="suredoldu.php"
}
return displaystring
}
</script>
<center>
<span style="font-size:24px; color: red"> Kalan Süre </span><br />
<div id="countdowncontainer"></div>
<br />
</center>
<script type="text/javascript">
var futuredate=new cdtime("countdowncontainer", "<?php echo $Tarih." ".$Saat; ?>")
futuredate.displaycountdown("hours", formatresults)

</script>
 
Re: bir sayfa için belli bir süre hakkını nasıl verebilirim

ilk başta o sayfaya javascript geri sayım sayacı koy, mesela 60 saniyelik
aynı sayfaya 60 saniyelik header refresh kodu koy
ilk giriş süresini ve kaçıncı sorunun çözüldüğünü session ile tut
cevapları kontrol ettiğin sayfada sessiona bakarak 60 saniyenin geçip geçmediğini anlarsın, ona göre işlem yaptırırsın
eğer kullanıcı soru atlamaya kalkışırsa(adres satırına url yazarak) sessiona bakarak anlarsın ve header location ile istediğin yere yönlendirirsin
 
Re: bir sayfa için belli bir süre hakkını nasıl verebilirim

tabi bunu yaparken sisteme giriş yapan kullanıcı için javascript zorunlu tutulmalıdır. aksi takdirde kullanıcı bilerek javascripti kapatıp kendisine sayfada sınırsız kalabilme yetkisini kazanabilir. bu yüzden javascript etkin olmayan tarayıcının sisteme girişi yasaklanmalıdır
 
Re: bir sayfa için belli bir süre hakkını nasıl verebilirim

örnek paylaşmanız mümkün mü arkadaşlar..
 
Re: bir sayfa için belli bir süre hakkını nasıl verebilirim

snadboy' Alıntı:
tabi bunu yaparken sisteme giriş yapan kullanıcı için javascript zorunlu tutulmalıdır. aksi takdirde kullanıcı bilerek javascripti kapatıp kendisine sayfada sınırsız kalabilme yetkisini kazanabilir. bu yüzden javascript etkin olmayan tarayıcının sisteme girişi yasaklanmalıdır
hayır buna gerek yok; çünkü validation dediğimiz doğrulama işlemi javascript ile olmuyor ki, javascript sadece kaç saniye kaldığını gösteriyor.
 
.
Araştırdığım sitelerde verilen örnekler Tarih geri sayımına dönük.Belli bir zamanın dolması sonrasında bir işlem yapmak için bir örnek verebilecek var mı arkadaşlar.
Örneğin: 10dk sonrasında "Verilen Süre Doldu" uyarısını vermek...
 
Kod:
<script language="javascript">
var dak=10,sn=00;
function krono()
{
setTimeout("krono()",1000);
sn--;
if(sn==-1)
	{
	sn=59;
	dak--;
	}
dakika.innerHTML="0"+dak+" dakika";
saniye.innerHTML=sn + " saniye";
if(dak<=0 && sn<=0)
	{
	alert("süre doldu");
	}
}

</script>
anladığım kadarıyla böyle bişi istiyorsun
 
.
Evet teşekkürler.Ancak bir sorunum var..Şuan ekranda geri sayımı görüp, sürenin bitimiyle uyarıyı almaya çalışıyorum.Henüz beceremedim :(
 
.
evet...kişi sınav sayfasına giriş yaptığında süre başlayacak. vaktinde tamamlarsa veritabanına cevaplarını yazacağım, tamamlayamazsa "Verilen Süreyi Aştınız" uyarısını vereceğim.
 
.
Çok şükür hallettim :+1:
Çözümü ilk mesajımın altında veriyorum.
 
BBNET
Geri
Üst