Bucle para recibir todas las variables por POST en PHP

Valoración del artículo:
Una manera muy rápida de recibir todas las variables de un formulario, enviado por post. Mediante un recorrido genérico del array $_POST, en el lenguaje PHP.
Publicado: 20/11/03
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Vamos a ver una manera muy rápida de recibir todas las variables de un formulario, enviado por post, en el lenguaje PHP. Os aseguro que es una pequeña porción de código que os ahorrará escribir un montón de líneas de código.

Quién no se ha visto alguna vez en la tediosa tarea de recibir un montón de datos de un formulario, asignando una por una todas las variables en PHP? Eso se hacía con líneas como ésta:


$nombre = $_POST["nombre"];
$edad = $_POST["edad"];
$ciudad = $_POST["ciudad"];
....


Si el formulario tuviera 10 elementos no sería muy pesado escribir las 10 líneas de código, pero si fueran 50 o 100 la cosa sería mucho menos agradable. El código que vamos a ver ahora nos solucionará la vida en esos casos.

foreach($_POST as $nombre_campo => $valor){
   $asignacion = "\$" . $nombre_campo . "='" . $valor . "';";
   eval($asignacion);
}


Se realiza un bucle foreach que va recorriendo cada uno de los elementos del post. En cada iteración, se van accediendo a todos los elementos del post y se guarda en $ nombre_campo el nombre del campo recibido por el formulario y en $valor, el valor que se había introducido en el formulario.

Todo lo anterior se deduce de la primera línea. En las siguientes se compone en cada iteración, cada una de las asignaciones que deberíamos haber escrito manualmente. Es decir, en la variable asignación guardaremos una línea de código PHP que realiza la declaración de la variable de formulario dentro de PHP y su inicialización con el valor que se hubiera escrito.

En la siguiente línea, donde está la función eval(), se ejecuta la sentencia generada en el anterior paso. La función eval() de PHP ejecuta el contenido de una cadena de caracteres como si fuera una sentencia PHP. (Podemos ver la documentación de la función eval() en la página de PHP http://es.php.net/manual/es/function.eval.php)

Esperamos que os haya interesado este minúsculo, pero útil, código PHP.

Nota: Se puede consultar otro artículo que hace un recorrido similar, en ese caso para declarar como variables todos los datos recibidos en una fila de un recordset.
Así mismo tenemos un artículo que nos muestra cómo recibir de forma segura los datos de un formulario.

Comentarios
Fueron enviados 17 comentarios al artículo
11 comentarios no revisados
6 comentarios revisados:
Por: Gabriel Cambronero
26/11/03
Excelente aplicación si el caso fuese que enviasemos esos datos por mail, pero para la introducción de esos datos - Suponiendo que son 100 - en una base de datos MySQL ?
Por: Guillermo Gianello
26/11/03
Una pequeña variante, que por otra parte, nos habilita pasar argumentos incluso con RegisterGlobals=off en phpini.

<?PHP
foreach ($HTTP_SERVER_VARS as $indice=>$cadena) {
$$indice = $cadena;
}
foreach ($HTTP_POST_VARS as $indice=>$cadena) {
$$indice = $cadena;
## echo "$indice = $cadena";
}
foreach ($HTTP_GET_VARS as $indice=>$cadena) {
$$indice = $cadena;
}
foreach ($HTTP_COOKIE_VARS as $indice=>$cadena) {
$$indice = $cadena;
}
?>


ya ni siquiera nos hace falta el eval()
Por: Leonardo Bustamante
26/11/03
Muy buen apunte Guillermo, pues si alguien me mandara codigo en la variable, facilmente puede cuadrarla para ejecutar codigo en mi maquina
Por: Manolo
27/11/03
Pues tenemos una utilísima función en php que nos hace este trabajo automáticamente, es la siguiente, y con sólo una línea de codigo:

extract($_POST);

esta crea las variables automáticamente igual que se describe en este artículo. Aparte esta función tiene muchas mas utilidades, mirad, mirad: es.php.net/manual/es/function.extract.php

saludos.
Por: Ramon Sosa
08/12/03
Efectivamente es más fácil utilizar la función extract, pero para crear una Instrucción MySql, es preferibe conservarlo como array y hacer lo siguiente:
$tabla='tabla';
$arraypost=array();
foreach($_POST as $k => $v) $arraypost[]="$k='$v'";
$sql="INSERT INTO $tabla SET ".implode(', ',$arraypost);

// Utilizar las funciones implode y explode son muy prácticas y se van a ahorrar muchos dolores de cabeza, también el extract es muy bueno...
Por: juancito
13/1/04
muy bueno para poder evitar escribir todas las variables, es de mucha ayuda para aplicaciones grandes

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Alojados en el grupo