La comunicación de variables en PHP, ya sean de un tipo $_GET, $_POST,$_COOKIES, $_SESSION, $_SERVER, $_REQUEST o alguna otra definida por nosotros suelen guardarse en un array o lista. Como tratamos tipos de datos no tipados y la comunicación entre lenguajes es muy variada (php, html, javascript, mysql) es posible que puedan dar muchos errores por el camino. Es por ello que siempre hay que hacer un control condicional si el tipo de variable existe  para ejecutar una acción u otra.

Esto se puede conseguir con dos funciones empty(), is_null() o isset(), que devuelven un valor booleano true o false si existe el dato requerido. Esto es muy importante cuando requerimos datos del usuario a través de un formulario html y tenemos que guardar o mostrar por pantalla dichos datos.

Hay que tener cuidado porque si existen tres funciones es porque cada una hace algo distinto. Desde este link se explican sus diferencias aplicadas a algunos ejemplos.

Como ya hablamos en un post anterior, los formularios son un bonito agujero vulnerable en nuestra página y pueden ser usados de forma inapropiada. Es por ello que hay que manipular con cuidado y limitar la acción del usuario para servir únicamente al objetivo de dicho formulario. Esto se consigue limitando el número de caracteres, especificar un tipo de dato en la entrada, manejar funciones javascript como calendarios para introducir fechas y más importante que todo eso , la manipulación de datos a través de funciones de seguridad php.

Si un usuario ha de rellenar variables de tipo cadena o texto, no presentará muchos problemas, siempre y cuando no viole la seguridad citada anteriormente. Si el usuario en concreto se olvida de introducir un dato cadena se le puede avisar de rellenar por completo el campo del formulario o dejarlo como opcional. Pero a veces php detecta ante esta falta de dato, un campo vacio sin rellenar en el array y puede avisar de una existencia de datos. Este caso se presenta sobre todo en las casillas de verificación de formularios, que al marcar puedes establecer un valor concreto, true o false. Pero si por defecto no está marcado, php no lo detecta y aparece un fallo de variable inexistente, por lo que hay que crear un valor por defecto.


if(!(empty($_POST['tema']))){

   foreach($_POST['tema'] as $tema){

      echo $tema."<br>";

   }

}

Las casillas de verificación son complejas, aunque no lo parezca y hablaremos de ellas más adelante.