Как передать параметры POST в URL?

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

я генерирую меню HTML динамически в PHP, добавляя один элемент для каждого текущего пользователя, так что я получаю что-то вроде <a href="process_user.php?user=<user>>, но я выбрал за пост вам.

есть ли способ передать информацию в качестве параметра POST, а не получить из кликабельной ссылки HREF?


Update: извините, мне не разрешено использовать JS-я должен был сказать, мой плохо!--2-->


обновление до обновления: похоже, @Rob находится на somethign с "Вы можете использовать кнопку вместо якоря и просто стиль кнопки, чтобы выглядеть как ссылка. Таким образом, вы можете иметь свои значения в скрытых полях внутри той же формы, которые будут отправлены по почте"

7 ответов


вы можете использовать форму в стиле ссылки, не требуется 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/


параметры в URL-адресе-параметры GET, тело запроса, если присутствует, - это данные POST. Таким образом, ваша основная предпосылка по определению недостижима.

вы должны выбрать, Использовать ли POST или GET на основе действия. Любой деструктивные действие, то есть то, что постоянно изменяет состояние сервера (удаление, добавление, редактирование), всегда должно вызываться запросами POST. Любой чистый "поиск информации" должен быть доступен через неизменяемый URL (т. е. GET требования заказчика.)

чтобы сделать запрос POST, вам нужно создать <form>. Вы может используйте Javascript для создания запроса POST, но я бы не рекомендовал использовать Javascript для чего-то настолько простого. Если вы хотите, чтобы ваша кнопка отправки выглядела как ссылка, я бы предложил вам создать обычную форму с обычной кнопкой отправки, а затем использовать CSS для изменения стиля кнопки и / или использовать Javascript для замены кнопки ссылкой, которая отправляет форму с помощью Javascript (в зависимости от того, что лучше воспроизводит желаемое поведение). Это был бы хороший пример постепенное повышение.


вы можете сделать ссылку выполнить запрос AJAX post, когда она нажата.

в jQuery:

$('a').click(function(e) {
   var $this = $(this);
   e.preventDefault();
   $.post('url', {'user': 'something', 'foo': 'bar'}, function() {
       window.location = $this.attr('href');
   });
});

вы также можете сделать ссылку отправить форму сообщения с помощью 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>

Я также хотел бы поделиться своей реализацией. Это требует некоторого 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-адресе, что безопаснее.


нет, вы не можете сделать это. Я приглашаю вас прочитать определение поста:http://en.wikipedia.org/wiki/POST_%28HTTP%29

или эта страница:http://en.wikipedia.org/wiki/GET_%28HTTP%29#Request_methods


во-первых, отказ от ответственности: я не думаю, что брак сообщение с параметрами 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 и сервера, и, безусловно, не на что полагаться.


Это может работать, если PHP-скрипт генерирует форму для каждой записи со скрытыми полями, а href использует javascript для публикации формы.