Доступ к переменной 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, когда я отправляю форму?

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

Я не знаю никакого синтаксиса 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».

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

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

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

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

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

EDIT: Как отмечали другие, если переменная JavaScript действительно создана на клиенте, вам понадобится AJAX или форма для отправки на сервер.

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

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

попробуйте добавить это в свою 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.

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

Ну, проблема с 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']); } } ?> 

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