2012-06-13 3 views
2

В настоящее время я кодирую веб-страницу, которая позволяет пользователям изменять локальные настройки на встроенном компьютере на одной плате. Функция, над которой я сейчас работаю, включает синхронизацию часов на плате с часами на компьютере пользователя. Функция Date() Javascript позволяет мне получить время локальной машины, поэтому я использую это для получения текущего времени.

Моя цель - создать кнопку отправки, которая при нажатии будет захватывать точное время из функции javascript Date(), а затем использовать метод POST, чтобы вернуть это время в мой PHP-код. Причина, по которой мне нужно установить POST, - это запустить программу командной строки Linux с привилегиями изменить настройку времени платы.

Прямо сейчас, плата получает время правильно и правильно отправляет его, но проблема, с которой я сталкиваюсь, заключается в том, что возвращенное время - это время загрузки страницы, а не время нажатия кнопки отправки.

Это проблема, потому что если пользователь сидит на веб-странице, скажем, через 5 минут, а затем нажимает на эту кнопку, часы на плате будут отправляться на 5 минут.

Я пробовал POSTing значение, назначив его скрытому элементу ввода, который успешно отправляет его, но время POSTed - это время загрузки страницы. Другой метод, который я пытался, заключался в добавлении вызова onUnload функции javascript в тег <body>, но значение, похоже, не получает POSTED при попытке передать это время с использованием того же метода.

Вот важные куски кода, что я работаю с:

<?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> 
Смежные вопросы