isset() no tiene que fallar y no es una alias de empty ni nada similar. Los dos tienes propósitos diferentes, si dices que ah fallado es porque en realidad el fallo es lógico.
Yo no he dicho que isset() sea un alias de empty. Pero para este propósito a mí empty me funciona mejor que isset(). isset lo que comprueba efectivamente es que la variable exista, que no sea un valor NULL, sin embargo por mi experiencia empty me ha sido mucho más eficaz para este caso concreto.
--EDIT------
Para demostrar que no es un fallo lógico sino del funcionamiento de la función
para este caso concreto. Que quede claro, que yo he dicho que prefiero usar empty para este caso concreto ya que isset "falla", y
aquí tenéis una prueba.
Este es el código fuente de ese fichero:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PRUEBA</title>
</head>
<body>
<?php
echo "<div style='padding: 10px; background-color: #C8DBEA; border: 1px solid #5887C0;'>EN ESTE MOMENTO SE USA LA FUNCIÓN ISSET<br />";
if(isset($_POST['nombre'])){ echo "La variable nombre contiene algo";
}else{
echo "La variable nombre NO contiene nada";
}
echo "</div><br />";
echo "<div style='padding: 10px; background-color: #C8DBEA; border: 1px solid #5887C0;'>EN ESTE MOMENTO SE USA LA FUNCIÓN EMPTY<br />";
if(!empty($_POST['nombre'])){ echo "La variable nombre contiene algo";
}else{
echo "La variable nombre NO contiene nada";
}
echo "</div><br /><br />";
?>
<form action="test.php" method="POST">
<input type="text" name="nombre" /><br />
<input type="text" name="edad" /><br />
<input type="submit" value="Enviar" />
</form>
</body>
</html>
Os pido que hagáis una prueba:
- Entrad en la web, y veréis que ambas funciones dicen que el campo nombre no contiene nada, luego NO RELLENÉIS ningún campo y pulsad en "Enviar". La función isset dirá que el campo SÍ contiene algo mientras que empty dirá que NO. No es que la función no funcione correctamente, ya que al pulsar a enviar el formulario efectivamente la variable $_POST['nombre'] ya no es NULL pero sin embargo está vacía por lo tanto no cumple nuestro propósito. Es por esta razón por la que aconsejo usar !empty, para este caso concreto, que como podéis ver sigue diciendo que el campo nombre está vacío.
- Si se escribe algo en el campo nombre obviamente ambas funciones dirán que el campo nombre contiene algo.
Si alguien no cree que este es el código escrito en el fichero test.php puede copiar y pegar y hacer la prueba por sí mismo.
Espero que así quede aclarado el por qué digo que para este propósito recomiendo encarecidamente usar empty() en lugar de isset().
Según yoya, isset comprueba que se encuentre alojada x variable en la memoria, no es asi?
Y empty comprueba si está vacía. Ahora que pasa si le paso a empty la variable x y esta no fue declarada (no existe).
Respondiendo a tu pregunta Castg!, como puedes ver en el ejemplo, no pasa nada. Si le pasas a empty una variable no declarada pues la dará como vacía, y si le pasas una declarada pues simplemente comprobará si efectivamente está vacía o no, creo que con el ejemplo queda claro.
Saludos.