HTTP ( Location & POST ) - как бы так совместить

Статус
В этой теме нельзя размещать новые ответы.

col

Guest
HTTP ( Location & POST ) - как бы так совместить

Вопрос мне и самому показался немного не логичным, но логичного ответа я и не жду, так как его в принципе и быть не могет.
Мне нужен КРАССИВЫЙ выход из положения.

есть два php скрипта
один отвечает за формирование и вывод интерфейса, форм в частности которые ссылаются на второй скрипт.
второй отвечает за обработку тех данных которые приходят с первого И .... отсылает броузер клиента по Location: $HTTP_REFERER на первый скрипт. И все бы гладко если бы иногда не приходилось при пересылке передовать доп-параметры первому скрипту, а так как $HTTP_REFERER не всегда приходит с параметром, то и параметры приклеивать простой конкатенацией неполучается из-за отсутствия "?".
Вот я и подумал неплохобы бы было при перенаправлении браузера клиента, передовать параметров POST'ом но как выяснилось: POST это запрос, а Location - ответ.
И выходит, что остаётся тока одЫн способ передачи параметров при помощи ответа Location это анализ и создания url самому, прежде чем отдать его header().

Но на мой взгляд это как то криво каждый раз проверять есть ли в $HTTP_REFERER "?" и т.д

У кого есть какие соображения по этому поводу.
 

Smart

Guest
смотря конечно какие данные. если идентификаторы и т.п. , то чо мешает передать их гетом ? header('Location: '.$_SERVER['HTTP_REFERER'].'?список параметор');

как второй вариант, можно эти "доп-параметры" записывать в сессию.
 

Demiurg

Guest
col
расскажи, зачем тебе такие сложные отнашения между скриптами .
 

col

Guest
хе хе не успел..
думал пока народ не добрался сам отвечу
но не тут то было
Так от Demiurg уже получил ...
странно хде же Tony ходит щас еще и этот мне подвалит нагоняя .. :)

Во первых.
Косательно
....... это как то криво каждый раз проверять есть ли в $HTTP_REFERER "?" и т.д ........
Попробовал не так криво как козалось так, что вполне устроило. Вот полюбуйтесь

PHP:
$add_data="";
if(!strstr($HTTP_REFERER,"?"))	$add_data="?";
$add_data="&page_num=".$id_page[0];
header("Location: $HTTP_REFERER".$add_data);
Но вопрос о совместном использовании Location и POST мне еще актуален

2Alien
Немного нето так как я сам хотел POST формировать.

2Smart
HTTP_REFERER может быть уже сам с параметрами и следовательно с "?"

2Demiurg
А в чем заключается сложность ?
В разделении труда между скриптами или я чегото не понял?
Хотелось бы узнать как реализовать это по не сложному.
Всё время страдаю избытком сложных решений. :(
Очень бы хотел научиться программировать просто и несложно.
Вот как вы.
 

гоша

Guest
не надо ориентироваться на реферер.
нет гарантии, что тебе вообще его пришлют.

interface.php:

<form action=process.php method=post>
<input type=hidden name=return_to value=$_SERVER[PHP_SELF]

process.php:

header("Location: ".$_SERVER[HTTP_HOST].$_POST[return_to]."?".параметры, если нужны

типа того
 

Alien

Новичок
Нда уж. Ищем сложные пути там где их нет.

Делай один скрипт!
Который умеет
1 - рисовать пустые формы
2 - рисовать формы с параметрами
3 - обрабатывать формы

И не нужно бесмысленных редиректов.
 

Demiurg

Guest
col
ты сказал Б, но не сказал А. Никто не понимает, что задачи ты решаешь. Есть очень стойкое убеждение, что ты не правильно выбрал путь решения. "Всё время страдаю избытком сложных решений." только усиливают это убеждение.
 

col

Guest
2гоша
хм.. способ конэчно интерессный
но я еще раз повторяю чел может прийти с url который с параметрами и вернуть его нужно будет но тоже url но иногда добавляя доп параметр.
а на счет рефера то опера и ie их возвращает.

2Demiurg
Есть стойкое убеждение, что это обычный, присущий тебе сарказм, если нет, то я могу описать решаемую задачу еще раз поподробнее. Но боюсь это никому не интересно и большой роли не сыграет, так как суть я изложил.

2Alien
я немогу и нехочу делать один скрипт.
Во первых:
скриптов которые рисуют формы много и комбинации этих форм в этих скриптах разные.
есть формы a, b, с, d и есть скрипты 1(a,b), 2(a,c), 3(a,d), 4(b,c), 5(b,d), 6(c,d), 7(a,b,с), 7(a,b,d) и т.д. и есть один скрипт в котором описаны все действия соответствующие (а,б,с,d). Проект постоянно дописывается и скриптов с различным набором форм может появляться всё больше. Такая если её можно назвать модульная реализация меня устраивает.
А так как на этот умный скрипт могут зайти с разных форм-скриптов я и должен знать куда их потом отослать но при этом хотелось бы еще и свои какие-нибудь данные отсылать POST'om.

PS
Это всё хорошо и всем спасибо, но никто еще мне толком и не ответел можно ли при пересылки браузера при помощи Location заставить его чтобы он при создания запроса по переданному ему url добавил еще и нейкие (мои) post данные.
 

Alien

Новичок
Да пойми ты простую вещь - что у GET есть принципиальное ограничение - НЕЛЬЗЯ передавать много данных. Длина URL ограничена.

Тебе хочется поймать большой и вкусный баг в реальной (а не тестовой) работе скрипта? Вперед, впуть.
 

гоша

Guest
col

> но я еще раз повторяю чел может прийти с url который с параметрами

поместить REQUEST_URI вместо PHP_SELF на форму.
в обработчке разбирать ([m]parse_url[/m] [m]parse_str[/m])

> а на счет рефера то опера и ie их возвращает.

веб-программист не должен полагаться на наличие необязательных полей в заголовке
 

col

Guest
2 ГОША
спасибо я подумаю решение достойное
но немного с параноидальным оттенком (это на счет рефера)

2 Alien
ну наконец то
хоть кто то попытался проникнуться моей проблемой
именно, именно из этого я и спрашиваю как POST'om передовать.

на данный момент проблему решил так GET'om:
PHP:
//----- функция возвращает url с аргументами + доп аргументы
//----- сформированный из переданного url $url и массива параметров $arg
//----- в котором key название аргумента
//----- а значение эл. массива его значение

function comp_url ( $url, $arg="" ){

  $arr_url=parse_url ($url);
  parse_str($arr_url['query'], $output);

  $output=array_merge ($output, $arg);

  $add_data="";
  $and=0;

  foreach ( $output as $key => $value){
   
    if($and==0){
      $add_data.=$key."=".$value;
      $and=1;
    }
    else $add_data.="&".$key."=".$value;
  }

  $url=$arr_url['scheme']."://".$arr_url['host'].$arr_url['path']."?".$add_data;

  return $url;
}


$add_data['page_num']=$id_page[0];

$url=comp_url($_SERVER['HTTP_REFERER'],@$add_data);
header("Location: ".$url);
Есть еще мысль при помощи сесси.
Создавать в сессии массив с именем ввиде рандомного id и туда пихать переменные, ключи -> имена , значения -> параметры. А сам id передовать GET'om.
Что скажите.
Тока, чур сильно не пинать. :)
 

Фанат

oncle terrible
Команда форума
Alien
при чем здесь ограничения гета?
он не форму передает гетом, а вызывает обычный скрипт с обычным ури.
Не путай человека, у него и так чердак съехал.

col
И выходит, что остаётся тока одЫн способ передачи параметров при помощи ответа Location это анализ и создания url самому, прежде чем отдать его header().
Но на мой взгляд это как то криво
это криво только потому, что твой взгляд кривой.
Это совершенно нормальный способ.
Делай, как делаешь и не морочь людям голову.
 

col

Guest
2Фанат
Я не знаю тебя лично, но прием перехода на личность великого ума тебе не приписывает.
На счет Aliena, вот ты точно человека не путай он всё верно понял, а вот ты еще раз перечитай посты.
И не лезь с дурными советами если не разобрался.
GET нормальный способ если данных мало, а как насчет масивов да еще и с русскими данными которые кодировать надо.
Ты лучше действительно жуй ...
 

col

Guest
2iron logic
она не регулируется
её макс длинна 255 символов
 

Фанат

oncle terrible
Команда форума
если у тебя скрипт вызывается такой строкой
адресной , что она может не влезть в ограничение GET, то надо пересматривать подход к структуре скрипта. А не менять нормальный подход на кривой.
нормальному скрипту не надо передавать никакие массивы.

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