Подтвердить что ты не робот

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

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

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

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


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


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

4b9b3361

Ответ 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, что более безопасно.

Ответ 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 для отправки формы.