¿Cómo puedo pasar parámetros POST en una URL?

7 minutos de lectura

avatar de usuario
Mawg dice que reincorpore a Monica

Básicamente, creo que no puedo, pero estaría muy feliz de estar equivocado.

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 sobre GET.

¿Hay alguna manera de pasar la información como un parámetro POST, en lugar de OBTENER desde un enlace HREF en el que se puede hacer clic?

No tengo permitido usar JavaScript.


Parece que Rob está en algo con “Podrías usar un botón en lugar de un ancla y simplemente diseñar el botón para que parezca un enlace. De esa manera, podrías tener tus valores en campos ocultos dentro del mismo formulario para enviarlos a través de POST”.

  • Utiliza un formulario o javascript ajax. Lo siento, no hay forma de pasar la publicación en la URL.

    – Ibú

    2 de junio de 2011 a las 5:46


  • solo una solución: jQuery.Ajax()

    – diEcho

    2 de junio de 2011 a las 5:49

  • ¿Qué hace “process_user”? ¿Actualiza/crea información o simplemente busca?

    – Señor miau

    2 de junio de 2011 a las 5:51

  • Puede usar un botón en lugar de un ancla y simplemente diseñar el botón para que parezca un enlace. De esa manera, podría tener sus valores en campos ocultos dentro del mismo formulario para enviarlos por POST.

    – ben

    2 de junio de 2011 a las 5:52

  • Además de lo que dijo Ben, también puede dejar que el enlace sea un maniquí y hacer que ejecute un javascript que envíe un formulario oculto. Como los formularios pueden ser un poco exigentes con la forma en que se anidan, esto podría facilitarlo.

    – Batalla_707

    2 de junio de 2011 a las 5:58

avatar de usuario
petah

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

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

  • Esto funciona. Solo para agregar si quisiera 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.

    – robo

    2 de junio de 2011 a las 5:57

  • … y aún puede establecer method='post' a la forma, si lo desea. ¡Excelente!

    – alfaaaa

    23 de mayo de 2015 a las 5:17

avatar de usuario
deceze

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

Debe elegir si desea utilizar POST o GET en función de la acción. Ningún destructivo Las solicitudes POST siempre deben invocar una acción, es decir, algo que cambie permanentemente el estado del servidor (eliminar, agregar, editar). Cualquier “recuperación de información” pura debe ser accesible a través de una URL inalterable (es decir, solicitudes GET).

Para realizar una solicitud POST, debe crear un <form>. Tú pudo use Javascript para crear una solicitud POST en su lugar, 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ía el formulario. usando Javascript (dependiendo de lo que reproduzca mejor el comportamiento deseado). Ese sería un buen ejemplo de mejora progresiva.

avatar de usuario
Robar

Puede hacer que un enlace realice una solicitud de publicación de Ajax cuando se hace clic en él.

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="something" />
    <a href="#">CLick</a>
</form>

<script>
    $('a').click(function(e) {
        e.preventDefault();
        $(this).parents('form').submit();
    });
</script>

avatar de usuario
Aris

Me gustaría compartir mi implementación también. Sin embargo, requiere algo de código 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, a diferencia de las solicitudes GET, no muestra los parámetros en la URL, lo cual es más seguro.

avatar de usuario
zzarbi

No, no puedes hacer eso. te invito a leer una definición POST.

O esta página: HTTP, métodos de solicitud

  • Aunque vincula algunos artículos informativos, en realidad es posible con JavaScript o CSS, como se muestra en otras respuestas.

    – robo

    2 de junio de 2011 a las 6:00

  • Su pregunta es “¿Cómo pasar parámetros POST en una URL?” la respuesta es tu NO PUEDE. El código anterior es para enviar variables POST a través de un formulario a través de un evento javascript…

    – zzarbi

    2 de junio de 2011 a las 6:03

  • Ese era el título de la pregunta. Si lees la pregunta real, él estaba buscando algo diferente.

    – robo

    2 de junio de 2011 a las 6:05

  • “¿Hay alguna forma de pasar la información como un parámetro POST, en lugar de OBTENER desde un enlace HREF en el que se puede hacer clic?” como un ENLACE en el que se puede hacer clic… podemos jugar con la palabra Estoy de acuerdo en que puedes piratearlo, pero ya no es un enlace, es una acción.

    – zzarbi

    2 de junio de 2011 a las 6:11

  • ok, está bien, ya … cualquier cosa en la que se pueda hacer clic (lo que el usuario podría pensar que es un enlace, sería una ventaja) Parece que @rob tiene una idea con los botones de envío

    – Mawg dice que reincorpore a Monica

    2 de junio de 2011 a las 15:06

avatar de usuario
Pedro Mortensen

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

Sin embargo, una pregunta me hizo sentir curiosidad por cómo PHP está manejando este caso. 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'];
?>

Producción

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

Uno puede ver claramente que PHP almacena parámetros de URL en el $_GET variables y datos de formulario en el $_POST variable. Sin embargo, sospecho que es muy específico de PHP y del servidor, y definitivamente no es algo en lo que confiar.

  • Aunque vincula algunos artículos informativos, en realidad es posible con JavaScript o CSS, como se muestra en otras respuestas.

    – robo

    2 de junio de 2011 a las 6:00

  • Su pregunta es “¿Cómo pasar parámetros POST en una URL?” la respuesta es tu NO PUEDE. El código anterior es para enviar variables POST a través de un formulario a través de un evento javascript…

    – zzarbi

    2 de junio de 2011 a las 6:03

  • Ese era el título de la pregunta. Si lees la pregunta real, él estaba buscando algo diferente.

    – robo

    2 de junio de 2011 a las 6:05

  • “¿Hay alguna forma de pasar la información como un parámetro POST, en lugar de OBTENER desde un enlace HREF en el que se puede hacer clic?” como un ENLACE en el que se puede hacer clic… podemos jugar con la palabra Estoy de acuerdo en que puedes piratearlo, pero ya no es un enlace, es una acción.

    – zzarbi

    2 de junio de 2011 a las 6:11

  • ok, está bien, ya … cualquier cosa en la que se pueda hacer clic (lo que el usuario podría pensar que es un enlace, sería una ventaja) Parece que @rob tiene una idea con los botones de envío

    – Mawg dice que reincorpore a Monica

    2 de junio de 2011 a las 15:06

avatar de usuario
Pedro Mortensen

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

¿Ha sido útil esta solución?