2011-06-02 65 views
31

Básicamente, creo que no puedo, pero estaría muy contento de que se demuestre lo contrario.¿Cómo pasar los parámetros POST en una URL?

Estoy generando un menú HTML dinámicamente en PHP, agregando un elemento para cada usuario actual, de modo que obtengo algo así como <a href="process_user.php?user=<user>>, pero tengo una preferencia para POST sobre GET.

¿Hay alguna forma de pasar la información como un parámetro POST, en lugar de GET desde un enlace HREF clicable?


Actualización: Lo sentimos, no se me permite utilizar JS - Tendría que haber dicho, mi mala


Update para la actualización: @ Rob parece que es a somethign con "lo que pueda use un botón en lugar de un anclaje y simplemente aplique un estilo al botón para que parezca un enlace. De esta forma, puede enviar sus valores en campos ocultos dentro del mismo formulario a través de POST "

+2

Utiliza un formulario o javascript ajax., Lo siento, no hay forma de que se publique la publicación en url – Ibu

+1

una sola solución: [jQuery.Ajax()] (http://api.jquery.com/jQuery.ajax/) – diEcho

+1

What Qué hace "process_user"? ¿Se actualiza/crea información o simplemente busca? –

Respuesta

35

Se puede usar un formulario de estilo como un enlace, sin JavaScript requerido:

<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; 
} 

Ver: http://jsfiddle.net/SkQRN/

+2

Esto funciona. Solo para agregar si quería que el enlace fuera consistente con sus otros enlaces, podría agregarlo en su hoja de estilo como 'a: link, button.class {}', y 'a: hover, button.class: hover {}' , etc. – Rob

+3

... y aún puede establecer 'method = 'post'' en el formulario, si lo desea. ¡Estupendo! – Alphaaa

5

No, no puede hacer eso. invito a leer una definición POST: http://en.wikipedia.org/wiki/POST_%28HTTP%29

o esta página: http://en.wikipedia.org/wiki/GET_%28HTTP%29#Request_methods

+1

Aunque enlazas a algunos artículos informativos, en realidad es posible con algunos JavaScript o CSS como se muestra en otras respuestas. – Rob

+1

Su pregunta es "¿Cómo pasar los parámetros POST en una URL?" la respuesta es tu CAN NO. El código anterior es para enviar variables POST a través de un formulario a través de un evento de JavaScript ... – zzarbi

+3

Ese fue el título de la pregunta. Si lees la pregunta real, él estaba buscando algo diferente. – Rob

11

Usted puede hacer un link realizar una petición ajax puesto cuando se hace clic.

En jQuery:

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

También puede crear el enlace presentar un formulario de envío con 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

parámetros en la URL son parámetros GET, un cuerpo de la petición, si está presente, es POST datos. Entonces su premisa básica es, por definición, inalcanzable.

Debe elegir si desea usar POST o GET en función de la acción. Cualquier acción destructiva, es decir, algo que cambie permanentemente el estado del servidor (eliminar, agregar, editar) siempre debe invocarse mediante solicitudes POST. Cualquier "recuperación de información" pura debería ser accesible a través de una URL invariable (es decir, solicitudes GET).

Para realizar una solicitud POST, debe crear un <form>. Usted podría usar Javascript para crear una solicitud POST, pero no recomendaría usar Javascript para algo tan básico. Si desea que su botón de envío se vea como un enlace, le sugiero que cree un formulario normal con un botón de envío normal, luego use CSS para cambiar el estilo del botón y/o use Javascript para reemplazar el botón con un enlace que envíe el formulario usando Javascript (dependiendo de qué reproduce mejor el comportamiento deseado). Ese sería un buen ejemplo de mejora progresiva.

2

Esto podría funcionar si el script php genera un formulario para cada entrada con campos ocultos y el href usa javascript para publicar el formulario.

7

me gustaría compartir mi aplicación, así . Sin embargo, requiere algo 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> 

lo bueno de esto, es que, contrariamente a las peticiones GET, que no muestra los parámetros de la URL, que es más seguro.

+0

gracias perfectos !!!!!! +1 funciona como un encanto. Agregar 'target =" _ blank "' es aún mejor. –

3

En primer lugar, un descargo de responsabilidad: no creo que casar POST con parámetros de URL es una idea brillante. Al igual que otros sugirieron, es mejor que use un formulario oculto para pasar información del usuario.

Sin embargo, una pregunta me dio curiosidad sobre cómo PHP está manejando este caso. Resultó que es posible en teoría. He aquí una prueba:

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

salida

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

Se puede ver claramente que PHP almacena parámetros de URL en la variable $ _GET y forma datos en la variable $ _POST. Sospecho que es muy específico de PHP y servidor, y definitivamente no es algo en lo que confiar.

Cuestiones relacionadas