2013-05-10 7 views
0

Я пытаюсь передать значение между 2 страницами через $_SESSION переменных затем очистить его следующим образом:PHP содержания переменного сеанса

Я задаю переменный сеанс со значением на один PHP странице:

$_SESSION["elementName"]="a_373"; 

И пытается сохранить его в переменной на другую страницу следующим образом:

if (!empty($_SESSION["elementName"])) { 
    $elemName=$_SESSION["elementName"]; 
    $_SESSION["elementName"]=""; 
} else { 
    $elemName=""; 
} 

значение $elemName всегда пусто, когда я распечатать его. Тем не менее, я получаю правильную распечатку, когда я удаляю строку $_SESSION["elementName"]=""; из вышеуказанного кода.

Edit: я печатаю $elemName и не $_SESSION["elementName"] - print($elemName);

Я на общей учетной записи хостинга с PHP 5.3.2 и register_globals выключен (как на phpinfo();).

Мне нужно сбросить/очистить переменную сеанса, как только я получу значение, которое оно имеет, но оно не работает, и это затмевало меня в течение последних нескольких дней. Любые идеи почему? Благодаря!

EDIT:

Дополнительные ключи: я тестировал с var_dump дня сессии перед, если заявление и установить другое значение для $ elemName в разделе еще следующим образом:

var_dump($_SESSION["elementName"]); 

$elemName="x"; 

if (isset($_SESSION["elementName"]) && !empty($_SESSION["elementName"])) { 
    $elemName=$_SESSION["elementName"]; 
    $_SESSION["elementName"]=""; 
} else { 
    $elemName="None"; 
} 

print("<br />".$elemName); 

Я получил этот результат:

string(5) "a_373" 
None 
+0

проверьте, есть ли у вас session_start() перед любым другим выходом – nvanesch

+0

, если он работает, когда $ _SESSION ["elementName"] = ""; удаляется, то это не так. –

+0

Извините, пропустил эту строку :( – nvanesch

ответ

0

Используйте вместо этого isset($_SESSION["elementName"]) и unset($_SESSION["elementName"]).

+0

Спасибо Juampi, но он дает одинаковые res ии. На самом деле я попробовал 'unset', прежде чем пытаться присвоить ему пустую строку без везения. –

+0

Жаль, что я не мог помочь! Я уверен, что кто-то придумает решение. – Juampi

+0

Вы уверены, что страница не обновляется, прежде чем снова использовать переменную? если это так, то переменная будет потеряна. –

0

Вы распечатаны $elemName? Если да, чем не должно быть пустым выход тех пор, пока ваш else условие возвращает истинное, но если вы печатаете $_SESSION["elementName"], чем вы не получите никакого вывода, как вы делаете это поле пустым

$_SESSION["elementName"]=""; 

Правильный путь чтобы полностью удалить сессионный вар является использование unset($_SESSION["elementName"])

хотя, если вы хотите, чтобы сделать его пустым, == '' достаточно

также быть осторожным при использовании unset(), потому что после того, как вы сбросить в СЭСС и затем использовать этот индекс для печати, он покажет вам неопределенную ошибку индекса.

Update (Как @nvanesch комментарии)

Я думаю, ваше else состояние становится удовлетворен, потому что вы с помощью $elemName=""; в вашей еще, таким образом, вы не вернулись с любым выходом

Также if (!empty($_SESSION["elementName"])) { вернет false, если вы не используете session_start() в самой верхней части страницы

+0

-1? Объяснение пожалуйста –

+0

Я думаю, потому что Нино Кай специально отмечает, что он печатает $ elemName. Не мой -1 btw – nvanesch

+0

@nvanesch В любом случае ничего не получится, хотя –

0

Проверьте приведенный ниже код и проверить его

if (isset($_SESSION["elementName"]) && $_SESSION["elementName"]!="") { 
    $elemName=$_SESSION["elementName"]; 
    $_SESSION["elementName"]=""; 
} else { 
    $elemName=""; 
} 

Empty только проверить значение пусто или нет, Но IsSet мы можем проверить Название переменного выхода и не содержание пустого значения

0

Я когда-то создал этот класс для того, чтобы быть в состоянии иметь эту способность, и он прекрасно работает:

<?php 

class Flash { 

    public function set($key, $message) { 
     $_SESSION["flash_$key"] = $message; 
    } 

    public function get($key) { 
     $message = $_SESSION["flash_$key"]; 
     unset($_SESSION["flash_$key"]); 
     return $message; 
    } 

    public function has($key) { 
     return isset($_SESSION["flash_$key"]); 
    } 

} 

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

Смежные вопросы