Переменная сеанса PHP установлена, но PHP ее не видит.Очень странно

StackOverflow https://stackoverflow.com/questions/512514

  •  21-08-2019
  •  | 
  •  

Вопрос

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

<?php
session_start();
$tmp = "index";

echo "A: " . $_SESSION['page_loaded']['index']; // returns 1
echo "B: " . $_SESSION['page_loaded'][$tmp]; // is set, but is empty
?>

Я чувствую, что мне не хватает чего-то очень важного, но я не знаю, чего именно.

Это было полезно?

Решение

У меня такое ощущение, что вы на самом деле не вырезали и не вставили этот код?Есть ли что-то, что вы упускаете?

Другие советы

Где вы устанавливаете следующее?

$_SESSION['page_loaded'][$tmp];

Следующие работы:

<?php

    session_start();
    $tmp = "index";

    $_SESSION["page_loaded"][$tmp] = "Foo";

    echo "A: " . $_SESSION['page_loaded']["index"]; // foo
    echo "<br/>";
    echo "B: " . $_SESSION['page_loaded'][$tmp]; // foo

?>

Попробуйте это с var_dump функцию, чтобы увидеть ее значение.

Попробуйте использовать:

$tmp = 'index'; // Note the single quotes.
//...
echo "B: " . $_SESSION['page_loaded'][$tmp];

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

ОБНОВЛЯТЬ:Просто чтобы прояснить (с учетом комментариев ниже), мои доводы в пользу проверки того, влияет ли использование строк с одинарными или двойными кавычками на проблему оригинальных плакатов, показаны в примере ниже, где две строки не равны:

$var = 1;

$tmpA = 'index_$var'; // will resolve to index_$var
$tmpB = "index_$var"; // will resolve to index_1

if ( $tmpA === $tmpB)
  echo 'Identical';
else
  echo 'Not Identical!'; // <--- we get this because they are NOT identical.

тебе следует использовать

 $_SESSION['page_loaded']['tmp'] = "index";

вместо

 $tmp = "index";

и для получения значения используйте это

  echo "B: " . $_SESSION['page_loaded']['tmp']; // the output is: B: index

(избавьтесь от знака доллара $)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top