Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / зачем повторно засылать данные / 6 сообщений из 6, страница 1 из 1
28.12.2014, 14:44
    #38844786
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
зачем повторно засылать данные
на странице имеется форма
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
<form method='POST' id='searchform' action='http://www.weblaboratory.info/'>
				<label for='rublic'>I'm looking for: </label>
				<select name='rublic' class='testselect2' id='rublic'>
					<option value='0'>All</option>
					<option value='1'  selected>Advertiser</option>
					<option value='2' >Media</option></select> &nbsp; <label  id='l_category' for='category'>Vertical:</label><select id='category' name='category' ><option value='0'>All</option><option value = '1'  selected >Forex</option><option value = '2' >Binary</option><option value = '3' >Auto</option><option value = '4' >Beauty</option><option value = '5' >Dating</option>select>
<input type='submit' id='search' value='Search'>
</form>	



при сабмите данные попадают в класс(вот его конструктор)

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
 function __construct() 
	    {
			try
			{
				if(isset($_POST["rublic"])) 
				{
					$this->_type = $_POST["rublic"];
					setcookie ("type_cookie", $_POST["rublic"], time() + 3600);
					setcookie ("page_cookie", 1, time() + 3600);
				}
				else if(isset($_COOKIE["type_cookie"]))
				{
					$this->_type = $_COOKIE["type_cookie"];
				}
				else { $this->_type = 0; }
			
				if(isset($_POST["category"]))
				{
					$this->_category = $_POST["category"];
					setcookie ("category_cookie", $_POST["category"], time() + 3600);
					setcookie ("page_cookie", 1, time() + 3600);
				}
				else if(isset($_COOKIE["category_cookie"]))
				{
					$this->_category = $_COOKIE["category_cookie"];
				}
				else { $this->_category = 0; }	
				 echo"1)type = ".$_COOKIE["type_cookie"]." category = ".$_COOKIE["category_cookie"];
			}
			catch (Exception $e)  {  }
		}



Всё бы пормально но после первого сабмита, при последующих сабмитах или обновлении страницы появляется табличка что необходимо заново отослаь дынные что я раньше засабмитил и что надо это разрещить!

почему так происходит и как исправить?
...
Рейтинг: 0 / 0
28.12.2014, 16:55
    #38844863
kunaksergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
зачем повторно засылать данные
Areostar,

Перезапрашивай форму методом Get. http://forum.php.su/topic.php?forum=71&topic=15634
...
Рейтинг: 0 / 0
28.12.2014, 20:35
    #38845002
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
зачем повторно засылать данные
И В самом деле пришлось на GET переписатью Работает на ура но с POST былобы аккуратнее без этой лапши в адресной строке.

А в чем тут проблема с GET я чтото не понял!??
...
Рейтинг: 0 / 0
28.12.2014, 21:16
    #38845014
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
зачем повторно засылать данные
Areostar, у методов GET и POST разная семантика. GET предназначен для операций не имеюших побочных эффектов. То есть повторное обращение к URL с командной GET является безопасной и допустимой операцией. Собственно именно GET мы используем большую часть времени при серфинге в сети. Повторное обращение к URL с командной POST может иметь нежелательный побочный эффект для пользователя. Именно поэтому все браузеры просят подтвердить повторную отправку данных для страниц запрошенных через POST. Пример операций с побочным эффектом - добавление товара в корзину, upload файла, перечисление денег. Кроме семантики есть и другие соображения, а именно размер передаваемых данных и их видимость. Для GET мы ограничены примерно 2 Кб на весь url включая параметры. Для POST ограничений нет.

Ты правильно поступил заменив POST на GET т.к. POST тут совершенно не нужен. Но если бы от POST нельзя было бы отказаться, то стандартное решение это редирект после обработки POST запроса.
...
Рейтинг: 0 / 0
29.12.2014, 07:35
    #38845155
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
зачем повторно засылать данные
bazileAreostar, у методов GET и POST разная семантика. GET предназначен для операций не имеюших побочных эффектов. То есть повторное обращение к URL с командной GET является безопасной и допустимой операцией. Собственно именно GET мы используем большую часть времени при серфинге в сети. Повторное обращение к URL с командной POST может иметь нежелательный побочный эффект для пользователя. Именно поэтому все браузеры просят подтвердить повторную отправку данных для страниц запрошенных через POST. Пример операций с побочным эффектом - добавление товара в корзину, upload файла, перечисление денег. Кроме семантики есть и другие соображения, а именно размер передаваемых данных и их видимость. Для GET мы ограничены примерно 2 Кб на весь url включая параметры. Для POST ограничений нет.

Ты правильно поступил заменив POST на GET т.к. POST тут совершенно не нужен. Но если бы от POST нельзя было бы отказаться, то стандартное решение это редирект после обработки POST запроса.

Понялю Но чтото про такое раньше не читал
...
Рейтинг: 0 / 0
02.01.2015, 18:19
    #38847650
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
зачем повторно засылать данные
А еще GET может вообще не обратиться к серверу. А взяить данные из кєша.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / зачем повторно засылать данные / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]