Длинный УРЛ

Poltoraki

Новичок
Длинный УРЛ

Организовивается постраничный вывод и все, собственно работатает. Проблема в том, что запрос может иметь до 42 параметров, которые есть числа до 14 символов длиной. Получяется дико длинный УРЛ. RFC2616 говорит, что:
The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs. A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle (see section 10.4.15).
Но тут же добавляет: Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations might not properly support these lengths.
Кто-нибудь с такой проблемой сталкивался?
Спасибо.
 

Dreammaker

***=Ф=***
Нельзя никак сделать, чтобы данные передавались постом?
В этом случае это как-будто бы логичнее будет... А уже данные о номере страницы или метод=гет, или как хидден.

а вообще лучше задачу объясниь может, есть какие и другие способы :)
 

uninside

Новичок
а, стоп. URI или URL?

-~{}~ 19.12.05 18:51:

Автор оригинала: Dreammaker
А уже данные о номере страницы или метод=гет, или как хидден.
это как? или POST или GET, что за hidden?
вообще-то смысмл создавать гет с длинными параметрами, можно ведь передать как
<form action="/path/?sid=494954909430949043" method="post">
и отправить все по-человечески.
хотя, может человек поисковик делает. нужна проблема.
 

Dreammaker

***=Ф=***
uninside,
хидден я имел ввиду input type="hidden", а метод естественно в этом случае post.
насчёт первого немного не так мысль выразил... Имелось ввиду передавать данные о странице в action.
>хотя, может человек поисковик делает. нужна проблема.
Проблема не нужна, нужно решение :))
 

Poltoraki

Новичок
Нет, тут не поисковик. Научная база данных с результатами измерений, на входе юзер задает какие парметры, в какое врямя и где измеренные, он хочет получить. На выходе таблица с данными.
 

uninside

Новичок
а, ну так тем более, зачем все отправлять через GET.
гет используется, если у вас запросы статические (то есть имеют статические данные), а если вы, допустим, вводите какие-то данные, что актуальны лишь на данный момент, то естественно ПОСТ, тем более, что их много.
 

Anatolyi

Новичок
Я так понял тебя смущает то, что ты сначала обрабатываешь полученные из формы данные, а потом их все присваешь с адресу ссылки. В итоге у тебя оно ругается на длину?
Если так, тогда можешь попробовать все в массив сессии забивать...

Или я недопонял чего тебе надо...
 

Poltoraki

Новичок
uninside, я же говорю - организовывается постраничный вывод. При первом проходе запроса и формировании первой страницы я могу использовать ПОСТ, а как только я хочу сформировать следующие страницы, мне нужен ГЕТ. Я просто не знаю другого способа организовать постраничный вывод.

-~{}~ 19.12.05 20:11:

Anatolyi вот и мне похоже, что через сессии прийдется.
 

Dreammaker

***=Ф=***
Как вариант.
Сделай форму
в ней в скрытых полях все данные, которые передаёшь сейчас через урл. А затем переходы между страницами сабмитами или же на ссылки повесить что-то типа onClick="javascript: ourform.submit()" .
 

uninside

Новичок
так правильно говорили ж, делаешь
Код:
<form action="?sid=3455" method="post">
<input type="hidden" name="arg1" value="..."/>
<input type="hidden" name="arg2" value="..."/>
...
и так далее. то есть все данные "всегда ношу с собой".
---
можно, конечно, и через сессии, но первый уже давно отлизанный способ.
 

Poltoraki

Новичок
Автор оригинала: Dreammaker
Как вариант.
Сделай форму
в ней в скрытых полях все данные, которые передаёшь сейчас через урл.
Это понял.

А затем переходы между страницами сабмитами
Это не понял

или же на ссылки повесить что-то типа onClick="javascript: ourform.submit()" .
Это тоже понял.
 

Dreammaker

***=Ф=***
>А затем переходы между страницами сабмитами

Это в смысле, если есть только два перехода (на одну вперёд - на одну назад) то можно сделать два input type=submit и в зависимости от того какой сабмит нажат, то соотвественно своя логика срабатывает (куда переходить).

если же переходы задаются на несколько страниц сразу (1 2 3 4 5 6 > >>) , то нужно подумать над логикой как номер страницы передать в форму.. как вариант добавлять onClick="java script: ourform.submit(); ourform.page=2". что-то типа этого.
 

uninside

Новичок
угу, или же формировать
<select name="page"><option value="##">##</option></select>
что будет гораздо проще

-~{}~ 19.12.05 19:31:

ну ## это номер страницы
 

Dreammaker

***=Ф=***
uninside, на который повесить джаваскрипт для автоматического перехода на нужную страницу при выборе опшн.
 

asm

Пофигист
Poltoraki
Апач ругается только ~2400 символов в адресе :)
Но вообще правильнее параметры отдавать POST-ом потом хранить их в сессии а в адресе таскать только ?page=N
 

uninside

Новичок
Dreammaker, и нужно написать что-то типа
<noscript><input type="submit"/></noscript>
для совместимости
 

Alexandre

PHPПенсионер
В соответствии с RFC2616 URL не может превышать 2К
чтоб отвязаться от дико длинного урла, используй либо сессии
либо POST
PHP:
<from name="formName" >
     <input type="hidden" name=page value=0>
     <input type="hidden" name=parm1 value=111>
     <input type="hidden" name=parm2 value=222>

</form>
<a href="#"  onClick=f('1')>1</a><a href="#"  onClick=f('2')>2</a>

<script>
function f(n){
     formName.pageNumber.value=n;
     formName.submit();
}
</script>
Пример приведен без кросброурерности...на уровне идей
 
Сверху