Подтвердить что ты не робот

Доступ к переменной JavaScript из PHP

Мне нужно получить доступ к переменной JavaScript с PHP. Здесь урезанная версия кода, который я сейчас пытаюсь, который не работает:

<script type="text/javascript" charset="utf-8">
    var test = "tester";
</script>

<?php
    echo $_GET['test'];
?>

Я совершенно новичок в JavaScript и PHP, поэтому я был бы очень признателен за любые советы.

UPDATE: Хорошо, я думаю, я слишком упростил это. То, что я пытаюсь сделать, это создать форму, которая будет обновлять статус Twitter при отправке. У меня есть форма, работающая нормально, но я хочу также добавить данные геолокации. Поскольку я использую Javascript (в частности, Google Geolocation API) для получения местоположения, как мне получить доступ к этой информации с PHP, когда я отправляю форму?

4b9b3361

Ответ 1

Короткий ответ вы не можете.

Я не знаю никакого синтаксиса PHP, но я могу сказать, что PHP выполняется на сервере, а JavaScript выполняется на клиенте (в браузере).

Вы делаете $_GET, который используется для извлекать значения форм:

Встроенная функция $_GET используется для сбора значений в форме с методом = "get".

Другими словами, если на вашей странице у вас было:

<form method="get" action="blah.php">
    <input name="test"></input>
</form>

Ваш вызов $_GET будет извлекать значение в этом поле ввода.

Итак, как получить значение из JavaScript?

Ну, вы можете вставить значение javascript в поле скрытой формы...

<script type="text/javascript" charset="utf-8">
    var test = "tester";
    // find the 'test' input element and set its value to the above variable
    document.getElementByID("test").value = test;
</script>

... elsewhere on your page ...

<form method="get" action="blah.php">
    <input id="test" name="test" visibility="hidden"></input>
    <input type="submit" value="Click me!"></input>
</form>

Затем, когда пользователь нажимает кнопку отправки, он/она выдает запрос "GET" на blah.php, отправляя значение в "тесте".

Ответ 2

Поскольку JavaScript - это язык на стороне клиента, а PHP - это серверный язык, вам нужно будет физически нажать эту переменную на PHP script, либо включив переменную в загрузку страницы PHP скрипт ( script.php? var = test), который действительно не имеет никакого отношения к JavaScript, или передавая переменную в PHP через вызов AJAX/AHAH каждый раз, когда изменяется переменная.

Если вы хотите перейти по второму пути, вы будете искать XMLHttpRequest или мои предпочтения, jQuerys Ajax вызывает: http://docs.jquery.com/Ajax

Ответ 3

_GET обращается к строковым переменным запроса, тест не является переменной запроса (PHP не обрабатывает JS каким-либо образом). Вам нужно переосмыслить. Вы можете сделать PHP-переменную $test и сделать что-то вроде:

<?php
$test = "tester";
?>
<script type="text/javascript" charset="utf-8">
    var test = "<?php echo $test?>";
</script>

<?php
    echo $test;
?>

Конечно, я не знаю, зачем вам это нужно, поэтому я не уверен, что это лучшее решение.

РЕДАКТИРОВАТЬ: Как отметили другие, если переменная JavaScript действительно создана на клиенте, вам понадобится AJAX или форма для отправки на сервер.

Ответ 4

Если вы показываете данные пользователю, выполните перенаправление:

<script language="JavaScript">
    var tester = "foobar";
    document.location="http://www.host.org/myphp.php?test=" + tester;
</script>

или iframe:

<script language="JavaScript">
    var tester = "foobar";
    document.write("<iframe src=\"http://www.host.org/myphp.php?test=" + tester + "\"></iframe>");
</script>

Если вам не нужен пользовательский вывод, создайте iframe с шириной = 0 и высотой = 0.

Ответ 5

попробуйте добавить это в свою js-функцию:

    var outputvar = document.getElementById("your_div_id_inside_html_form");
    outputvar.innerHTML='<input id=id_to_send_to_php value='+your_js_var+'>';

Позже в html:

    <div id="id_you_choosed_for_outputvar"></div>

этот div будет содержать js var, который должен быть передан через форму в другую js-функцию или php, не забудьте поместить его в вашу html-форму!. Это решение отлично работает для меня.

В вашем конкретном случае геолокации вы можете попробовать добавить следующее к функции showPosition (position):

    var outputlon = document.getElementById("lon1");
    outputlon.innerHTML = '<input id=lon value='+lon+'>';
    var outputlat = document.getElementById("lat1");
    outputlat.innerHTML = '<input id=lat value='+lat+'>';  

позже добавьте эти div в вашу html-форму:

<div id=lat1></div>
<div id=lon1></div>

В этих div вы получите широту и долготу в качестве входных значений для вашей php-формы, вам лучше скрыть их с помощью css (покажите только маркер на карте, если он используется), чтобы пользователи не могли их изменить до отправки, и установите вашу базу данных для принятия значений float с длиной 10,7.

Надеюсь, это поможет.

Ответ 6

Ну, проблема с GET заключается в том, что пользователь может изменить значение самостоятельно, если у него есть некоторые знания. Я написал это так, чтобы PHP мог восстановить часовой пояс из Javascript:

//- index.php

<?php
  if (!isset($_COOKIE['timezone'])) {
?>
<html>
<script language="javascript">  
  var d = new Date(); 
  var timezoneOffset = d.getTimezoneOffset() / 60;
  // the cookie expired in 3 hours
  d.setTime(d.getTime()+(3*60*60*1000));
  var expires = "; expires="+d.toGMTString();
  document.cookie = "timezone=" +  timezoneOffset + expires + "; path=/";
  document.location.href="index.php"
</script>
</html>
<?php
} else {
  ?>

  <html>
  <head>
  <body>

  <?php 
  if(isset($_COOKIE['timezone'])){ 
    dump_var($_COOKIE['timezone']); 
  } 
}
?>

Ответ 7

JS ist на основе браузера, PHP основан на сервере. Вы должны создать некоторый запрос/сигнал на основе браузера, чтобы получить данные из JS в PHP. Взгляните на Ajax.