如何使用JavaScript检索PHP $ _GET?

时间:2014-04-28 18:57:05

标签: javascript php

我在localhost/index.php上运行了一个应用 在Javascript中,我使用历史记录API:history.replaceState({}, null, "?uid=" + uid);来更改页面的网址(uid是一个随机生成的值的变量)。例如,此操作地址更新为localhost/index.php?uid=dqw12312aws后 然后我尝试通过以下方式在服务器端接收uid变量:console.log('<?php echo "$_GET[uid]"; ?>');。 但我获得了意想不到的价值 我对localhost/index.php?uid=dqw12312av - $_GET[uid]的第一次请求将是一个空字符串 但我向localhost/index.php?uid=qwtgas23123提出的第二次请求 - $GET[uid]将是我第一次请求的值,等于dqw12312aws,依此类推。为什么会这样?

1 个答案:

答案 0 :(得分:1)

你在javascript中使用console.log('<?php echo $_GET["uid"]; ?>');,对吗? Javascript不在服务器端。 Javascript被浏览器解释。 PHP由服务器解释,I.E。 PHP是服务器端。服务器端意味着当服务器服务器运行服务器端文件时,将解释代码 。 (I.E.页面加载时)。

  

当您加载PHP文件时,您基本上要求服务器进入该文件,找到任何PHP并执行它。

这意味着,在这种情况下,$_GET['uid']将包含在加载页面时设置的uid url-param。所以

  当通过javascript动态更改URL时,

$_GET['uid']不会更改。这是因为:
  页面未刷新 PHP文件无法运行 PHP代码无法再次评估。


您可以通过使用javascript检索URL查询字符串来解决此问题 E.G。

function getUrlVar(requestedKey) {
    var hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        var key = hash[0],
            val = hash[1];
        if (key === requestedKey) {
            return val;
        }
    }
    return false;
}
var uid = getUrlVar("uid");

如果您在浏览器中有此网址:http://localhost/index.php?uid=1234 然后,上面代码中的uid变量包含1234

JS Function source


在下面的评论中,您问我如何向PHP发送get变量。

要在不刷新页面的情况下运行PHP脚本,您可以使用动态请求。例如。阿贾克斯。
如果您不熟悉网络脚本和javascript,建议您查看jQueryjQuery.ajax

因此,您将在index.php中包含jQuery并运行此JS代码:

function getUrlVar(requestedKey) {
    var hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        var key = hash[0],
            val = hash[1];
        if (key === requestedKey) {
            return val;
        }
    }
    return false;
}

function sendUidToPHP(){
    $.post("receiver.php", {uid: getUrlVar("uid")}, function(data){
        // The data argument now contains the response from php
        // To learn more about this see http://api.jquery.com/jquery.ajax
        // and http://api.jquery.com/jquery.post
    });
}

receiver.php可以从uid读取$_POST['uid']


还有一件事。如果uid URL-param是登录其他用户所需的唯一内容,则您的脚本存在巨大安全漏洞。请查看PHP-CookiesPHP-Sessions