[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужна ли страница успеха после сохранения?
zvezda_t
Всем привет.

Скажите, пожалуйста, как лучше поступать, после отправки данных на сервер

например:
- заполняем форму
- нажимаем сохранить
- данные пишутся в БД
- выходит сообщение - "Данные успешно сохранены"

Нужна защита от F5.

Раньше у меня был redirect на другую страницу и надпись "Данные успешно сохранены". Но эта надпись зависела от переменной сессии, мне это не нравится.

Думаю, может быть сделать страницу "успеха" с задержкой, а потом redirect.
Вы как реализовываете?




Спустя 1 час, 6 минут, 29 секунд (24.08.2012 - 08:27) phz написал(а):
Как вариант:

После нажатия кнопки сохранять и ведём на эту же страницу или на список всех данных и к ссылки добавляем &status=ok

  if (isset($_GET['status']))
{
$info[] = 'Данные успешно сохранены';
}

Спустя 26 минут, 52 секунды (24.08.2012 - 08:54) zvezda_t написал(а):
phz, я использую CodeIgniter, там вообще Get запрещены rolleyes.gif

Спустя 3 минуты, 55 секунд (24.08.2012 - 08:58) zvezda_t написал(а):
А если сделать alert("Ваши данные успешно сохранены!") перед redirect.
пользователь нажимает ok и переходит.

Или так плохо? Лишнее действие - это не очень?

Спустя 5 минут (24.08.2012 - 09:03) TMake написал(а):
zvezda_t для этого CodeIgniter нужно немного допиливать http://habrahabr.ru/post/42172/ что бы GET можно было использовать

Спустя 20 минут, 8 секунд (24.08.2012 - 09:23) Игорь_Vasinsky написал(а):
можно и в сессии хранить результат, а после вывода - очищать сразу

Спустя 30 минут, 57 секунд (24.08.2012 - 09:54) zvezda_t написал(а):
Игорь_Vasinsky, smile.gif значит оставлю как было) спасибо smile.gif

Спустя 1 минута, 32 секунды (24.08.2012 - 09:56) Placido написал(а):
Цитата (Игорь_Vasinsky @ 24.08.2012 - 10:23)
можно и в сессии хранить результат, а после вывода - очищать сразу

Для этого в CI есть такая штука, как flashdata
CodeIgniter поддерживает "flashdata" — данные сессии, которые доступны только для следующего запроса, и затем автоматически удаляются.
Это может быть полезно для отображения статусных сообщений.

http://cidocs.ru/210/libraries/sessions.html

Спустя 43 секунды (24.08.2012 - 09:56) Invis1ble написал(а):
Цитата
можно и в сессии хранить результат, а после вывода - очищать сразу

да. Как раз так и делаю в проекте, над которым работаю в данное время. Т.н. Flash Messages

Цитата
Для этого в CI есть такая штука, как flashdata

О. А я к кохане модуль отдельный написал для этого.

Спустя 3 минуты, 22 секунды (24.08.2012 - 10:00) ваыв написал(а):
zvezda_t,
1) header('location:site.ru');
2) Каптча;
3) Проверка на существование записи;

Спустя 44 минуты, 18 секунд (24.08.2012 - 10:44) sergeiss написал(а):
Цитата (ваыв @ 24.08.2012 - 12:00)
1) header('location:site.ru');

Не успел написать об этом smile.gif

Только еще лучше будет header( "Refresh......"); с указанием времени на показ страницы. На мой взгляд, самое лучшее решение, потому что пофиг на сессии и куки, не зависит от них.

Спустя 4 минуты, 22 секунды (24.08.2012 - 10:48) johniek_comp написал(а):
Invis1ble
гонишь
$this->request->query('get');


?get=111

Спустя 10 минут, 37 секунд (24.08.2012 - 10:59) Invis1ble написал(а):
johniek_comp
Цитата
гонишь

Где это интересно я гоню? Обоснуй.

Спустя 6 минут, 5 секунд (24.08.2012 - 11:05) zvezda_t написал(а):
а чем
header( "Refresh......");
отличается от
header( "location......"); ? rolleyes.gif


sergeiss, я правильно тебя поняла:
после сохранения делаем редирект на страницу успеха, задержка, потом возвращаемся на страницу формы? Или нет?

Спустя 23 минуты, 8 секунд (24.08.2012 - 11:28) pak написал(а):
header('Refresh: 3; URL=http://phpforum.ru');
// перенаправит через 3 секунды

Спустя 6 минут, 30 секунд (24.08.2012 - 11:35) sergeiss написал(а):
Цитата (zvezda_t @ 24.08.2012 - 13:05)
а чем
header( "Refresh......");
отличается от
header( "location......"); ?

Разница в одном: рефреш делает переадресацию с задержкой в течение указанного времени, а локейшн - сразу же.

Алгоритм такой (хотя об этом говОрено на форуме уже много раз!):
1. Переходим на страницу обработки полученных в форме данных, лучше всего, если это та же страница. Лучше - потому что если ошибки есть в исходных данных, то можно заново выдать эту же форму с уже введенными данными и предложить их скорректировать. И лучше, если будут ПОСТ-данные отправлены.
2. Если данные верны, то сохраняем их (файлы, БД - куда угодно). Затем делаем header( "Refresh..."), в процессе показываем инфо о том, что данные приняты. И в этом рефреше указываем ту страницу, куда надо попасть в итоге. Тут можно указать GET-данные для правильности перехода.

Если ты хочешь посмотреть, как это работает, то обрати внимание на то, как наш форум работает после нажатия кнопки "Отправить" smile.gif Именно так и работает, как я описал чуть выше.

Спустя 3 минуты, 46 секунд (24.08.2012 - 11:39) Invis1ble написал(а):
у варианта с refresh есть один "фатальный" недостаток - это время, после которого редирект идет. Т.е. если юзер в момент перед редиректом отвернется или покурить пойдет - он не увидит волшебную надпись "данные сохранены" )

Спустя 4 минуты, 43 секунды (24.08.2012 - 11:43) zvezda_t написал(а):
sergeiss, спасибо, что еще раз затронул эту тему! smile.gif
Один момент, только не поняла:
Цитата
в процессе показываем инфо о том, что данные приняты.

это как - в процессе?

Спустя 5 минут, 32 секунды (24.08.2012 - 11:49) Invis1ble написал(а):
Цитата
это как - в процессе?

простейший пример
header('Refresh: 3; URL=http://example.com');
echo 'Данные сохранены';

Спустя 4 минуты, 45 секунд (24.08.2012 - 11:54) Игорь_Vasinsky написал(а):
аяксом, аяксом выводить результат в div c кнопочкой "x" rolleyes.gif

Спустя 14 минут, 16 секунд (24.08.2012 - 12:08) zvezda_t написал(а):
Invis1ble
попробовала) прикольно) Спасибо!!! smile.gif


Спустя 29 минут, 6 секунд (24.08.2012 - 12:37) sergeiss написал(а):
Цитата (Invis1ble @ 24.08.2012 - 13:49)
простейший пример
header('Refresh: 3; URL=http://example.com');
echo 'Данные сохранены';

Добавлю только, что еще надо обязательно exit(); сделать smile.gif Иначе возможен вариант, что скрипт еще что-то выводит на страницу в течение того времени, что предназначено для переадресации.

Цитата (Invis1ble @ 24.08.2012 - 13:39)
если юзер в момент перед редиректом отвернется или покурить пойдет - он не увидит волшебную надпись "данные сохранены"

Значит, ему не повезло... Клювом клац-клац нихт! smile.gif Опять же, можно сделать длительное время на переадресацию + разместить ссылку типа "Всё пучкОм, щас мы вас переадресуем, но если не хотите ждать, то жмякните тут...."

Спустя 18 минут, 25 секунд (24.08.2012 - 12:55) zvezda_t написал(а):
Placido, а ничего что в CodeIgniter данные сессии через куки организованы?
Если куки будут отключены - проблем у меня с сохранением не будет?

Спустя 39 минут, 7 секунд (24.08.2012 - 13:34) johniek_comp написал(а):
zvezda_t
сессии вообще на куках построены, и CI тут ни причем

Спустя 4 минуты, 40 секунд (24.08.2012 - 13:39) zvezda_t написал(а):
johniek_comp, на сколько я понимаю обычные $_SESSION[] храняться на сервере, а в CI - используются куки хранящиеся у клиента.

Спустя 11 минут, 41 секунда (24.08.2012 - 13:51) killer8080 написал(а):
Цитата (sergeiss @ 24.08.2012 - 12:35)
Разница в одном: рефреш делает переадресацию с задержкой в течение указанного времени, а локейшн - сразу же.

Что помешает юзеру во время ожидания рефреша нажать F5?

Спустя 21 минута, 57 секунд (24.08.2012 - 14:13) sergeiss написал(а):
Цитата (killer8080 @ 24.08.2012 - 15:51)
Что помешает юзеру во время ожидания рефреша нажать F5?

Психология помешает. Потому что одно дело, когда он видит готовую страничку с данными, а другое дело, когда только сообщение о том, что данные приняты и что его просят подождать чуть-чуть либо прямо предлагают нажать уже имеющуюся на этой странице ссылку. Мало кто будет нажимать Ф5 в такой ситуации.

Вот я сейчас нажму "Отправить" и увижу небольшой прямоугольник в центре экрана, с подобной надписью. При этом не появляется желания нажать Ф5.

PS. Можно и куки использовать дополнительно. Но куки могут не сработать, если отключены. А рефреш сработает всегда.

Спустя 4 минуты, 14 секунд (24.08.2012 - 14:17) killer8080 написал(а):
Цитата (sergeiss @ 24.08.2012 - 15:13)
Психология помешает.

Не самое лучшее решение, надятся что у юзера мышление такое же как разработчика wink.gif Вероятность остаётся. Здесь я предлагал способ защиты от F5, а попутно и CSRF

Спустя 5 минут, 33 секунды (24.08.2012 - 14:22) zvezda_t написал(а):
а что правда $_SESSION[] это и есть куки? У меня что то мозг взрывается...

Спустя 2 минуты, 43 секунды (24.08.2012 - 14:25) killer8080 написал(а):
zvezda_t
стандартный механизм сессий использует куки для передачи идентификатора сессии (хотя это не единственный способ).

Спустя 8 часов, 24 минуты, 1 секунда (24.08.2012 - 22:49) Invis1ble написал(а):
johniek_comp
Ну так что там насчет моего гона? Или лишь бы ляпнуть?

Спустя 7 часов, 43 минуты, 42 секунды (25.08.2012 - 06:33) Guest написал(а):
Когда это было, чтобы с отключенными куками сессии не работали?

Спустя 22 минуты, 32 секунды (25.08.2012 - 06:55) Invis1ble написал(а):
всегда. $_GET['PHPSESSID'] например


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.