Creo este post porque me estoy haciendo un lio, a ver si escribiéndolo se me queda el concepto claro. Este problema surge de una necesidad al llamar a variables POST en php de una pagina a otra. Asimismo se podría hacer con cualquier otro tipo de variable superglobal. Estas variables vienen dadas por un array que tienen asociado un valor. De manera sencilla se podrían manejar con una instrucción foreach.


$POST=array{campo1=> valor1, campo2=> valor2, campo2=> valor2,….. campoX=> valorX, }

foreach ($POST as $campo){
echo $campo;
}

foreach ($POST as $campo=>$valor){

            echo  'El nombre del campo'. $campo. 'tiene un valor de: '.$valor;

}

Asi pues con la instrucción foreach ($POST as $campo){instrucciones} à lo que hacemos es hacer un bucle que recorre todas las variables del array asignando el valor de los campos a la variable $campo que hemos definido. Esta variable cambia en cada iteración sucesivamente del campo1 al campo2… hasta el campoX.

Con esta segunda función hacemos lo mismo pero además de asignar un nombre a la variable del campo, también obtenemos una variable que se asigna al valor asociado de ese campo.

En este caso obtendríamos un conjunto de frases que muestran el campo y el valor.

La cuestión es que lo que quiero mostrar son algunos datos de ese array, no todos y ejecutar una función asociada al campo para mostrar el nombre del campo y luego al valor para conocer si esa variable contiene algún dato o esta vacío. Podría escribir 20 lineas para cada caso, pero para optimizar he optado buscar una función recursiva que me simplifique la vida.

Digamos que tenemos un conjunto de variables que introduce el usuario a través de un formulario y las pasamos a través de cualquiera de los métodos conocidos. Por un lado, tenemos que verificar la existencia de dichas variables antes de manejarlas (Post asociado), porque al inicio de pasar el formulario las detecta como inexistentes. Este fallo puede ocurrir cuando se llaman a estas variables desde la misma página desde la que se envíen. Aunque a alguno le pueda parecer una tontería, es más útil de lo que uno se imagina. Por ejemplo, si en un registro que hemos completado hay que escribir la contraseña dos veces y nos equivocamos en un carácter, redirigimos ese error a la misma página de registro y no tendremos que volver a introducir todos los datos anteriores. Esto a veces puede sacar de quicio, si el usuario se equivoca de forma continuada al introducir fechas inexistentes o nombres de usuario ya escogidos por otra persona,etc…

Es por ello que al iniciar la página de registro nos pueden aparecer que las variables no existen, ya que estamos llamando a una variable a la que no hemos introducido valor y por otro lado, no le podemos dar un valor vacio, porque al iniciar la página se reescribirían encima de los datos que hemos pasado anteriormente.

Una solución casera y que me ha dado buenos resultados es verificar la existencia de dicha variable con la función isset(). Y creando una variable auxiliar que es un array al igual que la comunicación de variables entre páginas PHP, manejamos esos valores en lugar de la que manipulamos con $_POST con los mismos campos (o cualquier otra forma de comunicación). Si existe la variable $_POST le daremos un valor igual a nuestra variable creada, por ejemplo $data. Y si no existe le damos a ese campo un valor vacío.
De esta manera, cuando no se han iniciado esas variables nos manejamos con la variable auxiliar que se actualiza automáticamente con los valores nuevos sin dar error y en el caso de no existir las igualamos a una cadena vacia.


$data=array();

function initializevars(){
   global $data;
   $fields= array('campo1','campo2','campo3','campo4','campo5');
   foreach($fields as $campo){
      if (isset($_POST[$campo])){
         $data[$campo]=$_POST[$campo];
      }else{
         $data[$campo]="";
      };
   }
}

echo 'Nombre de Usuario: <input type="text" id="user" name="user" value='.$data['user']. '><br>';

Fijaros bien donde empiezan y acaban las comillas simples y dobles, porque puede llevar a errores con la variable php dentro del array y es un lio. Hay que definir bien la cadena y separada por puntos la variable php. Cuando queramos especificar un valor dentro del campo ya no nos dará problemas.

Si hubiéramos utilizado la variable $_POST[‘user’] habría saltado un error de inicio. Solo después de enviar el formulario crearía la variable y podríamos utilizarla sin problemas y a menos que haya un fallo en el registro con su respectivo aviso no habría que rellenar de nuevo ese campo.

Es muy posible que haya otros métodos más eficientes con funciones php orientados a objetos. Otra posibilidad es la de jugar con variables variables, aunque yo no le he dado ningún uso, se trata de definir el campo  de un array como una variable de la siguiente manera.


$var = 'hola';    /* Esta es una definición de variable simple*/
${$var} = 'mundo';           /*Esta es una definición de variable variable que equivale a decir:*/
$hola ='mundo';       /*Es decir que el nombre de la variable es la cadena asociada a la variable $a. De esta manera, si cambiamos el valor de $a por otra cadena se le podrá asociar otra cadena.*/

/*Así también se pueden añadir elementos de array de la siguiente manera para extenderla*/

$var[1] = 'hola';

${$var[1]}='mundo'; 


Atención porque no es lo mismo que ${$var}[1]= ‘mundo’; En este caso se crearía un array cuyo primer elemento es la cadena ‘mundo’.