0

我正在尝试在仅用于将数据发布到的文件中使用全局变量。全局未在该页面上注册。如何在该页面中访问全局变量。

编辑也许我不太清楚,所以让我把它弄清楚。我有这些文件

索引.php

global $user;
echo $user->uid;

post.php

global $user;
echo $user->uid;

现在从 index.php 我通过 jquery 发布到 post.php。但是,当我从 post.php 回显 $user->uid 时,它不会回显,但是当我从 index.php 回显它时,它会显示它。如何从 post.php 获取 $user->uid 访问权限。

4

5 回答 5

2

从全局范围访问变量的另一种方法是使用 PHP 定义的特殊 $GLOBALS 数组。

来自php.net的示例

<?php
$a = 1;
$b = 2;

function Sum() {
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
} 

Sum();
echo $b;
?>
于 2009-11-18T04:08:13.990 回答
1

我认为您应该研究会话而不是全局变量。听起来,您在一个页面上注册了一个变量,然后当用户移动到另一个页面时,您希望该变量可用。

会话将让你这样做。只需使用以下代码:

<?php
session_start();
$_SESSION['my_var'] = 'foo';

在随后的页面上......

<?php
session_start();
echo $_SESSION['my_var'];

哪个会输出foo

http://www.php.net/manual/en/book.session.php

于 2009-11-18T04:11:27.697 回答
1

您必须记住,当用户提交表单并重定向到 时post.php,其中的变量index.php早已不复存在。与普通桌面应用程序不同,PHP 的执行时间很短。

无论您index.php为获取$user对象所做的任何事情都必须在post.php. 如果您不想复制代码,只需将其放在某个文件中init_user.php并同时拥有index.phppost.php包含该文件include_once('init_user.php');

于 2009-11-18T04:23:40.167 回答
0

如果您需要一个函数内部的全局变量,请这样做

function phpFoobarFunction(){
  global $my_global;
}

关于范围的参考

对于像, (etc...)这样的超全局变量,它们在任何地方都可用。$_POST$_GET


从您更新的问题来看,您不能在两个不同的 PHP 调用之间共享变量。你将会拥有 :

  • 通过从数据库(或您的源)重新加载来重新创建您的 $user 类
  • 在 $_SESSION 中存储对象
  • 通过javascript传递用户对象(但这很危险,因为用户可以编辑它)并将其添加到您的ajax调用中。

更多关于 PHP 如何在那里玩会话的参考

于 2009-11-18T04:03:49.943 回答
0

我同意 mattbasta,出于安全原因禁用了全局变量。无论如何您都可以使用它,但正确的方法是使用会话。

另一件事是,您说:“现在我从 index.php 通过 jquery 发布到 post.php。” 你在使用一些 Ajax 调用吗?如果不是,我不明白为什么要使用 JS 来执行此操作...如果您通过 Ajax 发送数据并且只想发送此参数,请尝试以下操作:

<input style="display:none" type="hidden" id="uid" name="uid" value="<?= $user->uid ?>" />

然后从您的 ajax 调用中处理它,例如:

$.ajax({
    type: "POST",
    url: "/post.php",
    data: "uid=" + uid + "&otherVar=" + otherVar, //and so on..
    success: function() {
        //Here you can notify the user that the script ran successfully 
        }
});//end of ajax

希望这对您有所帮助。

于 2009-11-18T09:36:01.043 回答