تالار گفتمان nCIS.ir

نسخه‌ی کامل: ارسال post بعد از x ثانیه
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام دوستان
چطوری می تونم کاری کنم که صفحه بعد از x ثانیه یک عملیات ارسال فرم  رو به صورت post شبیه سازی کنه؟

ممنون
یه فرم بگذارین و با JS و با setTimeout بعد از مدت مشخص، اون رو Submit کنید.
برای آزمون هست که می خوام وقتی زمان تموم شد اون قسمت رو ثبت کنه
اینطوری کاربر js رو غیرفعال می کنه
خوب شما زمان شروع آزمون رو توی دیتابیس بگذارین و وقتی کاربر فرم رو سابمیت میکنه اگه از زمانش گذشته بود قبول نکنید. هر کاری سمت کلاینت بخواین انجام بدین باید از JS استفاده کنین که چون قابل غیرفعال شدنه، سمت سرور هم باید کنترلهای امنیتی رو انجام بدین.
آزمون چند بخش داره و هر بخشش زمان خودش
وقتی کاربر از یه بخش بره بخش بخش بعدی، زمان اون بخش که رد شده می سوزه
تقریبا همه کاراشو انجام دادم
با header هم هر بخش رو بعد از زمانش رد می کنم بره(توی اکشن چک می کنم)، ولی کاربر، اون لحظه که قراره صفحه رفرش بشه، کاربر می تونه سریع دکمه esc رو بزنه و نذاره که اون مرحله رد شه
نمی دونم اینجاشو چیکار کنم
خوب بزنه مهم نیست. توی همون مرحله بمونه تا وقتش بگذره. سمت سرور که دیگه جوابش مرحله قبلشو قبول نمیکنین. تایم مرحله بعدشم داره از دست میده. تا اون باشه دیگه تقلب نکنه. ابزارهای سمت کلاینت برای راحتیه کلاینته و نباید بهشون استناد کنین.
آخه تا وقتی مرحله لود نشده من چطوری بتونم تشخیص بدم کدوم مرحله است که تایمش رو کم کنم، سریع esc رو می زنه و js رو هم غیر فعال می کنه من نمی تونم کاری کنم

نه id می گیرم از هر section نه هیچی، هنگام شروع و init کردن آمون، idش رو توی یه سشن ذخیره کردم و هرسری چک می کنم اگه این مرحله رو next کرد، توی تیبل status ذخیره کردم و برای اون آزمون section بعدی رو لود می کنم...

می تونم توی php چک کنم بعد از اجرای اکشن اگر مدت زمان خاصی گذشت، عملیات خاصی رو انجام بده، مثل آپدیت کردن جدول وضعیت و ...؟
شما وقتی یه مرحله شروع میشه، توی سرور تو دیتابیس برای اون کاربر یه رکورد ثبت کنید و شروع و پایان مرحله رو هم داخلش بگذارین. دیگه کاری به کلاینت ندارین. هروقت جواب کاربر سابمیت شد، چک کنید اگه مرحله ای که توسط فرم اعلام شده و زمان ارسال فرم با مرحله و زمان توی دیتابیس همخوانی داشت قبول کنید وگرنه کاربر رو با کمال احترام به ترم بعد هدایت کنید‌.
خوب این روش خیلی خوبه ولی مشکل اینجاست که کاربر تا سه بار می تونه تو آزمون شرکت کنه (برای مواقعی که برق می ره یا اینترنت قطع میشه و ...)، توی سری بعدی که کاربر میاد فقط باید سوالایی رو از هر بخش رو ببینه که سری قبلی ندیده. زمان برای هر بخش و کل آزمون هست و برای هر سوال نیست، اگه برای هر سوال بود باز می شد به شکلی از این روش استفاده کرد

اگه من زمان شروع و پایان رو ثبت کنم، دفعه بعدی که بیاد نمی تونه اون بخش رو ببینه هرچند که ممکنه یه سری سوال توی اون بخش باشه که کلا دور قبلی ندیدشون
خوب میتونید توی دیتابیس یه فیلد برای تعداد شرکت کردن کاربر توی آزمون بگذارین و وقتی وارد میشه، اگه جواب یه مرحله رو سابمیت نکرده بود و زمانش گذشته بود، بهش یه لینک نشون بدین و بگین آخرین مرحله شما تکمیل نشده و میخواین ادامه بدین یا نه. بهرحال برق رفته و نتایج سؤالاتی که جواب داده هم ثبت نشده و باید دوباره جواب بده. منظورم اینه که موقع نمایش یک بخش، آخرین بخشی که توی آزمون زمانش سپری شده و جوابهاش ارسال نشده رو درصورتی که تعداد مشارکت کاربر کمتر از 3 بود، دوباره بهش نشون بدین. برای راحتی کاربر میتونید با AJAX وقتی جواب هر گزینه رو انتخاب کرد هم همون جواب رو براش سابمیت کنید و امکان تغییر هم تا وقتی کل آزمون (مرحله) رو سابمیت نکرده، داشته باشه. اینطوری وقتی دوباره یه مرحله رو میبینه، گزینه های قبلی که انتخاب کرده بوده، تیک خوردن و میتونه سریع رد بشه. اگه JS رو هم غیرفعال کرده باشه این قابلیت رو از دست میده و باید از اول جوابها رو انتخاب کنه.

البته این قابلیت رو باید با کمی دقت اضافه کنید چون ممکنه ازش سوء استفاده بشه. مثلاً من 10 سؤال از 15 سؤال رو جواب دادم و کلاً 1 دقیقه زمان از اون مرحله برام مونده. میام مرورگر رو میبندم و دوباره میام و میگم میخوام ادامه بدم. بعد 10 سؤال جواب داده شده و دوباره کل زمان آزمون رو در اختیار دارم. برای جلوگیری از چنین سوء استفاده هایی میتونید زمانی که کاربر آخرین جواب رو ارسال کرده رو هم ذخیره کنید (توی همون روش AJAX).