Jump to content
  • 0

Замена параметров GET из form


annie
 Share

Question

Здравствуйте!

Имеется страница, в адресе которой несколько параметров GET. При обработке формы, расположенной на странице, необходимо менять один из этих параметров и/или дописывать новый. Подскажите, как реализовывать? Делать обработку на php, формировать адрес, потом на него переадресацию?

Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

Если они были сгенерированы этой же формой - да. Если они были изначально, то к адресу страницы добавится еще одни ? и новые параметры. В том числе с теми же именами, что уже были.

Link to comment
Share on other sites

  • 0

Если адрес страницы уже содержит адрес какого-нибудь GET-запроса, то простое дописывание приведет к адресу, содержащему два знака вопроса (вида '?имя1=значение1?имя2=значение2') и потому некорректному. Я с этим столкнулась на практике, единственное, что попалось по теме - Обработка GET-запроса в строке URL средствами PHP. Теперь интересуюсь, можно ли как-то это провернуть, помимо метода, описанного в начале темы.

Link to comment
Share on other sites

  • 0

вы пример пробовали использовать который я писал, ни какие вторые '?' не дописываются, если в url уже присутствует какой-нибудь из параметров get, то он просто меняется, а не дописывается. А если в get не было параметра передаваемого формой он добавится. у меня при всем желании не получится в запросе два '?', даже не представляю как вы извращаетесь над формой. Показали бы хоть ваш код...

а статья "Обработка GET-запроса в строке URL средствами PHP" - это просто изврат, в PHP работа с GET элементарно ведется через ассоциативный массив $_GET легко заменяется любой элемент без поиска, если надо удаляется и добавляется, если надо сортируется и парсирить для этого URL не нужно, он уже весь разобран.

Edited by Switch74
Link to comment
Share on other sites

  • 0

Пример :)

Прошу прощения, что вокруг не совсем пустота.

Первая станица - только ссылка с параметром:

<a href="formtest&par=1">Ссылка на страницу с формой</a>

На второй - форма:


<form>
<input name="parametr1">
<input name="parametr2">
<input type="submit" value="Сменить GET">
</form>

Попробуйте. Два вопросительных знака и все вышеописанное.

Забыла добавить - имя страницы идет через ?go=, переписывается через mod_rewrite. То есть первый вопросительный знак там)

Edited by annie
Link to comment
Share on other sites

  • 0

вы уверены, что "formtest&par=1" - это верный адрес, я понимаю если бы было что-то вроде "?go=formtest&par=1"

добавлять "?go=" через mod_rewrite не вижу смысла.

Теперь хотя бы ясно что за изврат у вас. Могу лишь посоветовать в вашем случае использовать для обработки формы js, php с переадресацией не стоит.


<script>
function SubmitForm(form)
{
//создаем ассациативный массив аналогичный $_GET в PHP
var new_get = '';
var get = window.location.search.substr(1);
var gets = get.split('&');
var get_ = {};
var forms = form.childNodes;
for(n in gets)
{
get = gets[n].split('=');
get_[get[0]] = get[1];
}
//делаем обход формы, заменяем параметры в get_ на параметры из формы и добавляем новые
for(n in forms)
{
if (forms[n].nodeType == 1)
{
if(forms[n].tagName == 'INPUT' && forms[n].name.length)
{
get_[forms[n].name] = forms[n].value;
}
}
}
//формируем новый гет запрос
new_get += get_['do'];
for(n in get_)
{
if(n != 'do')
new_get += '&'+n+'='+get_[n];
}
get = new_get;
window.location.href = get;
return false;
}
</script>
<form id="forms">
<input name="par1" value="<?PHP if(isset($_GET['par1'])){echo $_GET['par1'];}?>">
<input name="par2" value="<?PHP if(isset($_GET['par2'])){echo $_GET['par2'];}?>">
<input type="submit" value="GET" onclick="SubmitForm(this.form);return false;">
</form>

это только тестовый пример как можно реализовать, не факт, что он работает как тебе нужно, но доработать до нужного можно

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

и кстати, я обычно стараюсь от гетов избавляться

Edited by Switch74
Link to comment
Share on other sites

  • 0

Ссылки вида ".ru?go=formtest&par=1" переписываются как ".ru/formtest&par=1", чем плоха затея, я не поняла...

Спасибо большое за помощь! Скрипт посмотрю.

Избавляться от гетов? У меня каталог весь на них - Пример. Даже не представляю, как это иначе реализовывать... Сейчас пытаюсь фильтр по id марки прилепить, с описываемой проблемой столкнулась.

Link to comment
Share on other sites

  • 0

я не знаю как у вас ассоциация проходит ".ru/formtest&par=1" и get? об этом наверно только php знает.

по сути у вас в адресе не передан par как get.

в моей реализации ваш адрес выглядел бы ".ru/formtest/?par=1", и не нужно было бы его переписывать, и ни каких проблем с стандартной передачей данных формы.

Вы на какой-то CMS делаете сайт или самописный движок?

Link to comment
Share on other sites

  • 0

Самописный, под базу, что в системе учета в фирме используется. Система учета тоже самописная, не мною.

по сути у вас в адресе не передан par как get.

Поясните пожалуйста, почему? Или ткните, в какую сторону почитать )

Все равно пришлось бы get из формы переписывать, тот же номер страницы. Изначально можно находиться n-ной, &skip=30, при добавлении фильтра должно быть &skip=0.

Как иначе реализовать - я правда не понимаю, подскажите, если можно )

Link to comment
Share on other sites

  • 0

въехал наконец что у вас делается. Мой скрипт в данный момент берет get переменные из get, а его у вас нет, т.к. отсутствует '?' в адресной строке, вы его потихому скамуниздили mod_rewrite. GET запросом являются данные стоящие после первого знака '?' у вас он удаляется и передается только PHP методом mod_rewrite. PHP работает на сервере и он обрабатывает эти данные нормально, но вот формы на стороне клиента не зная о таких изменениях шлют не верные запросы. Лично мне не нравится ваша данная реализация изменения адреса, красоты минимум: вы убираете только первый ключ, а проблем максимум. То, что вы передаете skip через get - это правильно, но то как :), это спорный вопрос.

вот так должно вроде работать


<script>
function SubmitForm(form)
{
//создаем ассациативный массив аналогичный $_GET в PHP
var new_get = '';
var get = window.location.href.split('/');
var gets = get[3].split('&');
var get_ = {};
var forms = form.childNodes;
for(n in gets)
{
get = gets[n].split('=');
if(get.length > 1) get_[get[0]] = get[1];
else get_[get[0]] = '';
}
//делаем обход формы, заменяем параметры в get_ на параметры из формы и добавляем новые
for(n in forms)
{
if (forms[n].nodeType == 1)
{
if(forms[n].tagName == 'INPUT' && forms[n].name.length)
{
get_[forms[n].name] = forms[n].value;
}
}
}
//формируем новый гет запрос
for(n in get_)
{
if(get_[n].length) new_get += '&'+n+'='+get_[n];
else new_get += '&'+n;
}
get = new_get.substr(1);
window.location.href = get;
return false;
}
</script>
<form id="forms">
<input name="par1" value="<?PHP if(isset($_GET['par1'])){echo $_GET['par1'];}?>">
<input name="par2" value="<?PHP if(isset($_GET['par2'])){echo $_GET['par2'];}?>">
<input type="submit" value="GET" onclick="SubmitForm(this.form);return false;">
</form>

Edited by Switch74
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy