Почему данные моей формы исчезают, когда пользователь возвращается на страницу? - PullRequest
2 голосов
/ 04 июня 2011

На нашем веб-сайте есть форма, созданная с использованием очень простого PHP.Никакой javascript или что-либо еще не используется, и форма каждый раз одна и та же.

Если пользователь заполняет форму не полностью, он попадает на страницу с надписью «Эй, пожалуйста, вернитесь и заполните всеполя".Когда они нажимают кнопку «Назад», они возвращаются в форму.

В Chrome введенные ими данные формы все еще там.Но в Firefox (по крайней мере, в Firefox 3.6) все данные формы исчезли.

Мы не делаем ничего особенного для сохранения значений формы.Почему Chrome их сохраняет, а Firefox нет?Какую «стандартную» вещь мы должны сделать, чтобы сохранить их?

Спасибо.

Ответы [ 5 ]

2 голосов
/ 04 июня 2011

Большинство браузеров загружают кэшированную страницу при нажатии на кнопку «Назад», но я предполагаю, что FF3.6 этого не делает. Браузеры, которые не загружают кэшированную версию страницы, выполнят новый GET на ваш сервер, который будет отображать пустую форму при нажатии кнопки «Назад».

Но я думаю, что вы должны подумать о переосмыслении своего решения на самом деле. Потому что обычным поведением является публикация на той же странице, а затем показ на той же странице с предварительно заполненными значениями формы, если пользователь ввел форму неправильно. И если пользователь правильно ввел форму, хорошо сделать реальное перенаправление на ту же страницу (или другую страницу в этом отношении). Это называется PRG паттерн .

1 голос
/ 04 июня 2011

Как вы заметили, будут ли значения формы после нажатия кнопки «Назад» зависеть от браузера.Насколько мне известно, стандартное решение состоит в том, чтобы не иметь отдельной страницы для сообщения об ошибке, а вместо этого ответить страницей, содержащей ту же форму, предварительно заполненную значениями, введенными пользователем (и предпочтительно с указаниемкакие поля необходимо заполнить).

Например: форма имеет значение /form.php и выглядит следующим образом:

<form action="/form.php" method="POST">
     <input type="text" name="foo" />
     <input type="submit" value="Submit" />
</form>

In /form.php (псевдокод; Iпочти никогда не кодирую PHP):

if (this is a GET request) {
    echo the form;
}
else (if this is a POST request) {
    if (field values are correct) {
        processValues(...);
        redirectToConfirmationPage();
    }
    else {
        echo "<form action='/form.php' method='POST'>";
        echo "    <input type='text' name='foo' value='$theValueTheUserEntered'/>";
        echo "    <span class='error'>Field is incorrect or empty</span>";
        echo "    <input type='submit' value='Submit' />";
        echo "</form>";
    }
}
0 голосов
/ 04 июня 2011

Некоторые браузеры запоминают формы, некоторые нет.Вот почему вам нужно, чтобы форма повторно заполняла значения в PHP, если она уже отправлена.

0 голосов
/ 04 июня 2011

Это поведение, уникальное для отдельных браузеров;вы ничего не можете сделать на стороне сервера, чтобы заставить все браузеры «запоминать» данные, которые там были.в качестве значений по умолчанию для полей формы.Это то, что делает большинство известных веб-приложений.

0 голосов
/ 04 июня 2011

Может быть, это просто личные настройки вашей текущей установки Firefox (т. Е. Никогда не сохраняют формы данных).

Попробуйте, если работает на другом ПК с Firefox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...