Как передать параметры POST в URL?
В принципе, я думаю, что я не могу, но был бы очень рад оказаться ошибочным.
Я генерирую HTML-меню динамически в PHP, добавляя один элемент для каждого текущего пользователя, так что я получаю что-то вроде <a href="process_user.php?user=<user>>
, но у меня есть предпочтение POST через GET.
Есть ли способ передать информацию как параметр POST, а не GET из кликабельной ссылки HREF?
Обновление: извините, мне не разрешено использовать JS - я должен был сказать, мой плохой
Обновление для обновления: похоже, что @Rob на что-то похожее: "Вы могли бы использовать кнопку вместо привязки и просто стилизовать кнопку, чтобы выглядеть как ссылка. Таким образом, вы могли бы иметь свои значения в скрытых полях внутри тот же вид, который будет отправлен через POST"
Ответы
Ответ 1
Вы можете использовать форму, написанную как ссылку, не требующую JavaScript:
<form action="/do/stuff.php" method="post">
<input type="hidden" name="user_id" value="123" />
<button>Go to user 123</button>
</form>
CSS
button {
border: 0;
padding: 0;
display: inline;
background: none;
text-decoration: underline;
color: blue;
}
button:hover {
cursor: pointer;
}
Смотрите: http://jsfiddle.net/SkQRN/
Ответ 2
Вы можете сделать ссылку на выполнение запроса ajax после его нажатия.
В jQuery:
$('a').click(function(e) {
var $this = $(this);
e.preventDefault();
$.post('url', {'user': 'something', 'foo': 'bar'}, function() {
window.location = $this.attr('href');
});
});
Вы также можете отправить ссылку на форму POST с помощью javascript
<form action="url" method="post">
<input type="hidden" name="user" value="soemthing" />
<a href="#">CLick</a>
</form>
<script>
$('a').click(function(e) {
e.preventDefault();
$(this).parents('form').submit();
});
</script>
Ответ 3
Параметры в URL-адресе - это параметры GET, тело запроса, если оно присутствует, является POST-данными. Таким образом, ваша основная предпосылка по определению не достижима.
Вы должны выбрать, использовать ли POST или GET на основе действия. Любое разрушительное действие, то есть что-то, что постоянно изменяет состояние сервера (удаление, добавление, редактирование), всегда должно вызываться POST-запросами. Любой чистый "поиск информации" должен быть доступен через неизменный URL (т.е. Запросы GET).
Чтобы выполнить запрос POST, вам необходимо создать <form>
. Вы могли бы использовать Javascript для создания запроса POST, но я бы не рекомендовал использовать Javascript для чего-то такого базового. Если вы хотите, чтобы ваша кнопка отправки выглядела как ссылка, я бы предложил вам создать обычную форму с обычной кнопкой отправки, а затем использовать CSS для восстановления кнопки и/или использовать Javascript, чтобы заменить кнопку ссылкой, которая представляет форму используя Javascript (в зависимости от того, что лучше воспроизводит желаемое поведение). Это будет хорошим примером прогрессивного улучшения.
Ответ 4
Я хотел бы также поделиться своей реализацией. Это действительно требует некоторого javascript.
<form action="./index.php" id="homePage" method="post" style="display: none;">
<input type="hidden" name="action" value="homePage" />
</form>
<a href="javascript:;" onclick="javascript:
document.getElementById('homePage').submit()">Home</a>
Хорошая вещь об этом, это то, что вопреки запросам GET, она не показывает параметры в URL, что более безопасно.
Ответ 5
Нет, вы не можете этого сделать.
Я приглашаю вас прочитать определение POST: http://en.wikipedia.org/wiki/POST_%28HTTP%29
или на этой странице: http://en.wikipedia.org/wiki/GET_%28HTTP%29#Request_methods
Ответ 6
Во-первых, отказ от ответственности: я не думаю, что жениться на POST с параметрами URL - это блестящая идея. Как и другие, вам лучше использовать скрытую форму для передачи пользовательской информации.
Однако, мне задали вопрос, как PHP обрабатывает такой случай. Оказалось, что это возможно в теории. Здесь доказательство:
post_url_params.html
<!DOCTYPE html>
<html>
<head></head>
<body>
<form method="post" action="post_url_params.php?key1=value1">
<input type="hidden" name="key2" value="value2">
<input type="hidden" name="key3" value="value3">
<input type="submit" value="click me">
</form>
</body>
</html>
post_url_params.php
<?php
print_r($_POST);
print_r($_GET);
echo $_SERVER['REQUEST_METHOD'];
?>
Выход
Array ( [key2] => value2 [key3] => value3 )
Array ( [key1] => value1 )
POST
Можно четко видеть, что PHP хранит параметры URL в переменной $_GET и формирует данные в переменной $_POST. Я подозреваю, что это очень PHP- и сервер-специфический, и, безусловно, не стоит полагаться.
Ответ 7
Это может работать, если php script создает форму для каждой записи со скрытыми полями, а href использует javascript для отправки формы.