Как передать параметры публикации в URL-адресе?


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

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

Есть ли какой-либо способ передать информацию в качестве параметра ПУБЛИКАЦИИ, а не ПОЛУЧАТЬ ее по кликабельной ссылке HREF?


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


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

Author: Mawg, 2011-06-02

7 answers

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

 37
Author: Petah, 2017-11-03 04:18:38

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

Вы должны выбрать, использовать ли сообщение или ПОЛУЧИТЬ на основе действия. Любое разрушительное действие, т. е. то, что постоянно изменяет состояние сервера (удаление, добавление, редактирование), всегда должно вызываться запросами POST. Любой чистый "поиск информации" должен быть доступен по неизменному URL-адресу (т. Е. Получить запросы).

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

 12
Author: deceze, 2011-06-02 05:56:29

Вы можете заставить ссылку выполнить запрос на публикацию ajax при нажатии на нее.

В 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>
 11
Author: Rob, 2011-06-02 05:50:47

Я также хотел бы поделиться своей реализацией. Однако для этого требуется некоторый 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
Author: Aris, 2017-08-05 07:14:47

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

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

 5
Author: zzarbi, 2011-06-02 05:48:54

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

 4
Author: raiks, 2016-03-25 12:23:50

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

 2
Author: tofutim, 2011-06-02 05:51:50