2012-06-13 35 views
2

我目前正在编写一个网页,允许用户更改单板嵌入式计算机上的本地设置。我目前正在研究的一项功能涉及将主板上的时钟与用户计算机上的时钟同步。 Javascript Date()函数允许我获取本地机器的时间,所以我使用它来获取当前时间。

我的目标是创建一个提交按钮,当按下该按钮时,将从javascript Date()函数获取确切时间,然后使用POST方法将该时间返回到我的php代码。我需要POST值的原因是,我可以运行一个Linux命令行程序,该程序有权改变板的时间设置。

现在,董事会正确地获取时间并将其正确发布,但是我遇到的问题是返回的时间是页面加载的时间,而不是点击提交按钮的时间。

这是一个问题,因为如果用户坐在网页上,比如说5分钟,然后单击该按钮,则主板上的时钟将被提交一个5分钟后的时间。

我已经尝试通过将它分配给一个隐藏的输入项,它成功发布它,但POSTed时间是页面加载时间后发送值。我试过的另一种方法是在<body>标记中添加一个javascript函数的onUnload调用,但当尝试使用相同的方法传递该时间值时,该值似乎不会被POST。

下面是我目前工作的重要代码块:

<?php 
echo "<form method='POST' action='".$PHP_SELF."'>"; 

if (isset($_POST['getLocalTime'])) 
{ 
    echo $_POST['localTime'].'<br>'; 
    $setLocalTime = "My Commandline String"; 
    exec($setLocalTime); 
} 
?> 

<input type="hidden" id="localTime" name="localTime"> 

<script language='JavaScript'> 
var date = new Date(); 
var d = date.getUTCDate(); 
var day = (d < 10) ? '0' + d : d; 
var m = date.getUTCMonth() + 1; 
var month = (m < 10) ? '0' + m : m; 
var year = date.getUTCFullYear(); 
var h = date.getUTCHours(); 
var hour = (h < 10) ? '0' + h : h; 
var mi = date.getUTCMinutes(); 
var minute = (mi < 10) ? '0' + mi : mi; 
var sc = date.getUTCSeconds(); 
var second = (sc < 10) ? '0' + sc : sc; 
var loctime = month + day + hour + minute + year + "." + second; 

document.getElementById('localTime').value = loctime; 
</script> 

<?php 
echo "<pre>"; 
print_r($_POST); 
echo "</pre>"; 
?> 

<input class="button" type="submit" name="getLocalTime" value="Copy Local Time"> 
</form> 

我明白,可以给出任何建议,并在此先感谢。

回答

6

你应该把你的脚本放在一个函数中,然后使用表单对象的onSubmit运行该函数。

在您的表单定义:

echo "<form method='POST' action='".$PHP_SELF."' onsubmit='getTime();'>"; 

而对于JavaScript的:

<script language='JavaScript'> 
function getTime(){ 
var date = new Date(); 
var d = date.getUTCDate(); 
var day = (d < 10) ? '0' + d : d; 
var m = date.getUTCMonth() + 1; 
var month = (m < 10) ? '0' + m : m; 
var year = date.getUTCFullYear(); 
var h = date.getUTCHours(); 
var hour = (h < 10) ? '0' + h : h; 
var mi = date.getUTCMinutes(); 
var minute = (mi < 10) ? '0' + mi : mi; 
var sc = date.getUTCSeconds(); 
var second = (sc < 10) ? '0' + sc : sc; 
var loctime = month + day + hour + minute + year + "." + second; 

document.getElementById('localTime').value = loctime; 
} 
</script> 
+0

非常感谢!它完美的工作! – jetbomber117

0
<?php 
echo "<form id="loctimeform" method='POST' action='".$PHP_SELF."'>"; 

if (isset($_POST['getLocalTime'])) 
{ 
    echo $_POST['localTime'].'<br>'; 
    $setLocalTime = "My Commandline String"; 
    exec($setLocalTime); 
} 
?> 

<input type="hidden" id="localTime" name="localTime"> 
</form> 

<script language='JavaScript'> 

function doGetLocTime() { 

var date = new Date(); 
var d = date.getUTCDate(); 
var day = (d < 10) ? '0' + d : d; 
var m = date.getUTCMonth() + 1; 
var month = (m < 10) ? '0' + m : m; 
var year = date.getUTCFullYear(); 
var h = date.getUTCHours(); 
var hour = (h < 10) ? '0' + h : h; 
var mi = date.getUTCMinutes(); 
var minute = (mi < 10) ? '0' + mi : mi; 
var sc = date.getUTCSeconds(); 
var second = (sc < 10) ? '0' + sc : sc; 
var loctime = month + day + hour + minute + year + "." + second; 

document.getElementById('localTime').value = loctime; 

} 

function doSubmitForm() { 
    doGetLocTime(); 
    document.getElementById('loctimeform').submit(); 
} 

</script> 

<?php 
echo "<pre>"; 
print_r($_POST); 
echo "</pre>"; 
?> 

<input class="button" type="button" name="getLocalTime" value="Copy Local Time" onclick="doSubmitForm();"> 
3

发生这种情况,因为你是在声明变量loctime当页面呈现,您需要做它onsubmit。

基本上你想把你的javascript包装在一个函数中,并将其称为onsubmit。在不对代码做太多修改的情况下,您可以这样做:

<?php 
echo "<form method='POST' onsubmit='getTime();' action='".$PHP_SELF."'>"; 

if (isset($_POST['getLocalTime'])) 
{ 
    echo $_POST['localTime'].'<br>'; 
    $setLocalTime = "My Commandline String"; 
    exec($setLocalTime); 
} 
?> 

<input type="hidden" id="localTime" name="localTime"> 

<script language='JavaScript'> 
function getTime() { 
    var date = new Date(); 
    var d = date.getUTCDate(); 
    var day = (d < 10) ? '0' + d : d; 
    var m = date.getUTCMonth() + 1; 
    var month = (m < 10) ? '0' + m : m; 
    var year = date.getUTCFullYear(); 
    var h = date.getUTCHours(); 
    var hour = (h < 10) ? '0' + h : h; 
    var mi = date.getUTCMinutes(); 
    var minute = (mi < 10) ? '0' + mi : mi; 
    var sc = date.getUTCSeconds(); 
    var second = (sc < 10) ? '0' + sc : sc; 
    var loctime = month + day + hour + minute + year + "." + second; 

    document.getElementById('localTime').value = loctime; 
} 
</script> 

<?php 
echo "<pre>"; 
print_r($_POST); 
echo "</pre>"; 
?> 

<input class="button" type="submit" name="getLocalTime" value="Copy Local Time"> 
</form>