it-swarm.com.ru

Доступ к переменной 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 при отправке формы?

26
Chris Armstrong

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

Я не знаю никакого синтаксиса 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, отправляя значение в «test».

33
Pandincus

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

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

4
Decipher

_GET обращается к переменным строки запроса, test не является переменной строки запроса (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 или форма для отправки ее на сервер.

2
Matthew Flaschen

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

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

2
Hawkcannon

попробуйте добавить это в вашу функцию 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-переменную, которая будет передана через форму в другую 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 (показывать только маркер на карте, если используется), чтобы пользователи не могли изменить их перед отправкой, и установить Ваша база данных принимает значения с плавающей запятой длиной 10,7.

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

2
cosphi

Что ж, проблема с 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']); 
  } 
}
?>
1
kyle

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

0
Leonidas

Я смотрю на это и думаю, что если вы можете получить переменные в php только в форме, почему бы просто не создать форму и поместить в нее скрытый ввод, чтобы она не отображалась на экране, а затем поместить значение из Ваш JavaScript в скрытый ввод и POST, что в PHP? Это наверняка будет намного меньше хлопот, чем некоторые другие вещи, верно?

0
Robin Joy Wirth