2011-06-13 13 views
38

Pregunta simple: ¿Es posible obtener todos los datos POSTED en una página, incluso si no conoce todos los campos?PHP: ¿Es posible obtener automáticamente todos los datos POST?

Por ejemplo, quiero escribir un script simple que recoja cualquier dato POSTed y lo envíe por correo electrónico. Puedo prever que los campos en la forma es probable que cambien mucho con el tiempo, y para ahorrarme algo de tiempo en el largo plazo, me preguntaba si podría escribir algo que automáticamente reuniera todo.

¿Es posible?

+2

por supuesto solo use las matrices globales $ _POST, $ _GET, $ _Ser ..... –

+2

posible duplicado de [Cómo tomar todas las variables en una publicación (PHP)] (http://stackoverflow.com/questions/ 3058336/how-to-grab-all-variables-in-a-post-php) – mario

Respuesta

73

Claro. Sólo hay que pasar a través de la matriz $_POST:

foreach ($_POST as $key => $value) 
echo "Field ".htmlspecialchars($key)." is ".htmlspecialchars($value)."<br>"; 
+4

@Django Reinhardt Tenga en cuenta que las casillas de verificación no marcadas no aparecen en la matriz '$ _POST' por lo que si utiliza casillas de verificación, necesitará manejarlos de manera diferente usando 'isset' por ejemplo. – jeroen

+0

¿Qué pasa si hay un archivo? ¿Va a venir con él? – bhawin

2

Puede recuperar todas las claves del array $ _POST usando array_keys(), a continuación, construir un mensajes de correo electrónico con los valores de dichas claves.

var_dump($_POST) también volcará información sobre toda la información en $ _POST para usted.

1

Sí se puede utilizar simplemente

 $input_data = $_POST; 

o extract() puede ser útil para usted.

+2

'extract ($ _ POST)' imitará 'register_globals'. No hagas eso. – netcoder

+1

@netcoder; solo le sugiero que puede ser útil; es una opción también. y, por favor, dame un ejemplo para que tus comentarios sean valiosos. – diEcho

2

Siempre y cuando no desee ningún formato especial: sí.

foreach ($_POST as $key => $value) 
    $body .= $key . ' -> ' . $value . '<br>'; 

Obviamente, sería necesario más formateo, sin embargo, esa es la manera "fácil". A menos que malinterprete la pregunta.

También podría hacer algo como esto (y si te gusta el formato, es ciertamente más fácil):

$body = print_r($_POST, true); 
0

Usted puede utilizar $_REQUEST, así como $_POST para llegar a todo, como POST, GET y datos de una cookie .

1

Para agregar a los otros, var_export podría ser útil también:

$email_text = var_export($_POST, true); 
28

Nadie mencionado Raw Mensaje de Datos, pero es bueno saber, si los datos publicado no tiene clave, pero solo valor, el uso Raw Post Data:

$postdata = file_get_contents("php://input"); 

PHP hombre:

php: // input es una secuencia de solo lectura que le permite leer los datos brutos desde el cuerpo de la solicitud. En el caso de solicitudes POST, es preferible usar la entrada php: // en lugar de $ HTTP_RAW_POST_DATA, ya que no depende de según las directivas especiales php.ini.Además, para aquellos casos en los que $ HTTP_RAW_POST_DATA no se completa de manera predeterminada, es potencialmente una alternativa menos intensiva de memoria a que a la activación de always_populate_raw_post_data. La entrada php: // no está disponible con enctype = "multipart/form-data". .

0
foreach ($_POST as $key => $value) 

eco .htmlspecialchars "campo" ($ clave) "es" .htmlspecialchars ($ value) "
.";

+0

por favor explique y formatee su respuesta – Mazz

+0

Entonces, ¿cuál es la diferencia de la respuesta aceptada http://stackoverflow.com/a/6334857/2359679? – hassan

Cuestiones relacionadas