Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.10.2008, 10:50
Аватар для Phoenix
Профессор
Отправить личное сообщение для Phoenix Посмотреть профиль Найти все сообщения от Phoenix
 
Регистрация: 24.09.2007
Сообщений: 165

проблемы с Post
Доброго времени суток.

Раздел не нашел... Решил написать сюда
Проблема достаточно примитивная... Но облазил весь интернет, однозначного ответа не нашел.

Суть проблемы:
У меня есть форма, данные отправляются методом Post. (Action - эта же страница). Отправляем 1 раз данные, они нормально обрабатываются. Но если обновить страницу, то будут отправлены повторные данные...
Раньше пользовался проверкой на нажатие кнопки:
if (isset($but)){
....
}

<input type='submit' name='but' value='Добавить'


теперь вообще игнорируется эта строчка...

может кто уже сталкивался с этой проблемой?
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
Ответить с цитированием
  #2 (permalink)  
Старый 28.10.2008, 13:36
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Переменная $but будет всегда определена, данные-то те же отправляются.

Я в таких случаях выношу обработку post-запросов на отдельный урл, после чего серверным редиректом возвращаю обратно. Тогда обновление страницы не будет заново отправлять запрос.
Ответить с цитированием
  #3 (permalink)  
Старый 28.10.2008, 17:33
Аватар для Phoenix
Профессор
Отправить личное сообщение для Phoenix Посмотреть профиль Найти все сообщения от Phoenix
 
Регистрация: 24.09.2007
Сообщений: 165

Сообщение от Kolyaj Посмотреть сообщение
Переменная $but будет всегда определена, данные-то те же отправляются.

Я в таких случаях выношу обработку post-запросов на отдельный урл, после чего серверным редиректом возвращаю обратно. Тогда обновление страницы не будет заново отправлять запрос.
мне не удобно использовать отдельный URL. у меня движок пишется под телефон... и чем меньше перезагрузок тем лучше. да и скрипт уже написан под 1 файл..
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
Ответить с цитированием
  #4 (permalink)  
Старый 28.10.2008, 17:34
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Дык там не будет перезагрузок, там будет редирект, можно и на этот же файл редиректнуть, главное, чтобы post в get превратился.
Ответить с цитированием
  #5 (permalink)  
Старый 30.10.2008, 18:52
Аспирант
Отправить личное сообщение для EugenyK Посмотреть профиль Найти все сообщения от EugenyK
 
Регистрация: 17.03.2008
Сообщений: 64

Kolyaj, а каким образом происходит подобное превращение? С примером, по возможности.

И ещё непонятка, возникающая после такого редиректа: если до header('Location: ...') были выставлены кукисы через setcookie(), то после редиректа соответствующие их значения не попадают в $_COOKIE (на denwer'ре такое происходит по крайней мере).
Ответить с цитированием
  #6 (permalink)  
Старый 30.10.2008, 18:56
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от EugenyK
а каким образом происходит подобное превращение?
А в чем непонятка? Браузер получает указание перейти на другой урл и переходит на него уже гетом.

Сообщение от EugenyK
то после редиректа соответствующие их значения не попадают в $_COOKIE
Не знаю, честно говоря, не пробовал. Теоретически куки должны выставлятся. А браузер не ИЕ случайно?
Ответить с цитированием
  #7 (permalink)  
Старый 30.10.2008, 19:28
Аспирант
Отправить личное сообщение для EugenyK Посмотреть профиль Найти все сообщения от EugenyK
 
Регистрация: 17.03.2008
Сообщений: 64

>> А в чем непонятка? Браузер получает указание перейти на другой урл и переходит на него уже гетом.

Т.е. данные запроса целиком сохраняется что ли?
И если браузер отсылал серверу POST-данные, то поучив от сервера выставленный заголовок редиректа он то же самое отправит GET-ом?

>> А браузер не ИЕ случайно?

FF3.0 как ни странно.
В IE6.0 и Opera 9.61 всё замечательно.

Моя версия такая: получив директиву перенаправления в заголовке, FF не передаёт установленные кукисы.

Добавлено: через раз или пару раз работает. То возвращает на страницу авторизации, то нормально перенаправляет в место назначения.

Последний раз редактировалось EugenyK, 30.10.2008 в 19:38. Причина: добавление
Ответить с цитированием
  #8 (permalink)  
Старый 30.10.2008, 20:03
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от EugenyK
И если браузер отсылал серверу POST-данные, то поучив от сервера выставленный заголовок редиректа он то же самое отправит GET-ом?
Нужно обработать post-запрос, все сделать и выдать браузеру редирект на страницу, на которой просто показать результат работы.
Ответить с цитированием
  #9 (permalink)  
Старый 30.10.2008, 23:26
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

EugenyK,
Вы неправильно поняли. Запрос POST идет на страницу, которая выдает заголовок о смене location. Смена адреса повлечет GET запрос, который сделает ваш браузер, получив этот заголовок.

С cookies совершенно непонятная проблема, никогда с таким не сталкивался. Браузер должен отправлять куки с каждым запросом, в том числе и при смене location. Посмотрите возвращает ли сервер HTTP статус "302", и адрес в location указан абсолютно или относительно?
Ответить с цитированием
  #10 (permalink)  
Старый 31.10.2008, 01:02
Аспирант
Отправить личное сообщение для EugenyK Посмотреть профиль Найти все сообщения от EugenyK
 
Регистрация: 17.03.2008
Сообщений: 64

Андрей Параничев, спасибо, я понимаю, как это работает. Просто был удивлён, что вдруг у перенаправления через серверный header() есть какое-то особое свойство. Вариант перенаправлять на страницу, специально печатающуюся для показа результатов меня не устраивает, да вобщем-то в ней и не состоит задача.

А задача у меня состоит в том, чтобы не проверяя это на внешнем сервере, разобраться, почему FF на денвере через раз-другой подглючивает. Либо подглючивает денвер, получая запрос от FF.

По поводу заголовков:
На запрос POST /admin/?act=login HTTP/1.1, в котором передаётся строка login=admin&passwd=password, сервер возвращает 302, далее сообщение, что оба кукиса отправлены, потом Cach-Control: max-age=15 (это я в конфиге apach настраивал форсированное обнвление кэша каждые 15 сек), позже возвращает заголовок Location: http://site.test/admin/ (полный путь, собственно который я и прописывал). При этом ИНОГДА идёт следующая плеяда заголовков, а иногда она не идёт (т.е. браузер скушал заголовок Location и как бы "замолчал")

Что интересно, иногда срабатывает переход на страницу (доступную только когда существуют нужные кукисы), хотя кукисы насильно удалены из браузера.

Очень часто я нажимаю на ссылку http://site.test/admin/?act=logout, которая по сути очищает кукисы и выводит страницу приветствия, но при этом НИКАКИЕ заголовки не передаются и флажки на панели о том что нет CSS и JavaScript-ошибок отсутствуют (серые кружки)
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery Ajax Rater Plugin и массив POST - Нужна помощь TROODON jQuery 12 30.12.2009 22:44
Не вызывается callback у post в IE maxtor jQuery 24 25.01.2009 13:57
Проблемы с меню на JS SeeD Общие вопросы Javascript 5 21.11.2008 19:44
XMLHTTPRequest передача имя через POST dds AJAX и COMET 0 14.08.2008 14:44
Проблемы с методом POST demoniqus Общие вопросы Javascript 16 25.07.2008 18:09