如何使PHP会话变量等于JS变量?

时间:2013-12-27 11:54:55

标签: javascript php session-variables

我想问一下,如何让PHP会话变量等于Javascript值?

我想要实现的目标是:

$_SESSION['lat'] = Javascript geolocation latitude value;
$_SESSION['lng'] = Javascript geolocation longitude value;

我目前拥有的JS地理位置功能是:

<script>
function getLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition);
}
else{x.innerHTML="Geolocation is not supported by this browser.";}
}
function showPosition(position)
{   
document.getElementById('inputfield3').value = position.coords.latitude;
document.getElementById('inputfield4').value = position.coords.longitude;
}
</script>

如何使用getLocation()使$ _SESSION ['lat']和$ _SESSION ['lng']等于纬度和经度?

因为我需要$ _SESSION ['lat']和$ _SESSION ['lng']来在我的数据库中进行SELECT。谢谢。

3 个答案:

答案 0 :(得分:1)

正如我们从对这两种语言的基本理解中所知道的那样;

  • PHP是服务器端
  • JavaScript是客户端。

我们也知道我们可以通过AJAX调用调用从客户端到服务器的请求。我建议调查一下来解决你的问题。

答案 1 :(得分:1)

您可以使用Ajax

var httpRequest = null;
function getHttpObject()
{
    if (httpRequest != null)
        return;

    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        httpRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE 8 and older
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
}

function getLocation()
{
    if (navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(showPosition);
    }
    else{x.innerHTML="Geolocation is not supported by this browser.";}
}

function showPosition(position)
{   
    document.getElementById('inputfield3').value = position.coords.latitude;
    document.getElementById('inputfield4').value = position.coords.longitude;

    getHttpObject();

    // I don't know how to get the positions for showPosition, so you may have to change this part.
    httpRequest.open("GET", "set_position.php?lat=" + position.coords.latitude + "&lon=" + position.coords.longitude, true);

    httpRequest.onreadystatechange = function()
    {
        if (httpRequest.readyState == 4 && httpRequest.status == 200)
        {
            // Handle the response here. Show error or success message or whatever...
        }
    };

    httpRequest.send(null);
}

然后在您的PHP脚本上,您可以将值设置为会话,验证它并验证值(当然)。

注意:这是一个世纪,我不在纯JS中编写ajax。请警告我错误。

<强>更新

根据thisthis文档,我已修复了使用getCurrentPosition回调的方式。

更新2:

您可以使用常用方法使用form将数据发送到数据库。忘记上面的一切,试试这个:

假设您有这样的表格:

<form method="post" action="set_positions.php" id="form1">
    <input type="text" id="inputField3" />
    <input type="text" id="inputField4" />
</form>

试试这个JS代码:

function getLocation()
{
    if (navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(showPosition);
    }
    else{x.innerHTML="Geolocation is not supported by this browser.";}
}

function showPosition(position)
{   
    document.getElementById('inputfield3').value = position.coords.latitude;
    document.getElementById('inputfield4').value = position.coords.longitude;
    document.getElementById('form1').submit();
}

因此,您将在PHP脚本中收到这些字段。请注意,如果您不希望用户更改其值,那么这些字段也可以是hidden字段。

答案 2 :(得分:1)

可能会对你有帮助,

你可以使用COOKIE和JAVASCRIPT ......

见下面的功能......

function setCookie(cname, cvalue, exhour)
{
    var d = new Date();
    d.setTime(d.getTime()+(exhour*60*60*1000));
    var expires = "expires="+d.toGMTString();
    document.cookie = cname + "=" + cvalue + "; " + "path=/" + "; " + expires;
}
function getCookie(cname)
{
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) 
    {
        var c = ca[i].trim();
        if (c.indexOf(name)==0) return c.substring(name.length,c.length);
    }
    return "";
}

您可以使用$_COOKIE在PHP(服务器端)中获取COOKIE信息...