За последние 24 часа нас посетили 33252 программиста и 3410 роботов. Сейчас ищут 1127 программистов ...

FireFox register_globals On\Off

Тема в разделе "PHP для новичков", создана пользователем Phantik, 5 дек 2009.

  1. Phantik

    Phantik Активный пользователь

    С нами с:
    2 июл 2009
    Сообщения:
    163
    Симпатии:
    0
    Столкнулся с непонятной ситуацией:
    У меня есть страничка регистрации, пользователь заполняет поля, скрипт проверяет есть ли такой пользователь уже в базе или нет, и если нет то добавляет, в противном случае выдает соответствующее сообщение.
    Для того что бы в случае ошибки поля не очищались я использую такой метод:
    <?php
    $pole1 = "";
    $pole2 = "";
    .....
    if($_SERVER['REQUEST_METHOD'] == "POST")
    {
    $pole1 = $_POST['pole1'];

    $pole2 = $_POST['pole2'];
    ...

    }
    >

    А в самом html соответсвенно
    <form...>
    ...
    <input... value="<?=$pole1?>"....>
    <input... value="<?=$pole2?>"....>
    ...
    </form>

    Далее я регистрирую нового пользователя user1 - все проходит удачно, он добавляется в базу.
    Потом я пытаюсь регистрировать пользователя user2 и мне выдается ошибка, что пользователь user1 уже зарегистрирован. И в поле login, после обновления страницы заполняется текстом user1. Хотя я нажимаю кнопку submit, когда в поле забит текст user2.
    Проверил весь код. присвоение $login = происходит только 2 раза:
    1) В самом начале $login='';
    2) В блоке условного оператора if($_SERVER['REQUEST_METHOD'] == "POST")
    больше присвоений этой переменной каких-либо значений нету.

    Далее пишу проверку echo "$login"; после присвоения
    $login = $_POST['login']; - выдает все правильно - user2
    далее пишу echo "$login"; в том месте кода, где происходит проверка с результатом запроса, а там уже это поле равно user1. И, естественно генерится ошибка, что такой пользователь уже существует и, при перезагрузке страницы, в поле login записывается значение user1.

    Непонятно, кто меняет значение этой переменной на предыдущее, если больше нету никаких присвоений этой переменной?

    Далее какое бы новый логин я не вводил, меня все время выкидывает на ошибку, что user1 уже существует и, после перезагрузки страницы, поле заполняется значением user1.

    Проверял эту регистрацию на 2х браузерах FF и Chrome. Во втором все регистрируется правильно, а в FF, что удивительно, правильно работает только когда я прописываю в .htaccess
    php_value register_globals off (по умолчанию на сервере они On)

    Очень бы хотел узнать что это за загадочная связь браузера FF и настройки PHP на сервере?
    Заранее спасибо. Прошу прощение за то что слишком много букв в вопросе.
     
  2. Бородин Вадим

    Бородин Вадим Активный пользователь

    С нами с:
    30 ноя 2009
    Сообщения:
    8
    Симпатии:
    0
    Связи между браузером и настройками php быть не может. Попробуем так: выключите register_globals совсем. В теге form явно обозначте method="post", а поля формы выводите так: <input name="pole1" value="<?=@$_POST['pole1']?>">

    Когда пользователь только заходит на страницу $_POST - это пустой массив, соответственно <?=$_POST['pole']?> вернёт пустую строку и php сгенерирует предупреждение, которое мы заглушим с помощью @. После отправления формы в $_POST будут значения полей. Это неизбежно.
     
  3. Phantik

    Phantik Активный пользователь

    С нами с:
    2 июл 2009
    Сообщения:
    163
    Симпатии:
    0
    Дело в том что, для того что бы все правильно работало, достаточно только выключить register_globals. И в коде не нужно менять ни единой буквы. Другое дело что в браузере Chrome работает при любом значении register_globals.

    Проблема исчезла сама собой, как и появилась. Вообщем так и не понял что это было, видимо что-то заглючило в ФФ.