





Это особенность, а не ошибка :-)
к счастью, вы можете отключить его, установив register_globals = выкл. в своем php.ini
Я полагаю, это зависит от точной версии .... На странице, на которую я указал, есть многочисленные (пользовательские) предупреждения о register_globals, такие как «Если вы манипулируете $ user, вы также будете манипулировать $ _SESSION ['user']», которые я Я понял, от чего страдает ОП
Это действительно похоже на регистрацию глобальных объектов. Вы уверены, что правильно отключили? Отредактируйте php.ini, чтобы быть уверенным.
Я тестировал это с включением и выключением register_globals и не могу воспроизвести это. Какую версию PHP вы используете (у меня 5.2.6).
После запуска:
<?php
session_start();
$_GET['myvar'] = '';
$_SESSION['myvar'] = $_GET['myvar'];
$myvar = 'a_new_string';
var_dump($_SESSION);
?>
на PHP 5.2.6 я получаю следующее:
array(1) { ["myvar"]=> string(0) "" }
Извините, Моранар, я забыл указать, что у меня есть? Myvar = oldvalue в строке запроса. Вы правы, что без myvar в строке запроса нет изменений.
register_globals - изобретение дьявола. К счастью, в PHP 6.0 он будет полностью отключен. Это не просто огромная проблема безопасности, это сбивает людей с толку. Пожалуйста, отключите его в своем php.ini, используя register_globals = Выкл. Дополнительная информация: http://us2.php.net/register_globals Также вы можете проверить текущие настройки с помощью команды if (ini_get (register_globals)) echo "выключи! :) ';
@EoghanM, если бы вы читали мой ответ, вы могли бы решить его на 2 часа раньше ;-)
Да, но dh2k использовал фразу «изобретение дьявола», как я сейчас отношусь к PHP :-)
$ _Get ['myvar'] - это элемент массива. $ Myvar - это переменная. Между этими двумя нет никакой связи.
($ _GET - суперглобальный массив)
$ myarry = array ('myvar' => 'myvalue'); - здесь myvar - это элемент в переменной массива $ myarray $ myvar = ''; - здесь myvar - это переменная.
Название не совсем описательное. Плюс: где вы устанавливаете мивар? в том же скрипте сразу после первой строки?