¿Recibir todas las variables enviadas con POST?

85

Necesito insertar todas las variables enviadas con la publicación, eran casillas de verificación que representaban a un usuario.

Si uso GET, obtengo algo como esto:

?19=on&25=on&30=on

Necesito insertar las variables en la base de datos.

¿Cómo puedo enviar todas las variables con POST? ¿Como una matriz o valores separados por comas o algo así?

lisovaccaro
fuente

Respuestas:

164

La variable $_POSTse completa automáticamente.

Intenta var_dump($_POST);ver el contenido.

Puede acceder a valores individuales como este: echo $_POST["name"];

Esto, por supuesto, supone que su formulario está utilizando la codificación de formulario típica (es decir, enctype=”multipart/form-data”

Si los datos de su publicación están en otro formato (por ejemplo, JSON o XML, puede hacer algo como esto:

$post = file_get_contents('php://input');

y $postcontendrá los datos sin procesar.

Suponiendo que está utilizando la $_POSTvariable estándar , puede probar si una casilla de verificación está marcada como esta:

if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes')
{
     ...
}

Si tiene una serie de casillas de verificación (p. Ej.

<form action="myscript.php" method="post">
  <input type="checkbox" name="myCheckbox[]" value="A" />val1<br />
  <input type="checkbox" name="myCheckbox[]" value="B" />val2<br />
  <input type="checkbox" name="myCheckbox[]" value="C" />val3<br />
  <input type="checkbox" name="myCheckbox[]" value="D" />val4<br />
  <input type="checkbox" name="myCheckbox[]" value="E" />val5
  <input type="submit" name="Submit" value="Submit" />
</form>

El uso [ ]en el nombre de la casilla de verificación indica que el script PHP accederá a los valores seleccionados como una matriz. En este caso $_POST['myCheckbox'], no devolverá una sola cadena, pero devolverá una matriz que consta de todos los valores de las casillas de verificación que se marcaron.

Por ejemplo, si he comprobado todas las casillas, $_POST['myCheckbox']sería una matriz que consiste en: {A, B, C, D, E}. A continuación, se muestra un ejemplo de cómo recuperar la matriz de valores y mostrarlos:

  $myboxes = $_POST['myCheckbox'];
  if(empty($myboxes))
  {
    echo("You didn't select any boxes.");
  }
  else
  {
    $i = count($myboxes);
    echo("You selected $i box(es): <br>");
    for($j = 0; $j < $i; $j++)
    {
      echo $myboxes[$j] . "<br>";
    }
  }
Mago del código
fuente
2
¿Tenía la intención de agregar un ejemplo / enlace al final?
1
Gracias, en realidad intenté imprimir_r ($ _ POST) y no funcionaba debido a que estaba usando GET todo el tiempo. My bad
lisovaccaro
@ Liso22 ¡no te preocupes! Nos pasa a todos :)
Code Magician
5
$ publicación = file_get_contents ('php: // entrada'); me salvó el tiempo. Gracias. Oh Dios, f ** ng php ...
Nedudi
1
¡Gratz por 100!
otro
77

debería poder acceder a ellos desde la $_POSTvariable:

foreach ($_POST as $param_name => $param_val) {
    echo "Param: $param_name; Value: $param_val<br />\n";
}
Tudor Constantin
fuente
¿Tenía la intención de agregar un ejemplo / enlace al final?
1
Notó los dos puntos al final de la respuesta.
Esta es la respuesta a lo que se preguntó.
lisandro
11

Está en desuso y no desea acceder a superglobales directamente (¿desde php 5.5, creo?)

Cada IDE moderno le dirá:

No acceda a Superglobals directamente. Utilice algunas funciones de filtro (p filter_input. Ej. )

Para nuestra solución, para obtener todos los parámetros de solicitud, tenemos que usar el método filter_input_array

Para obtener todos los parámetros de un método de entrada, use esto:

$myGetArgs = filter_input_array(INPUT_GET);
$myPostArgs = filter_input_array(INPUT_POST);
$myServerArgs = filter_input_array(INPUT_SERVER);
$myCookieArgs = filter_input_array(INPUT_COOKIE);
...

Ahora puedes usarlo en var_dumptus foreach-Loops

Lo que no funciona es acceder al $ _REQUEST Superglobal con este método. Siempre vuelve NULLy eso es correcto.

Si necesita obtener todos los parámetros de entrada, pasando por diferentes métodos, simplemente combínelos como en el siguiente método:

function askForPostAndGetParams(){
    return array_merge ( 
        filter_input_array(INPUT_POST), 
        filter_input_array(INPUT_GET) 
    );
}

Editar: versión extendida de este método (funciona también cuando uno de los métodos de solicitud no está configurado):

function askForRequestedArguments(){
    $getArray = ($tmp = filter_input_array(INPUT_GET)) ? $tmp : Array();
    $postArray = ($tmp = filter_input_array(INPUT_POST)) ? $tmp : Array();
    $allRequests = array_merge($getArray, $postArray);
    return $allRequests;
}
mtizziani
fuente
obtengo un error fatal cuando intento usar su sugerencia "$ postArray = ($ tmp = filter_input_array (INPUT_POST))? $ tmp: Array ();". ERROR FATAL La expresión constante contiene operaciones no válidas en la línea número 5
luckyguy73
@AshtonMorgan lo probé (copiar y pegar) y funciona bien. ¿Qué versión de PHP usas?
mtizziani
8

Entonces, ¿algo como la $_POSTmatriz?

Puede usar http_build_query($_POST)para volver a ponerlos en una var=xxx&var2=yyycadena. O simplemente print_r($_POST)para ver qué hay allí.

mario
fuente
6

Por qué no esto, es fácil:

extract($_POST);
bubbahut
fuente
4
Terrible idea como está; agujero de seguridad gigante.
nadie
2
Este código responde perfectamente a su pregunta "¿Cómo puedo enviar todas las variables con POST?", Mientras que las otras respuestas no. Y la mejor respuesta es votada en contra, imagínate. La seguridad puede no ser un problema para su proyecto. ¿Estás diciendo que aquellos que hicieron php cometieron un error al inventar esta función, que nunca debería usarse?
bubbahut
2
@bubbahut exactamente. Nadie quiere todas las variables de publicación para el código de producción.
cowboysaif
5

Usando esto puedes obtener todas las variables de publicación

print_r($_POST)

fuente