php

He visto en muchas ocasiones al recibir los datos de un formulario la siguiente comprobación:

if (isset($_POST['campo1'])) { // Resto de código }

¿Qué pasa si el valor $_POST[‘campo1’]  está vacío?

if (isset($_POST['campo1']) && !empty($_POST['campo1'])) { // Resto de código }

Según la documentación de isset():

Devuelvetrue si la variable existe y tiene un valor distinto de null , false de lo contrario.

Por ejemplo:

$var = ''; // Cadena vacía if (isset($var)) { // <= true ... }

Siempre va a devolver true aunque la la variable este vacía y se debería de comprobar con la función empty():

$var = ''; // Cadena vacía if (!empty($var)) { // <= false // No está vacía (true) } else { // Está vacía (false) }

¿Y cuando se debería usar isset() 

Siempre y cuando quieras comprobar que la variable existe, un ejemplo bueno sería si quieres saber si se ha mandado un formulario:

<form method="post" action=""> ... <input type="text" name="campo1" value=""> <input type="submit" name="submit" value="Enviar formulario"> </form> if (isset($_POST['submit']) { ... }

Según la documentación de empty():

Devuelve false si la variable existe y tiene un valor no vacío, distinto de cero. De otro modo devuelve true.

"" (una cadena vacía)
0 (0 como un integer)
0.0 (0 como un float)
"0" (0 como un string)
NULL
FALSE
array() (un array vacío)
$var; (una variable declarada, pero sin un valor)

Importante de saber, que no se genera una advertencia si la variable no existe.

Esto significa que empty() es esencialmente el equivalente conciso de:

!isset($var) || $var == false.

Entonces si quedaría redundante si comprobamos la misma variable con isset() y empty() al mismo tiempo.

Un ejemplo como se puede usar isset() y !empty() al mismo tiempo cuando se quiere recibir los datos de un formulario:

<form method="post" action="">    
    <input type="text" name="campo1" value="">
    ...
    ...
    <input type="submit" name="submit" value="Enviar formulario">
</form>

if (isset($_POST['submit']) {

    if (!empty($_POST['campo1'])) {
        ...
    }
}