Forum Webscript.Ru
Программирование => PHP => Тема начата: sparx от 02 Августа 2003, 19:13:26
-
здраствуй народ !
наткнулся на такую странную проблему:
я сделал файл с набором функций, одна из них должна проверять определена ли переменная Х, переменная эта принадлежит сессии и потому глобальна (?).
к сожалению функция всегда говорит что переменная не определенна.
вот как это выглядит :
если есть идеи /опыт .. буду рад :)
-
А как ты определяешь, есть ли переменная?
-
isset($X)
-
function functionX($var)
{
if (session_is_registered($var)) return true;
return false;
}
-
Вот :)
Меня опередили, или
return isset ($_SESSION["X"]);
-
огромное спасибо D1g174LM4n14c твой метод работает
а метод WildWizard (тот же самый кстати что и я использовал) не работает :(
-
А попробуй так:
return !empty ($_SESSION["X"]);
-
вам обоим двойка по чтению мануала.
все равботает, если функция не кривыми руками вызывается
но метод с глобальным массивом правильнее
арджан, вот только извращений не надо.
Не понял вопроса - сиди молчи.
-
Как скажешь, дорогой друг RomikChef :)
-
цитирую из мануала ПХП :)
(к вопросу о массиве)
Caution
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered() and session_unregister().
так что очень даже логично что не работало странно что только во внешней функции.
оба способа одинаково правильные
и не надо гнать на то как написана сама функция.
-
типичный пример барана, который смотрит в книгу и видит фигу.
запомни, мальчик.
единственный, кто здесь гонит - это ты.
и все у тебя бы работало, если бы ты функцию правильно вызывал.
-
ну с гениями спорить сложно ... если бы ты еще что-то дельное говорил кроме того насколько ты крут а все дураки ... совсем прекрасно бы было
-
а я дельное говорю, когда меня вежливо спрашивают.
не "не надо гнать", а "извините, а где я ошибся по Вашему мнению".
а то, что ты дурак - это полбеды. вот то, что ты дурак с самомнением, ака ламер - это хуже.
"не надо гнать" - это ты мамаше своей говори, которая тебя таким воспитала. уродом.
точнее, дельное я пишу всегда. не всем ума хватает понять. но если ошибку свою признать, и не строить из себя обиженного эйнштейна, то я, так и быть, разжую до состояния мелкой кашицы и ткну в нее носом.
так, что даже дефективный первоклассник поймет. такой, как ты.
тебе просто ума не хватает понять то дельное, которое я пишу.
перечитай мое сообщение. я ясно указал, где ошибка.
причем у двоих сразу.
ты полез в мануал с гордым видом достал оттуда то, что к теме вообще не относится, замечание совершенно из другой оперы, и давай собой гордиться - "какой я умный!".
и на человека наезжать, который тебя, дурака, уму-разуму учит.
тьфу.
уж его, казалось бы, проще:
ткнули носом - неправильно вызываешь функцию.
побежал рысью в ман, посмотрел, хлопнул себя по башке, исправился, прибежал, спасибо сказал.
или смотрел-смотрел, ни хрена не понял, прибежал, спросил - че я не понял?
Это если человек сознает, что он да - действительно, что-то не понял. если он понимает, что он новичок и не стесняется спросить.
А если он сам считает себя супер-крутым, любое замечание считает оскорблением, "как это так - мне посмели указать на ошибку! когда я сам лучше всех все понимаю". то это отброс просто.
Мало того, что это выглядит просто смешно - при микроскопическом уровне знаний, так еще и противно.
-
Беда форумов по пхп, да и не по пхп тоже, в том, что в основном в них отвечает две категории людей:
- новички, которые сами очень мало понимают в заданном вопросе ,и чаще всего даже не могут его толком понять
- вот такие ламеры, как этот спаркс - то есть, новички, НО, которые считают, что им все тут обязаны и которые себя считают большими специалистами и болезненно реагируют на критику.
нормальные люди, которые хотя бы раз пользовались функцией, о которой берутся писать, и такие, которые знают, что такое ОТЛАДКА программы - пишут очень редко. у них и так много дел.
таких, как я - чтобы и знали до хера, и писали - единицы.
поэтому и получается, профессиональная болезнь. когда видишь митрофанушек в таких комерических количествах - тут никакие защитные барьеры не спасают.
-
...
-
[off]
ну е мае...
начинается...
[/off]
sparx
тебе, как цитатчику мануала должны были встретится эти строки:
If register_globals is disabled, only members of the global associative array $_SESSION can be registered as session variables. The restored session variables will only be available in the array $_SESSION.
Use of $_SESSION (or $HTTP_SESSION_VARS with PHP 4.0.6 or less) is recommended for improved security and code readablity. With $_SESSION, there is no need to use the session_register(), session_unregister(), session_is_registered() functions. Session variables are accessible like any other variables.
Теперь, надеюсь, понятно, почему RomikChef прав ?
-
Блин, надо было мне не выпендриваться, а сразу открытым текстом писать :-)
извините, я был неправ.
Действительно, стереотип пробить очень трудно. Это очень распространенная ошибка.
Дело не в глобалсах и не в способе. А именно в синтаксисе.
Непривычном.
Я так думаю, что частично из-за дурного синтаксиса функций session_*, как раз и ввели этот массив.
потому, что:
параметром этих функций является не переменная, а СТРОКА, содержащая имя переменной.
т.е. не session_is_registered($var), а session_is_registered("var") !
Более того, я думаю, что все эти ограничения про разные способы обращения действуют в пределах ОДНОГО скрипта.
Т.е., если ты в одном скрипте написал $_SESSION[\'a\']=1;
то в другом у тебя вполне сработает session_is_registered("a") без каких бы то ни было ограничений. Ну, кроме накладываемых регистер глобалс, естественно.
И последнее. Самая первая проверка - isset() у спаркса, естественно, не работала, поскольку переменные, зарегистрированные в сессии, ничем не отличаются от обычных и их надо так же специально объявлять глобальными.
т.е.
global $X;
if (isset($X))
вернет себе спокойно труй.
-
RomikChef
Более того, я думаю, что все эти ограничения про разные способы обращения действуют в пределах ОДНОГО скрипта.
Это в смысле что нельзя одновременно в одном скрипте вытягивать их из $_SESSION и пользоваться ф-циями session_* () ?
Я просто чего спросил, потому как работаю с session_*() ,а в отладке
print_r($_SESSION)...И в пределах одного скрипта...
-
не рекомендуется.
почему - здесь не один раз цитату приводили.