我需要使用 PHP 访问 JavaScript 变量。这是我正在尝试的代码的精简版本,它无效:
<script type="text/javascript" charset="utf-8">
var test = "tester";
</script>
<?php
echo $_GET['test'];
?>
我对JavaScript和PHP都是全新的,所以我真的很感激任何建议。
更新:好的,我想我简化了太多。我要做的是创建一个表单,在提交时更新Twitter状态。我的表单工作正常,但我还要添加地理位置数据。由于我使用Javascript(特别是Google Geolocation API)来获取位置,因此在提交表单时如何使用PHP访问该信息?
答案 0 :(得分:33)
简短的回答是你不能。
我不知道任何PHP语法,但我可以告诉你的是,PHP在服务器上执行,JavaScript在客户端上执行(在浏览器上)。
您正在使用$ _GET,这用于retrieve form values:
内置$ _GET函数用于使用method =“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>
然后,当用户点击你的提交按钮时,他/她将向blah.php发出一个“GET”请求,并发送'test'中的值。
答案 1 :(得分:4)
由于JavaScript是一种客户端语言,而PHP是一种服务器端语言,您需要将变量物理地推送到PHP脚本,方法是在PHP脚本的页面加载中包含变量(script.php? var = test),它与JavaScript无关,或者每次更改变量时通过AJAX / AHAH调用将变量传递给PHP。
如果您确实想要沿着第二条路走下去,那么您将关注XMLHttpRequest或我的偏好jQuerys Ajax调用:http://docs.jquery.com/Ajax
答案 2 :(得分:2)
_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或表单将其发送到服务器。答案 3 :(得分:2)
如果向用户显示数据,请执行重定向:
<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>
如果您不需要用户输出,请创建宽度= 0且高度= 0的iframe。
答案 4 :(得分:2)
尝试将此添加到您的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函数或php的js var,记得将它放在你的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的浮点值。
希望这会有所帮助。
答案 5 :(得分:1)
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']);
}
}
?>
答案 6 :(得分:0)
JS是基于浏览器的,PHP是基于服务器的。您必须生成一些基于浏览器的请求/信号以将数据从JS获取到PHP中。看看Ajax。
答案 7 :(得分:0)
我正在考虑这个问题,如果您只能以表单的形式将变量输入到php中,为什么不只是创建一个表单并将一个隐藏的输入放入事物中,以使其不显示在屏幕上,然后将从您的JavaScript值到隐藏的输入中,然后将其发布到php中?肯定会比其他一些东西麻烦的多吧?
答案 8 :(得分:-1)
<script type="text/javascript">
function gotzpl(){
var query = window.location.search.substring(1);
if(query){
}else{
var timez = Intl.DateTimeFormat().resolvedOptions().timeZone;
if(timez != 'undefined'){
window.location = "https://sks.com/searches.php?tzi="+timez;
}
}
}
</script>
<?php
// now retrieve value from URL and use it in PHP;
// This way you can get script value in PHP
$istzg = $_GET['tzi'];
?>
<body onload="gotzpl()">