PDA

View Full Version : سوال: استفاده از زمان سنج در php برای این کار؟؟



mmohammadi1391
جمعه 29 آذر 1392, 18:41 عصر
با سلام و احترام
من یک صفحه ی آزمون آنلاین دارم که ابتدا کاربر خصوصیاتش را وارد می کند و دکمه ی «شروع آزمون» را فشار می دهد. با این کار به صفحه ی آزمون که یک صفحه ی php است منتقل شده و به سؤالاتی که برای کاربر نمایش داده شده، پاسخ می دهد. برای مشاهده ی نتیجه ی آزمون دکمه ی «مشاهده نتیجه» را انتخاب می کند. با این کار صفحه ی نتیجه ی آزمون نمایش داده می شود.
تا این قسمت رو طراحی کردم.
فقط گفته باید یک زمان سنج در صفحه ی آزمون وجود داشته باشه که پس از سپری شدن یک زمان خاص، به صفحه ی نتیجه ی آزمون بره و نتیجه رو نمایش بده.
متأسفانه درست نمیدونم چه شکلی باید در php، زمان سنج درست کنم.
یک سؤال دیگه ای که دارم اینه که وقتی که با اتمام زمان، پنجره ی نتیجه، نمایش داده شد، چه کار کنم که نتیجه ی آزمون محاسبه و نمایش داده بشه؟ چون در حال حاضر، این کار توسط صفحه ای انجام میشه که با فشار دادن دکمه ی «مشاهده نتیجه» (دکمه ی نوع submit) به اون صفحه دسترسی پیدا میکنه. اما با اتمام زمان، نمیدونم چه شکلی باید کاری که دکمه ی «مشاهده نتیجه» (دکمه ی نوع submit) انجام میده رو انجام بدم.
با تشکر

Javidhb
جمعه 29 آذر 1392, 18:55 عصر
باید از تابع setTimeout (http://www.w3schools.com/jsref/met_win_settimeout.asp)جاوااسکریپت برای صبر کردن (تا یه زمان خاص) استفاده کنید و توی تابع هم از ()sumbit (http://www.w3schools.com/jsref/met_form_submit.asp) برای ارسال فرم استفاده کنید.

mmohammadi1391
جمعه 29 آذر 1392, 22:17 عصر
باید از تابع setTimeout (http://www.w3schools.com/jsref/met_win_settimeout.asp)جاوااسکریپت برای صبر کردن (تا یه زمان خاص) استفاده کنید و توی تابع هم از ()sumbit (http://www.w3schools.com/jsref/met_form_submit.asp) برای ارسال فرم استفاده کنید.

از اینکه راهنمایی کردید بسیار سپاسگذارم.
من کد زیر رو در تگ اسکریپت، داخل تگ head در همون فایل php نوشتم:
function timer_end(){
setTimeout(send(),5);
}
function send(){
document.getElementById("form1").submit();
}

کد زیر رو هم در خصوصیات تگ body نوشتم:

onclick=timer_end();

اما هیچ اتفاقی نیفتاد.
مشکلش چیه؟

mmohammadi1391
جمعه 29 آذر 1392, 22:45 عصر
نمره در بانک ثبت میشه، اما میخوام بعد از اتمام زمان، این صفحه به صفحه ی نتایج منتقل بشه و نتیجه ی آزمون نشون داده بشه.

Javidhb
شنبه 30 آذر 1392, 00:02 صبح
لطفا سوالات مربوط به جاوااسکریپت رو توی انجمن خودش بپرسید...


<?php
if(isset($_POST['soal1'])){ echo $_POST['soal1'];}
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>azmoon</title>
</head>
<body onclick='timer_end();'>
<form action='' method='POST' id="form1">
<input type="radio" name='soal1' value='gozine1'> gozine1
<input type="radio" name='soal1' value='gozine2'> gozine2
<input type="radio" name='soal1' value='gozine3'> gozine3
<input type="radio" name='soal1' value='gozine4'> gozine4
<input type="submit" name="submitBtn" value='اتمام'>
</form>
<script>
function timer_end(){
setTimeout('send()',5);
}
function send(){
document.getElementById("form1").submit();
}
</script>
</body>
</html>

mmohammadi1391
شنبه 30 آذر 1392, 01:36 صبح
لطفا سوالات مربوط به جاوااسکریپت رو توی انجمن خودش بپرسید...


<?php
if(isset($_POST['soal1'])){ echo $_POST['soal1'];}
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>azmoon</title>
</head>
<body onclick='timer_end();'>
<form action='' method='POST' id="form1">
<input type="radio" name='soal1' value='gozine1'> gozine1
<input type="radio" name='soal1' value='gozine2'> gozine2
<input type="radio" name='soal1' value='gozine3'> gozine3
<input type="radio" name='soal1' value='gozine4'> gozine4
<input type="submit" name="submitBtn" value='اتمام'>
</form>
<script>
function timer_end(){
setTimeout('send()',5);
}
function send(){
document.getElementById("form1").submit();
}
</script>
</body>
</html>

چون سؤالم رو اینجا درج کردم مجبورم بقیشم همینجا بپرسم، از مدیران محترم خواهشمندم لطف کنند به بخش جاوا اسکریپت منتقلش کنند. ممنون
متأسفانه خط زیر کار نمیده:
document.getElementById("form1").submit();
یعنی همه ی برنامه کار میده اما اطلاعات فرم، به صفحه ی php ی مورد نظر ارسال نمیشه و هم چنین بعد از سپری شدن زمان، اون صفحه ی php نمایش هم داده نمیشه.

Javidhb
شنبه 30 آذر 1392, 10:08 صبح
به احتمال زیاد شما یه المنت توی form دارید که name برابر submit هست(معمولا دکمه submit !)

باید اسم اون رو عوض کنید... مثل همون مثال بالا، که برای دکمه name = submitBtn هست.


=>دقت کنید که اسم تابع هم توی setTimeout توی کوتیشن قرار بگیره.

MMSHFE
شنبه 30 آذر 1392, 10:17 صبح
انتقال از بخش PHP به بخش Javascript

mmohammadi1391
شنبه 30 آذر 1392, 12:35 عصر
به احتمال زیاد شما یه المنت توی form دارید که name برابر submit هست(معمولا دکمه submit !)

باید اسم اون رو عوض کنید... مثل همون مثال بالا، که برای دکمه name = submitBtn هست.


=>دقت کنید که اسم تابع هم توی setTimeout توی کوتیشن قرار بگیره.

ببخشید اینقدر مزاحم وقت شریف شما شدم
این چیزایی که گفتید رو اعمال کردم اما هنوز همونطوره، یعنی به محض اینکه صفحه ی آزمون بارگذاری میشه، همون موقع جواب آزمون در بانک ذخیره میشه(یعنی اصلاً طبق زمانی که در زمان سنج تعیین کردم عمل نمیکنه، من زمان رو 10000 نوشتم)، یعنی نتیجه ی آزمون رو همیشه 0 حساب میکنه در صورتی که وقتی دکمه ی «مشاهده نتیجه» رو میزنم، مثلاً نتیجه شده 2 اما در بانک 0 ذخیره شده.
و تازه اصلاً پاسخ هایی که کاربر انتخاب میکنه، به صفحه ی نتیجه(php) منتقل نمیشه(با دستور isset آزمایشش کردم).

این دستورات صفحه ی azmoom.php:

<html>
<head>
<meta charset="utf-8">
<title>azmoon</title>
</head>

<body bgcolor="#45c0e8" onclick='timer_end();'>

<?php
if(isset($_POST['rayaname'])){ echo $_POST['rayaname'];}

$rayaname=$_POST['rayaname'];
$nam=$_POST['nam'];

mysql_connect("localhost","root","");
mysql_select_db("barnamenevisi");

echo "<center><form action=\"rezult.php\" method=\"POST\" name=\"form1\"";
echo "<br/><br/><table><tr><td>";

for($i=1;$i<=4;$i++){

$sh=rand(1,10);

$result = mysql_query("SELECT * FROM azmoon WHERE sh=$sh");

$row = mysql_fetch_assoc($result);

echo "<p dir=rtl>",$i,"- ",$row['soal'],"<br/>"

,"<input type=radio name=r".$i," value=".$row['p1'],">",$row['p1'],"<br/>"

,"<input type=radio name=r".$i," value=".$row['p2'],">",$row['p2'],"<br/>"

,"<input type=radio name=r".$i," value=".$row['p3'],">",$row['p3'],"<br/>"

,"<input type=radio name=r".$i," value=".$row['p4'],">",$row['p4'],"</p>";


$j=$i - 1;
echo "<input type=hidden name= true".$i," value=".$row['sahih'],">";
}

echo "</td></tr></table>";

echo "<br/><input type=submit value=\"مشاهده نتیجه\" name=submitBtn onclick=check()>";
echo "<input type=reset value=\"پاک کردن صفحه\" name=reset>";

echo "<input type=hidden name=rayaname value= ".$rayaname.">";

echo "</center></form>";



$order = "INSERT INTO rezult
(rayaname, nam)
VALUES
('$rayaname', '$nam')";

$result = mysql_query($order); //order executes



mysql_close();
?>

<script>
function timer_end(){
setTimeout('send()',10000);
}
function send(){
document.getElementById("form1").submit();
}
</script>

</body>
</html>




اینم دستورات صفحه ی rezult.php:

<html>
<body bgcolor=#91e1e8>
<?php
$s=0;
$rayaname=$_POST['rayaname'];

mysql_connect("localhost","root","");
mysql_select_db("barnamenevisi");

if (isset($_POST['r1']))
if($_POST['true1']==$_POST['r1'])
$s++;

if (isset($_POST['r2']))
if($_POST['true2']==$_POST['r2'])
$s++;

if (isset($_POST['r3']))
if($_POST['true3']==$_POST['r3'])
$s++;

if (isset($_POST['r4']))
if($_POST['true4']==$_POST['r4'])
$s++;

mysql_query("UPDATE rezult SET nomre = '$s' WHERE rayaname = '$rayaname'");


echo "<br/><br/><br/><center><font dir=rtl style=\"font-family:B titr; font_size:50; font_weight:bold\"> نمره شما: ",$s,"</font></center>";

?>

</body>
</html>


البته اگه وقت دارید بررسی کنید

mmohammadi1391
شنبه 30 آذر 1392, 13:04 عصر
البته فکر کنم اطلاعات فرم را ارسال میکنه چون «رایانامه» رو دریافت میکنه، فکر کنم به خاطر این جواب رو 0 میده چون به محض بار شدن صفحه، همون موقع جواب آزمون رو محاسبه میکنه و در این موقع هیچ پاسخی توسط کاربر وارد نشده و برای همین هم نتیجه 0 میشه.

Javidhb
شنبه 30 آذر 1392, 13:22 عصر
خواهش میکنم...

خط 18 azmoon.php رو اینجوری تغییر بدید:


echo '<center><form action="rezult.php" method="POST" name="form1" id="form1">';

شما id رو برای form مشخص نکردید... پس انتخابتون توی js برای ()submit فرم انجام نمیشه...


زمان توی setTimeout رو برابر 10000 (میلی ثانیه) قرار دادید... پس فرم بعد از 10 ثانیه submit میشه... که احتمالا بخاطر همین ممکن کاربر فرصت نکنه که جوابی رو انتخاب کنه.

mmohammadi1391
شنبه 30 آذر 1392, 14:09 عصر
دوست عزیز از لطفی که کردید و راهنماییم کردید بسیار سپاسگذارم.
خدا رو شکر دیگه درست شد.