我有其他人编写的以下代码段,我正在尝试修复:
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 ['运费']也将等于10美元,只需10美元,就好像它是与$ Freight相同的变量。我设置$运费,$ _SESSION ['运费']也变成了。
如果我将ajax函数中的$ freight更改为$ freight2,则不会更改会话变量。这是我不了解PHP的主要内容吗?变量名称与会话变量共享相同的名称空间吗?
整体问题是: 无论如何改变$ a改变$ _SESSION ['a']?因为它看起来确实如此。
答案 0 :(得分:7)
看起来您的注册全局变量在php.ini文件中设置为on。你需要关闭它。如果它打开,你的$ _SESSION,$ _GET,$ _POST元素可以被称为变量名。
e.g。 $ _SESSION ['item']与$ item
相同此处有更多信息:http://us2.php.net/manual/en/ini.core.php#ini.register-globals
此外,注册全局变量现已弃用,这也意味着如果这确实是问题,那么您使用的是旧版本的PHP,并且可能需要考虑升级。
答案 1 :(得分:0)
据我所知......
您的$_SESSION
变量根本不应该是会话变量,因为它总是等于$_SESSION['freight'] = $loc."#".$arr['price'];
答案 2 :(得分:0)
我实际上不理解会话的使用,所以这就是我接近它的方式
function calc($loc)
{
require_once("db.php");
connect();
$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 ()
{
$a = split("#", $_GET['loc']);
$freight = calc($a[0]);
echo number_format($freight, 2);
return;
}
您只需要该位置即可运行查询。因此,只需使用数据库中的新数据设置会话一次。 希望有所帮助
答案 3 :(得分:0)
我总是对会话变量使用不同的表示法。例如$_SESSION['_uid']
与常规$uid
变量。