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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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