Конфликт имени переменной PHP с переменными сеанса - PullRequest
2 голосов
/ 26 июня 2011

У меня есть следующий фрагмент кода, который кто-то написал, и который я пытаюсь исправить:

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'].

Если я изменю $ freight в функции ajax на $ freight2, это не изменит переменную сеанса. Это что-то главное, что я не знаю о PHP? Имена переменных имеют то же пространство имен, что и переменные сеанса?

Вопрос в целом: Меняет ли $ a alter $ _SESSION ['a'] в любом случае? Потому что это действительно так.

Ответы [ 4 ]

7 голосов
/ 26 июня 2011

Похоже, что ваши глобальные регистры включены в вашем файле php.ini. Вы должны выключить это. Если он включен, ваши элементы $ _SESSION, $ _GET, $ _POST могут называться именами переменных.

например. $ _SESSION ['item'] совпадает с $ item

Подробнее здесь: http://us2.php.net/manual/en/ini.core.php#ini.register-globals

Кроме того, глобальные регистры теперь устарели, что также означает, что, если это действительно проблема, вы использовали более старую версию PHP и, возможно, захотите рассмотреть вопрос об обновлении.

0 голосов
/ 13 мая 2014

Я всегда использую разные обозначения для переменных сеанса. Например, $_SESSION['_uid'] против обычной переменной $uid.

0 голосов
/ 26 июня 2011

Я на самом деле не понимаю, как использовать сеанс, так что вот к кому я бы подошел:

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;
}

Вам нужно только местоположение, чтобы вы могли выполнять свои запросы.Так что просто установите сеанс один раз с новыми данными из базы данных.Надеюсь, это поможет

0 голосов
/ 26 июня 2011

Насколько я могу сказать ...

ваша $_SESSION переменная вообще не должна быть переменной сеанса, так как она всегда равна $_SESSION['freight'] = $loc."#".$arr['price'];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...