it-swarm.com.ru

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

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

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

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


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


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

36
Mawg

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

44
Petah

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

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

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

13
deceze

Вы можете сделать так, чтобы ссылка выполняла пост-запрос 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>
11
Rob

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

7
Aris

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

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

5
zzarbi

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

5
raiks

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

2
tofutim