PDA

View Full Version : سوال: ایجاد تایمر برای سایت



Mohammadsgh
جمعه 16 اسفند 1392, 10:48 صبح
با درود و سلام و عرض ادب و خسته نباشید
می خواستم یه تایمر داشته باشم که شمارش معکوس داشته باشه اگه زمان به پایان رسید یا تابع header اجرا بشه یا پیغام بده و نزاره کاربر هیچ کاری انجام بده
ممنون

plague
جمعه 16 اسفند 1392, 15:26 عصر
با جاوا اسکریپت باید انجام بدی
php نمیشه

Mohammadsgh
جمعه 16 اسفند 1392, 15:50 عصر
کسی کدش رو نداره:ناراحت:نیاز دارم بد جور ممنون میشم راهنمایی کنید:قلب:

beh3000
جمعه 16 اسفند 1392, 16:24 عصر
setTimeout(function(){ xxxxxxxxx },5000);

هر کدی که توی قسمت xxxxxx بنویسی بعد از 5 ثانیه اجرا میشه ... از همین استفاده کن .. موفق باشی

MMSHFE
جمعه 16 اسفند 1392, 16:27 عصر
البته ناگفته نمونه که این کارها رو به راحتی میشه با غیرفعال کردن JS توی مرورگر یا با کمک FireBug دور زد. بهتره در کنار این موارد، سمت سرور هم یه سری کارها برای جلوگیری از اتفاقات ناخواسته ازطرف کاربران بازیگوش انجام بدین.

Mohammadsgh
جمعه 16 اسفند 1392, 19:13 عصر
من تایمر معکوس رو برای سیستم آزمون می خوام این کار رو بکنم و اگه کاربر در زمان مشخص شده نتونست به پرسش ها پاسخ بده یا پیغام بده دیگه نمیتونه پاسخ بده یا به یک برگه دیگه هدایت کنه یا سایتو ببنده
یه همچین چیزی می خوام.لطفا اگه میشه راهنماییم کنید ممنون میشم:لبخندساده:

فرزند کوروش
جمعه 16 اسفند 1392, 19:32 عصر
http://barnamenevis.org/showthread.php?436984-%D8%B4%D9%85%D8%A7%D8%B1%D8%B4-%D9%85%D8%B9%DA%A9%D9%88%D8%B3-%D8%A8%D8%B1-%D8%A7%D8%B3%D8%A7%D8%B3-%D8%B2%D9%85%D8%A7%D9%86-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3&p=1955553&viewfull=1#post1955553

beh3000
جمعه 16 اسفند 1392, 20:07 عصر
اگه میخوای در یک زمان خاص مثلا 8 صبح تایمر شرو بشه میتونی از کدی که فرزند کوروش لینکشو گذاشته استفاده کنی ولی اگه میخوای هر وقتی که کاربر وارد آزمون شد تایمر شرو بشه اون لحظه باید اول زمان سرور رو یه جایی ثبت کنی بذاری ( سشن . دیتابیس . فایل ) بعد باید با جاوا اسکریپت یه تایمر معکوس بنویسی که تا زمان صفر بشماره اگه به صفر رسید اخطار بده ... البته در فایل php هم باید زمانی که نتایج رو میخواد ثبت کنه زمان جدید سرور رو بگیره و و با زمان قبلی که ثبت کردی در ( سشن . دیتابیس . فایل ) مقایسه کنه که نباید اختلاف این دو زمان از زمان مجاز آزمون بیشتر باشه ... به همین سادگی به همین خوشمزگی

Mohammadsgh
جمعه 16 اسفند 1392, 21:14 عصر
کدش رو پیدا کردم:لبخند: اینجا میزارم که اگه دوستان خواستن استفاده کنن
<span id="countdown" class="timer"></span>
<script>
var seconds = 60;
function secondPassed() {
var minutes = Math.round((seconds - 30)/60);
var remainingSeconds = seconds % 60;
if (remainingSeconds < 10) {
remainingSeconds = "0" + remainingSeconds;
}
document.getElementById('countdown').innerHTML = minutes + ":" + remainingSeconds;
if (seconds == 0) {
clearInterval(countdownTimer);
window.location = "yourPageName.php";
} else {
seconds--;
}
}
var countdownTimer = setInterval('secondPassed()', 1000);
</script>

***BiDaK***
جمعه 16 اسفند 1392, 21:31 عصر
کدش رو پیدا کردم:لبخند: اینجا میزارم که اگه دوستان خواستن استفاده کنن
<span id="countdown" class="timer"></span>
<script>
var seconds = 60;
function secondPassed() {
var minutes = Math.round((seconds - 30)/60);
var remainingSeconds = seconds % 60;
if (remainingSeconds < 10) {
remainingSeconds = "0" + remainingSeconds;
}
document.getElementById('countdown').innerHTML = minutes + ":" + remainingSeconds;
if (seconds == 0) {
clearInterval(countdownTimer);
window.location = "yourPageName.php";
} else {
seconds--;
}
}
var countdownTimer = setInterval('secondPassed()', 1000);
</script>
نمونه کد زیاد هست. میتونید تو گوگل بازهم ببینیند نمونه های دیگرو : javascript countdown timer
ولی یادتون نره آقای شهرکی چی گفتن.
تو آزمون اگه js غیر فعال بشه این کد کار نمیکنه.

Mohammadsgh
جمعه 16 اسفند 1392, 22:39 عصر
پس چیکار کنم؟به جز جاوااسکریپت چجوری با php درست کنم؟میشه نمونه کدش با php رو بزارید؟ممنون میشم

***BiDaK***
جمعه 16 اسفند 1392, 23:05 عصر
beh3000 (http://barnamenevis.org/member.php?199913-beh3000) راهو گفت.
تایم شروع و تایم پایان باید در همون زمانی که شما مشخص کردی باشه.
اگر کاربر مریض بود و جاوااسکریپتو disable کرده بود خوب با این کد تایمر ریدایرکت نمیشه و تو آزمون میمونه و آخرش باید یا دکمه ی پایان رو بزنه و یا از صفحه کلا خارج بشه که در هر دو مورد اطلاعات ثبت نمیشه که مشکل خودشه.اگرم داخل اون زمان مشخص شده پایان رو زد که هیچی.
فقط زمانی که کاربر وارد آزمون میشه این کاربر باید جزو آزمون داده ها محسوب بشه.حالا چه پاسخنامه ای واسش ثبت بشه یا نشه.

Mohammadsgh
جمعه 16 اسفند 1392, 23:19 عصر
راستش زیاد با دیتابیس آشنایی ندارم.برنامه نویس مقدماتی هستم و روش این کاری که گفتید رو نمیدونم, این پروژه رو برای یادگیری بیشتر برنامه نویسی درست کردم
اگر میشه یکی از دوستان واضح تر توضیح بده و راهنمایی کنه?
ممنون

[younes]
جمعه 16 اسفند 1392, 23:54 عصر
شما باید دو روش سمت سرور و کلاینت استفاده کنی به این صورت که برنامه ی آزمون شما در سمت کلاینت با مدت آزمون 10 دقیقه هست این تایمر فقط میتونه نقش یه ساعت رو بازی کنه که زمان باقی مونده رو نشون کاربر میده و از نظر امنیتی هم کارایی بیش از این نمیتونه داشته باشه پس شما میتونی در سمت سرور با php یه سشن ثبت کنی که مدت 10000 میلی ثانیه اعتبار داره و اگه کاربر در این مدت فرم رو پست کرد نتایج ثبت بشه

MMSHFE
شنبه 17 اسفند 1392, 00:24 صبح
هم میتونید از سشن استفاده کنید و هم میشه زمان یک جدول داشته باشین برای مدیریت زمانهای آزمونها که بجز فیلد ردیف، یک فیلد برای شماره آزمون (کلید خارجی به جدول آزمون) و یک فیلد برای شماره کاربر (کلید خارجی به جدول کاربر) و یک فیلد هم timestamp شروع آزمون رو داشته باشه و هربار کسی در آزمونی میخواد شرکت کنه، اول توی این جدول چک کنید برای اون کاربر و اون آزمون رکوردی نباشه (تا حالا امتحان نداده باشه) و اگه نبود، رکورد رو با timestamp جاری ثبت کنید و مدت زمان آزمون هم که مشخصه و موقعی که فرم رو Submit میکنه، توی این جدول چک کنید اگه از زمان timestamp بیشتر از زمان مجاز نگذشته باشه، نتیجه آزمون رو براش ثبت کنید وگرنه پیغام بدین مدت آزمون تمام شده.

***BiDaK***
شنبه 17 اسفند 1392, 01:02 صبح
در ادامه ی صحبتای آقای شهرکی.بنظرم این کارو برای تایم متونید کنی.
برای تایم شروع آزمون از این کد میتونید استفاده کنید:


$date = date("Y-m-d H:i:s");

و برای به روش های مختلف میشه زمان پایان آزمون رو مشخص کرد که یک روشش اینجوریه که ما تایم شروع رو تیکه تیکه کنیم و سال و ماه و روز و ساعتو دقیقه و ثانیه :لبخند:رو بدست بیاریم:

$d = explode(' ', $date);


$d1 = explode('-', $d[0]);
$d2 = explode(':', $d[1]);


$year = $d1[0];
$month = $d1[1];
$day = $d1[2];


$hour = $d2[0];
$minute = $d2[1];
$second = $d2[2];
حالا واسه اینکه زمان پایان رو بدست بیاریم از تابع mktime میتونیم استفاده کنیم.مثلا آزمون مدتش 1 ساعتو نیمه. به ساعت 1 و دقیقه 30 اضافه میکنیم و timestamp یک ساعت نیم دیگرو بدست میاریم:

$timestamp = mktime($hour+1, $minute+30, $second, $month, $day, $year);
برای تست هم میتونی اکو بگیری:


$date = date("Y-m-d H:i:s", $timestamp);
echo $date;
و زمانی که دکمه ی پایان زده شد میتونی چک کنی:


if (time() > $timestamp)
{
echo 'شرمنده!!!';
}
else
{
//.........
}
راه های دیگم هست.

فرزند کوروش
شنبه 17 اسفند 1392, 16:16 عصر
اگه میخوای در یک زمان خاص مثلا 8 صبح تایمر شرو بشه میتونی از کدی که فرزند کوروش لینکشو گذاشته استفاده کنی
البته یاد اوری کنم کد من زمان رو از دیتابیس میخونه هر بار که صفحه لود بشه ادامه ی زمان بصورت معکوس میره(شمارش از اول شروع نمیشه)