2011-01-18 5 views
8

Мне нужно сделать форму для отправки как запросов POST, так и GET (из-за некоторых ошибок в IE и iframe), как вы можете это сделать?Отправить как POST, так и GET в форме

Передаваемые данные не являются безопасными, поэтому не имеет значения, может ли он быть установлен через GET, просто нужно убедиться, что он установлен в обоих направлениях.

Спасибо за помощь!

+1

Несколько ответов ниже показывают * как * это можно сделать. Просто помните, что сам запрос * имеет * один и только один тип *, т. Е. 'Метод''

'. Из этого следует, что вы можете добавить параметры '' GET'-style 'в запрос 'POST', но не делать наоборот. – jensgram

+2

Мне бы очень хотелось знать, почему вы должны это делать. Я не могу думать ни о какой причине. Кроме того, данные, отправляемые через POST, не более безопасны, чем отправка GET. Он отправляется в ясности в любом случае. Если вам нужна безопасность, вы должны использовать SSL. – Brad

+0

Это невозможно. Go figure –

ответ

28

Просто: просто укажите данные GET в URL-адресе формы.

<form method="POST" action="form.php?a=1&b=2&c=3"> 

Однако, очень тщательно проверьте, как данные используются в сценарии получения. Не используйте $_REQUEST - скорее проанализируйте $_GET и $_POST в соответствии с вашими точными потребностями и в приоритетном порядке, в котором они вам нужны.

+0

Ву, мне это нравится. Чика. –

+1

Вы меня неправильно поняли. Я имею в виду, что я хочу, чтобы данные были представлены как «POST», так и «GET» сразу, а не передавать дополнительные данные GET. – Cyclone

+1

@ Циклон ах, я вижу. Тогда это возможно только с использованием JS, таких как шоу @casablanca. –

2

форма должна установить пост сделайте получить в URL

<form method="post" action="http://www.yourpage.php?firstparam=1&sec=2"> 
. 
. 
</form> 
8

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

HTML:

<form id="myform" method="post" action="..." onsubmit="process()"> 
    ... 
</form> 

JavaScript:

function process() { 
    var form = document.getElementById('myform'); 
    var elements = form.elements; 
    var values = []; 

    for (var i = 0; i < elements.length; i++) 
    values.push(encodeURIComponent(elements[i].name) + '=' + encodeURIComponent(elements[i].value)); 

    form.action += '?' + values.join('&'); 
} 
+0

- единственный способ пойти.Обратите внимание на ограничение 2-4 килобайта на параметры GET, хотя –

4

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

сценарий:

function setAction() { 
    $("#myform").attr("action", "/path/to/script/?" + $("#myform").serialize()); 
} 

HTML:

<form id="myform" action="/path/to/script/" method="post" onsubmit="setAction()"> 
+1

Единственное, что я бы добавил, это событие .preventDefault(). затем нажмите кнопку() кнопки отправки формы после. Таким образом, форма не может быть отправлена ​​до тех пор, пока js не выполнит свою задачу. –

+0

@Robert: Твики могут быть определенно сделаны. Я просто хотел показать общую концепцию использования jQuery для этой цели. – webbiedave