我有其他人编写的以下代码段,并且正在尝试修复:

function calc() {
    require_once("db.php");
    connect();

    $a = split("#", $_SESSION['freight']);
    $loc = $a[0];

    $r = mysql_query("SELECT `price`, `gst` FROM `freight` WHERE `location`='$loc'");
    $arr = mysql_fetch_array($r);
    $_SESSION['freight'] = $loc."#".$arr['price'];

    return $arr['price'];
}

function ajaxFunction () {
    $_SESSION['freight'] = $_GET['loc'];
    $freight = calc();
    echo number_format($freight, 2);
    return;
}

它不是很漂亮,我只是想修复它。

现在我注意到该错误似乎源于$ freight = calc()。在该行之后,$ freight等于$ 10($ arr ['price']值)。 但是 $ _SESSION ['freight']也等于$ 10,也就是$ 10,就好像它是与$ freight相同的变量一样。我将$ freight设置为什么,$ _SESSION ['freight']也会变为。

如果我将ajax函数中的$ freight更改为$ freight2,它不会更改 session 变量。这是我不了解PHP的主要知识吗?变量名称与 session 变量共享相同的 namespace 吗?

总体问题是:
改变$ a会改变$ _SESSION ['a']吗?因为看起来确实如此。

最佳答案

看来您的register.globals已在php.ini文件中设置为on。您需要关闭它。如果启用,则您的$ _SESSION,$ _ GET,$ _ POST元素可以称为变量名。

例如$ _SESSION ['item']与$ item相同

此处更多信息:http://us2.php.net/manual/en/ini.core.php#ini.register-globals

另外,现在不建议使用register globals,这也意味着如果确实存在此问题,则说明您使用的是旧版本的PHP,并且可能要考虑升级。

10-08 19:44