web-dev-qa-db-fra.com

Comment passer les paramètres POST dans une URL?)?

En gros, je pense que je ne peux pas, mais je serais très heureux d’avoir tort.

Je crée un menu HTML de manière dynamique en PHP, en ajoutant un élément pour chaque utilisateur actuel, afin d'obtenir quelque chose comme <a href="process_user.php?user=<user>>, mais j'ai une préférence pour POST par rapport à GET.

Existe-t-il un moyen de transmettre les informations en tant que paramètre POST, plutôt que GET à partir d'un lien HREF cliquable?


Mise à jour: désolé, je ne suis pas autorisé à utiliser JS - Je devrais dire, mon mauvais


Mise à jour de la mise à jour: on dirait que @Rob est en quelque sorte avec "Vous pouvez utiliser un bouton au lieu d'une ancre et juste le styler pour qu'il ressemble à un lien. De cette façon, vous pourriez avoir vos valeurs dans des champs cachés à l'intérieur du même formulaire à envoyer via POST "

36
Mawg

Vous pouvez utiliser un formulaire appelé lien, sans 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;
}

Voir: http://jsfiddle.net/SkQRN/

44
Petah

Les paramètres de l'URL sont des paramètres GET. Le corps de la requête, s'il est présent, est POST data. Votre base est donc, par définition, irréalisable.

Vous devez choisir d’utiliser POST ou GET en fonction de l’action. N'importe quelle action destructive, c’est-à-dire quelque chose qui modifie de manière permanente l’état du serveur (suppression, ajout, modification). ) doit toujours être invoqué par POST requêtes. Toute "extraction d'informations" pure doit être accessible via une URL non modifiable (par exemple, les requêtes GET).

Pour faire une demande POST, vous devez créer un <form>. Vous pourriez utiliser Javascript pour créer une demande POST à la place), mais je ne vous recommanderais pas d'utiliser Javascript pour quelque chose d'aussi simple. Si vous voulez que votre bouton d'envoi ressemble à un bouton lien, je vous suggèrerais de créer un formulaire normal avec un bouton d'envoi normal, puis d'utiliser CSS pour redimensionner le bouton et/ou d'utiliser Javascript pour remplacer le bouton par un lien qui soumet le formulaire à l'aide de Javascript (selon ce qui reproduit le comportement souhaité Ce serait un bon exemple de amélioration progressive.

13
deceze

Vous pouvez faire en sorte que le lien effectue une demande de publication ajax lorsque vous cliquez dessus.

Dans jQuery:

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

Vous pouvez également faire en sorte que le lien envoie un formulaire POST avec 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

J'aimerais aussi partager mon implémentation. Il nécessite cependant un peu de 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>

Le point positif est que contrairement aux requêtes GET, les paramètres ne sont pas affichés dans l’URL, ce qui est plus sûr.

7
Aris

Non ... tu ne peux pas faire ça. Je vous invite à lire une POST définition: http://en.wikipedia.org/wiki/POST_%28HTTP%29

ou cette page: http://en.wikipedia.org/wiki/GET_%28HTTP%29#Request_methods

5
zzarbi

Tout d'abord, une clause de non-responsabilité: je ne pense pas que se marier POST avec des paramètres d'URL est une idée brillante. Comme d'autres l'ont suggéré, utilisez plutôt un formulaire caché pour transmettre les informations utilisateur.

Cependant, une question m'a rendu curieux de savoir comment PHP traitait un tel cas. Il s'est avéré que c'était possible en théorie. Voici une preuve:

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'];
?>

sortie

Array ( [key2] => value2 [key3] => value3 ) 
Array ( [key1] => value1 ) 
POST

On peut clairement voir que PHP stocke les paramètres d'URL dans la variable $ _GET et les données de formulaire dans la variable $ _POST. Je suppose que cela est très spécifique à PHP et au serveur, et n'est certainement pas une chose à compter.

5
raiks

Cela pourrait fonctionner si le script php génère un formulaire pour chaque entrée avec des champs cachés et que la href utilise javascript pour poster le formulaire.

2
tofutim