parametros - pasar variables por url php post
¿Cómo pasar los parámetros POST en una URL? (7)
Básicamente, creo que no puedo, pero estaría muy feliz de que se demuestre lo contrario.
Estoy generando un menú HTML dinámicamente en PHP, agregando un elemento para cada usuario actual, de modo que obtengo algo como <a href="process_user.php?user=<user>>
, pero prefiero POST a 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 siento, no tengo permitido usar JS - debería haber dicho, mi mal
Actualización a la actualización: parece que @Rob está en algún momento con "Podría usar un botón en lugar de un anclaje y simplemente darle un estilo al botón para que parezca un enlace. De esa manera podría tener sus valores en campos ocultos dentro de la misma forma para ser enviado a través de POST "
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.
Los parámetros en la URL son parámetros GET, un cuerpo de solicitud, si está presente, es datos POST. Entonces su premisa básica es, por definición, inalcanzable.
Debe elegir si 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 inmutable (es decir, solicitudes GET).
Para realizar una solicitud POST, debe crear un <form>
. 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 .
Me gustaría compartir mi implementación también. 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, al contrario de las solicitudes GET, no muestra los parámetros en la URL, que es más seguro.
No, no puedes hacer eso. Los invito a leer una definición de POST: http://en.wikipedia.org/wiki/POST_%28HTTP%29
o esta página: http://en.wikipedia.org/wiki/GET_%28HTTP%29#Request_methods
Puede hacer que el enlace realice una solicitud posterior ajax cuando se haga 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 hacer que el enlace envíe un formulario POST 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>
Puede usar un formulario diseñado como un enlace, no se requiere 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;
}
En primer lugar, un descargo de responsabilidad: no creo que casarse con 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 hizo sentir curiosidad sobre cómo PHP maneja este tipo de casos. Resultó que es posible en teoría. Aquí hay 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.