Столкнулся с непонятной ситуацией: У меня есть страничка регистрации, пользователь заполняет поля, скрипт проверяет есть ли такой пользователь уже в базе или нет, и если нет то добавляет, в противном случае выдает соответствующее сообщение. Для того что бы в случае ошибки поля не очищались я использую такой метод: <?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 на сервере? Заранее спасибо. Прошу прощение за то что слишком много букв в вопросе.
Связи между браузером и настройками php быть не может. Попробуем так: выключите register_globals совсем. В теге form явно обозначте method="post", а поля формы выводите так: <input name="pole1" value="<?=@$_POST['pole1']?>"> Когда пользователь только заходит на страницу $_POST - это пустой массив, соответственно <?=$_POST['pole']?> вернёт пустую строку и php сгенерирует предупреждение, которое мы заглушим с помощью @. После отправления формы в $_POST будут значения полей. Это неизбежно.
Дело в том что, для того что бы все правильно работало, достаточно только выключить register_globals. И в коде не нужно менять ни единой буквы. Другое дело что в браузере Chrome работает при любом значении register_globals. Проблема исчезла сама собой, как и появилась. Вообщем так и не понял что это было, видимо что-то заглючило в ФФ.