Мне нужно получить доступ к переменной 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 .