Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/Javascript-管理端的启动/停止计数器_Javascript_Php - Fatal编程技术网

PHP/Javascript-管理端的启动/停止计数器

PHP/Javascript-管理端的启动/停止计数器,javascript,php,Javascript,Php,我正在创建一个基于多项选择的表单。当学生进行测试时,计数器将从页面顶部开始。计数器与用户选择的问题数量相关 示例:如果用户选择了20个问题,并且每个问题的间隔为1分钟,那么计数器将运行20分钟,即1200秒 这是用户端计数器的代码: <input type="hidden" name="que" id="que" value="<?php echo $_POST['no_que']?>"/> <input type="hidden" name="toggle" id

我正在创建一个基于多项选择的表单。当学生进行测试时,计数器将从页面顶部开始。计数器与用户选择的问题数量相关

示例:如果用户选择了20个问题,并且每个问题的间隔为1分钟,那么计数器将运行20分钟,即1200秒

这是用户端计数器的代码:

<input type="hidden" name="que" id="que" value="<?php echo $_POST['no_que']?>"/>
<input type="hidden" name="toggle" id="toggle"/>
<form method="post" action="result_test.php">
<input type="hidden" id="no_que" name="no_que" value="<?php $_POST['no_que']?>"/>
<table border="1" align="center">
<tr>
<td align="center">
<span id="countdown" class="timer" style="font-size:xx-large"></span>
</td>
</tr>
<tr>
<td align="center">
<div id="countdowndiv" class="timer"></div>
</td>
</tr>
<?php
include('connection.php');
$sql="select class_id from class where class_name='".$_REQUEST['class']."'";
$query=mysql_query($sql) or die("query failed".mysql_error());
while($row=mysql_fetch_array($query))
{
$class_id=$row['class_id'];
$sql1="select subject_id from subject where subject_name='".$_REQUEST['subject']."'";
$query1=mysql_query($sql1) or die("query failed".mysql_error());
while($row1=mysql_fetch_array($query1))
{
$subject_id=$row1['subject_id'];
$sql2="select * from test where class_id='$class_id' and subject_id='$subject_id' and chapter>='".$_REQUEST['chapter1']."' and chapter<='".$_REQUEST['chapter2']."' ORDER BY     RAND() LIMIT 0,100";
$query2=mysql_query($sql2) or die("query failed".mysql_error());
while($row2=mysql_fetch_array($query2))
{
?>
<input type="hidden" name="hf" id="hf" value="<?php echo $_REQUEST['no_que']?>"/>
<tr>
<td>
<label name="<?php echo $row2['id']?>"><?php echo $row2['question']?></label><br>
<input type="radio" name="option<?php echo $row2['id'] ?>" id="option1" value="1"/><?php echo $row2['option_1']?>
<input type="radio" name="option<?php echo $row2['id'] ?>" id="option2" value="2"/><?php echo $row2['option_2']?>
<input type="radio" name="option<?php echo $row2['id'] ?>" id="option3" value="3"/><?php echo $row2['option_3']?>
<input type="radio" name="option<?php echo $row2['id'] ?>" id="option4" value="4"/><?php echo $row2['option_4']?>
</td>
</tr>
<?php
}
}
}
?>
<tr>
<td align="center" colspan="2">
<input type="submit" value="Submit"/>
</td>
</tr>
</table>
</form>
这是计时器的JavaScript:

//script for timer start
var no_que=document.getElementById('que').value;
var get_seconds=no_que*60;
var MAX_COUNTER = get_seconds;
var time_interval=get_seconds/12;
var counter = null;
var counter_interval = null;
var temp;
function setCookie(name,value,days) {
    var expires;
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires="+date.toGMTString();
    }
    else {
        expires = "";
    }
    document.cookie = name+"="+value+expires+"; path=/";
}

function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1,c.length);
        }
        if (c.indexOf(nameEQ) === 0) {
            return c.substring(nameEQ.length,c.length);
        }
    }
    return null;
}

function deleteCookie(name) {
    setCookie(name,"",-1);
}

function resetCounter() {
    counter = MAX_COUNTER;
}

function stopCounter() {
    window.clearInterval(counter_interval);
    deleteCookie('counter');
}

function updateCounter() {
    var msg = '';
    if (counter > 0) {
        counter -= 1;
        msg = counter;
        setCookie('counter', counter, 1);
    }
    else {
        msg = "Counting finished.";
        stopCounter();
    }
    var el = document.getElementById('countdown');
    if (el) {
        el.innerHTML = msg;
        document.getElementById('toggle').value=msg;
        if(msg==get_seconds)
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/12.png' width='100px' height='100px'/>";
        }
        if(msg>=(get_seconds-time_interval) && msg<get_seconds)
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/11.png' width='100px' height='100px'/>";
        }
        if(msg>=(get_seconds-(time_interval*2)) && msg<(get_seconds-time_interval))
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/10.png' width='100px' height='100px'/>";
        }
        if(msg>=(get_seconds-(time_interval*3)) && msg<(get_seconds-(time_interval*2)))
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/9.png' width='100px' height='100px'/>";
        }
        if(msg>=(get_seconds-(time_interval*4)) && msg<(get_seconds-(time_interval*3)))
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/8.png' width='100px' height='100px'/>";
        }
        if(msg>=(get_seconds-(time_interval*5)) && msg<(get_seconds-(time_interval*4)))
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/7.png' width='100px' height='100px'/>";
        }
        if(msg>=(get_seconds-(time_interval*6)) && msg<(get_seconds-(time_interval*5)))
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/6.png' width='100px' height='100px'/>";
        }
        if(msg>=(get_seconds-(time_interval*7)) && msg<(get_seconds-(time_interval*6)))
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/5.png' width='100px' height='100px'/>";
        }
        if(msg>=(get_seconds-(time_interval*8)) && msg<(get_seconds-(time_interval*7)))
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/4.png' width='100px' height='100px'/>";
        }
        if(msg>=(get_seconds-(time_interval*9)) && msg<(get_seconds-(time_interval*8)))
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/3.png' width='100px' height='100px'/>";
        }
        if(msg>=(get_seconds-(time_interval*10)) && msg<(get_seconds-(time_interval*9)))
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/2.png' width='100px' height='100px'/>";
        }
        if(msg>=(get_seconds-(time_interval*11)) && msg<(get_seconds-(time_interval*10)))
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/1.png' width='100px' height='100px'/>";
        }
        if(msg<(get_seconds-(time_interval*12)))
        {
        document.getElementById('countdowndiv').innerHTML = "<img src='images/0.png' width='100px' height='100px'/>";
        }
    }
}

function startCounter() {
    stopCounter();
    counter_interval = window.setInterval(updateCounter, 1000);
}

function init(temp) {
    if(!temp)
    {
    counter = getCookie('counter');
    }
    else
    {
    counter=temp;
    }
    if (!counter) {
        resetCounter();
    }
    startCounter();
}

init();

/*toggle function start*/
function toggleoff()
{
window.clearInterval(counter_interval);
deleteCookie('counter');
}
function toggleon(temp)
{
init(temp);
}
/*toggle function end*/
//script for timer end
现在的问题是,在管理页面上有两个按钮用于打开和关闭计数器。第一个按钮是开始,第二个按钮是停止。现在,当管理员点击开始按钮时,计数器应该启动,当他们点击停止按钮时,计数器应该停止

我已经尝试了很多事情,但都不走运,因为我的管理页面在管理文件夹中


那么,有谁能给我建议一个解决方案,如何将上面用户端PHP文件中声明的值发送到管理端页面,因为这个隐藏字段包含计数器值。

您可以采用两种方法之一

您可以从客户端轮询并询问服务器您应该处于什么状态,也可以使用web套接字之类的方法。无论哪种方式,您的管理面板都会将其开始-停止状态存储在某个位置

投票 通过轮询,您每x秒向服务器发出一次请求,以请求您应该处于的当前状态。在你的例子中,如果有多人参加测试,并且每秒钟都进行一次投票,那么秒数很重要,这可能是非常苛刻的。你可以采取另一种方法,使用长轮询,你可以在很多地方看到

Web套接字
如果您使用的是现代浏览器,Web套接字将是理想的选择。它们允许您在状态发生变化时立即将信息从服务器推送到客户端,而无需客户端不断询问。

您可以采取以下两种方法之一

您可以从客户端轮询并询问服务器您应该处于什么状态,也可以使用web套接字之类的方法。无论哪种方式,您的管理面板都会将其开始-停止状态存储在某个位置

投票 通过轮询,您每x秒向服务器发出一次请求,以请求您应该处于的当前状态。在你的例子中,如果有多人参加测试,并且每秒钟都进行一次投票,那么秒数很重要,这可能是非常苛刻的。你可以采取另一种方法,使用长轮询,你可以在很多地方看到

Web套接字
如果您使用的是现代浏览器,Web套接字将是理想的选择。它们允许您在状态发生变化时立即将信息从服务器推送到客户端,而无需客户端不断询问。

文件从何处加载并不重要。与页面中的任何其他输入一样,您可以访问DOM中的隐藏输入字段

//if you can do this:
var no_que=document.getElementById('que').value;

// then you also can do do this.
var t = document.getElementById('toggle');
// do whatever with t.value

文件从何处加载并不重要。与页面中的任何其他输入一样,您可以访问DOM中的隐藏输入字段

//if you can do this:
var no_que=document.getElementById('que').value;

// then you also can do do this.
var t = document.getElementById('toggle');
// do whatever with t.value

您是否尝试过进行ajax查询?。我认为您可以使用jQuery并使用ajax检查在管理面板中按下了哪个按钮,然后您可以在success函数中编程要做什么


当在admin中按下任何按钮时,您应该将其存储在文件或数据库中

是否尝试执行ajax查询?。我认为您可以使用jQuery并使用ajax检查在管理面板中按下了哪个按钮,然后您可以在success函数中编程要做什么


当在admin中按下任何按钮时,作为一般建议,您应该将其存储在文件或数据库中

,尝试确定问题的核心,制作一个小演示,并仅粘贴该部分,而不是将整个文件放在此处。这将帮助人们更快地理解你的问题,并增加你获得好答案的机会。也许这是一个错误,你有时会选择2 g,有时选择3作为一般建议,尝试确定你问题的核心,制作一个小演示,并将该部分粘贴在这里,而不是将整个文件放在这里。这将帮助人们更快地理解你的问题,并增加你获得好答案的机会。也许这是一个错误,你有时会用2G切换,有时用3G切换。每个人都假设这两段html和js在两个不同的地方?当我看到一些HTML和一些JS而没有doctype或文件时,我假设它们可以像你在上面代码中所说的那样在一起,我已经在javascript文件中编写了它们,但是它从用户端页面而不是管理员端获取值。忘记管理员端吧。被称为服务器端。你有你的JS居住和做东西的客户端,然后你有动态应用程序的服务器端,在这种情况下PHP可以修改东西。虽然是动态的,但现在您不会多次执行PHP部分,因此您只需要执行一次
将切换元素的a值重复一次。如果PHP可以更改此变量,您必须决定如何更改它,以及如何通过此更改通知客户端JS。这叫做设计你的程序。在编写大量代码之前,请先这样做:想想你的应用程序应该如何工作。@ElzoValugi当他说admin时,你为什么认为他指的是服务器端?如果admin有一个开始/停止按钮,那么我认为假设admin面板是管理用户的另一个客户端面板,可以启动/停止everyone-elses计时器会更安全。是的,会有服务器端代码,但我不相信admin=server。每个人都假设这两个html和js在两个不同的地方?当我看到一些HTML和一些JS而没有doctype或文件时,我假设它们可以像你在上面代码中所说的那样在一起,我已经在javascript文件中编写了它们,但是它从用户端页面而不是管理员端获取值。忘记管理员端吧。被称为服务器端。你有你的JS居住和做东西的客户端,然后你有动态应用程序的服务器端,在这种情况下PHP可以修改东西。虽然是动态的,但现在您不会多次执行PHP部分,因此您只会为toggle元素生成一次a值。如果PHP可以更改此变量,您必须决定如何更改它,以及如何通过此更改通知客户端JS。这叫做设计你的程序。在编写大量代码之前,请先这样做:想想你的应用程序应该如何工作。@ElzoValugi当他说admin时,你为什么认为他指的是服务器端?如果admin有一个开始/停止按钮,那么我认为假设admin面板是管理用户的另一个客户端面板,可以启动/停止everyone-elses计时器会更安全。是的,会有服务器端代码,但我不相信admin=server。