Chr*_*ris 2 php variables session namespaces
我有其他人编写的以下代码段,我正在尝试修复:
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;
}
Run Code Online (Sandbox Code Playgroud)
它不漂亮,我只是想解决它.
现在我注意到这个bug似乎源于$ freight = calc().在该行之后,$ Freight将等于$ 10($ arr ['price']值).但 $ _SESSION ['运费']也将等于10美元,而且只需10美元,就好像它与$运费一样.我设置$运费,$ _SESSION ['运费']也变成了.
如果我将ajax函数中的$ freight更改为$ freight2,则不会更改会话变量.这是我不了解PHP的主要内容吗?变量名与会话变量共享相同的名称空间?
总的问题是:无论如何改变$ a alter $ _SESSION ['a']?因为它看起来确实如此.
看起来您的注册全局变量在php.ini文件中设置为on.你需要关闭它.如果它打开,您的$ _SESSION,$ _GET,$ _POST元素可以称为变量名称.
例如$ _SESSION ['item']与$ item相同
更多信息:http://us2.php.net/manual/en/ini.core.php#ini.register-globals
此外,现在不推荐使用注册全局变量,这也意味着如果这确实是问题,那么您使用的是旧版本的PHP,并且可能需要考虑升级.