从PHP访问JavaScript变量

时间:2010-02-26 01:30:04

标签: php javascript variables

我需要使用 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访问该信息?

9 个答案:

答案 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()">