Проверка локальной переменной PHP - PullRequest
0 голосов
/ 31 августа 2011

Я работаю с набором переменных, которые проверяю каждый раз при загрузке страницы. Я успешно проверил через $ _REQUEST и $ _SESSION, но у меня возникли проблемы с динамической проверкой переменных, назначенных выше на странице, если они были установлены.

следующий мой код:

$important_field = array('treatmentId','category','state','providerId','sellDoc','insuranceName','grossCharge','discount','allowable','patientPortion','insurancePortion','dateOfService','billFileLocation','eobFileLocation','fromTable');
foreach ($important_field as $key) {
    if (!$$key || $$key == "none" || $$key == "" || $$key == NULL) {
        if (!$_REQUEST[$key] || $_REQUEST[$key] == "" || $_REQUEST[$key] == NULL) {
            if (!$_SESSION[$key]) {
                // wow, guess it just wasn't set anywhere...
            } else {
                $user->sell->$key = $_SESSION[$key];
            }
        } else { 
            $user->sell->$key = $_REQUEST[$key]; $_SESSION[$key] = $_REQUEST[$key]; 
        }
    } else {
        $user->sell->$$key = $$key; $_SESSION[$$key] = $$key; 
    }
}

Видимо, вычисление ключа $$, похоже, не делает то, что я ищу, так как оно никогда не назначает переменную сеансу ... как я должен оценивать ключ $, чтобы получить текущее установленное значение, скажем, поля $ eobFileLocation, если он уже был установлен в PHP до проверки?

Спасибо

Серебряный тигр

Обновление:

хорошо, у меня есть следующий код, но есть еще одна ошибка с ним. Когда я слежу за своим процессом, через эти переменные устанавливаются на каждой странице и переносятся переменной сеанса, как и ожидалось. Проблема, с которой я до сих пор сталкиваюсь, заключается в том, что, когда я отправляю новую переменную $ _REQUEST, которая ДОЛЖНА изменить переменную сеанса на новое переданное значение, сценарий находит локальную переменную ... откуда он извлекает ключ $ и ключ $$ из этого находит их как локальную переменную?

$important_field = array('treatmentId','category','state','city','providerId','sellDoc','insuranceName','grossCharge','discount','allowable','patientPortion','insurancePortion','dateOfService','billFileLocation','eobFileLocation','fromTable');
foreach ($important_field as $key) {
    if (isset($$key) && !empty($$key) && $$key != "none") {
        echo "Found local variable for ".$key.", i'll set the session and user to this.<br>\n";
        $user->sell->$key = $$key;
        $_SESSION[$key] = $$key; 
    } elseif (isset($_REQUEST[$key]) && !empty($_REQUEST[$key])) {
        echo "Found submitted form  variable for ".$key.", i'll set the session and user to this.<br>\n";
        $user->sell->$key = $_REQUEST[$key];
        $_SESSION[$key] = $_REQUEST[$key]; 
    } elseif (isset($_SESSION[$key]) && !empty($_SESSION[$key])) {
        echo "Found a session variable ".$key.", i'll set the user to this.<br>\n";
        $user->sell->$key = $_SESSION[$key];
    } else {
        echo "There was no provided data for ".$key."<br>\n";
    }
}

Есть идеи, почему, когда я загружаю страницу, она думает, что локальная (как указано выше) установлена? $ key и $$ key читают из $ _SESSION ['blah'] / $ _ REQUEST ['blah'] и думают, что это просто $ blah?

Ответы [ 4 ]

0 голосов
/ 31 августа 2011

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

$keys = array('treatmentId', 'category', ...)

$values = array_filter(array_merge(
    array_intersect_key($_SESSION, array_flip($keys)),
    array_intersect_key($_REQUEST, array_flip($keys)),
    compact($keys)
), function ($v) { return $v && $v != 'none'; });

$_SESSION = array_merge($_SESSION, $values);
foreach ($values as $key => $value) {
    $user->sell->$key = $value;
}

// For debugging purposes:
//
// $diff = array_diff_key(array_flip($keys), $values);
// if ($diff) {
//    'No values for ' . join(', ', array_keys($diff));
// }
0 голосов
/ 31 августа 2011

это

$user->sell->$key = $$key;

не

$user->sell->$$key = $$key;

и

$_SESSION[$$key] 

должно быть

$_SESSION[$key] 
0 голосов
/ 31 августа 2011

Вы возитесь со своими переменными, это не хорошо.Фактически, использование двух знаков var ($$) описывает «переменную переменную».

$foo = "name";
$$foo = "value";

Таким образом, вы ожидаете следующее:

echo $foo; // => "name"
echo $$foo; // => "value"

То, что вы, возможно, не Ожидается, это:

echo $name; // => "value"

Так что вам лучше сначала почистить код.

0 голосов
/ 31 августа 2011

Вы уверены, что это то, что вы хотите:

$user->sell->$$key = $$key;

не должно быть

$user->sell->$key = $$key;

попробуйте использовать пустую функцию:

if (empty($$key) || $$key == "none")
if (empty($_REQUEST[$key]))

и функция isset:

if (!isset($_SESSION[$key]))
...