2

私は現在、ユーザーがシングルボード組み込みコンピューターのローカル設定を変更できるようにするWebページをコーディングしています。私が現在取り組んでいる機能には、ボード上の時計をユーザーのコンピューター上の時計と同期させることが含まれます。Javascript Date()関数を使用すると、ローカルマシンの時刻を取得できるため、これを使用して現在の時刻を取得しています。

私の目標は、送信ボタンを作成することです。このボタンを押すと、javascript Date()関数から正確な時刻を取得し、POSTメソッドを使用してその時刻をphpコードに返します。値をPOSTする必要があるのは、ボードの時間設定を変更する権限を持つLinuxコマンドラインプログラムを実行できるようにするためです。

現在、ボードは正しく時刻を取得して正しくPOSTしますが、私が抱えている問題は、返される時刻がページが読み込まれた時刻であり、送信ボタンがクリックされた時刻ではないということです。

これは問題です。たとえば、ユーザーがWebページに5分間座ってからそのボタンをクリックすると、ボード上の時計が5分遅れて送信されるためです。

非表示の入力アイテムに値を割り当ててPOSTを試みましたが、正常に投稿されましたが、POSTされた時間はページの読み込み時間です。私が試したもう1つの方法は、javascript関数のonUnload呼び出しを<body>タグに追加することでしたが、同じ方法を使用してその時間を渡そうとすると、値が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>

私は与えられることができるどんな提案にも感謝します、そして前もって感謝します。

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を関数でラップし、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>
于 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 に答える