2

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

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

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

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

我尝试通过将值分配给隐藏的输入项来发布值,该输入项成功发布,但发布的时间是页面加载时间。我尝试过的另一种方法是将javascript函数的onUnload调用添加到<body>标记中,但是在尝试使用相同的方法传递该时间时,该值似乎没有被发布。

以下是我目前正在使用的重要代码块:

<?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>

我很感激可以给出的任何建议,并在此先感谢。

4

3 回答 3

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>
于 2012-06-13T19:53:37.780 回答
3

发生这种情况是因为您在呈现页面时声明了变量loctime,您需要在提交时执行此操作。

基本上你想将你的javascript包装在一个函数中并在提交时调用它。无需对代码进行太多更改,您可以这样做:

<?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>
于 2012-06-13T20:09:46.500 回答
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();">
于 2012-06-13T19:54:02.977 回答