如何使用JavaScript检索PHP$_GET

How to retrieve PHP $_GET using JavaScript?

本文关键字:GET PHP 检索 何使用 JavaScript      更新时间:2023-09-26

我有一个应用程序在localhost/index.php上运行
在Javascript中,我使用历史API:history.replaceState({}, null, "?uid=" + uid);来更改页面的URL(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,依此类推。为什么会发生这种情况?

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

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

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

当URL通过javascript动态更改时,$_GET['uid']不会更改。因为:
页面未刷新PHP文件不运行PHP代码不会再次进行评估


您可以通过使用javascript检索URL查询字符串来解决此问题
例如

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");

如果浏览器中有以下URL:http://localhost/index.php?uid=1234则上述代码中的uid变量包含1234

JS函数源


在下面的一条评论中,你问我如何将get变量发送到PHP。

要在不刷新页面的情况下运行PHP脚本,可以使用动态请求。例如ajax
如果你是web脚本和javascript的新手,我建议你看看jQuery和jQuery.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将能够从$_POST['uid']读取uid


还有一件事。如果登录到另一个用户只需要uid URL参数,则脚本存在HUGE安全漏洞。看看PHP Cookies和PHP会话