Unas preguntas sobre el"isset" en PHP

varuk

Hola.

  1. En una página con un formulario tengo una condución de que si metes bien el nombre y coincide con el que hay en la base de datos se cumple que:

$_SESSION['usuario_valido']=$usuario;

Entonces si se cumple en la siguiente página, a la que soy redirigido automáticamente, hago otra condición para que si "usuario_valido" está registrado se vea la página y si no, no se vea.

Lo he probado a ponerlo así:
if ($_SESSION['usuario_valido'])
{

Y así:
if (isset($_SESSION['usuario_valido']))
{

Con ambas funciona. Pero me pregunto ¿Qué diferencia hay y cual es mejor acostumbrarse a usar para estos casos?

2. Y una última cuestión. Me han dicho que para una condición escriba esto:
if (isset($SESSION['usuario_valido']) && $SESSION['usuario_valido'])
{

Y digo yo ¿Por qué se repite dos veces eso? Yo lo he puesto con un sólo "$_SESSION['usuario_valido']" y va bien. ¿Alguna explicación?

Muchas gracias ^.

r2d2rigo

isset() comprueba que la variable este definida y no sea NULL, el if creo que solo comprueba que este definida.

varuk

Gracias.

He cambiado el IF por este:

if (isset($SESSION['usuario_valido']) && !empty($SESSION['usuario_valido']))

NeB1

ten en cuenta que

$a = '';

$b = 0;

if(isset($a) && isset($b))
   echo 'hola';

Devolverá 'hola' por pantalla.

Es decir, si la variable vale 0, o es una cadena vacía, isset devuelve TRUE porque está definida. Creo que if($a) devuelve true si $a está definida, y no vale 0 o FALSE.

ZaO

si el usuario no esta reguistrado que valor le das a la varibale de session?

guner

Es muy distinto, a ver si lo entiendes con esto.

<?php

$var1 = 0;
$var2 = false;
$var3 = null;

print 'if(isset($var1)) evalua: '; var_dump(isset($var1));
print 'if(     ($var1)) evalua: '; var_dump(      $var1);
print "\n";

print 'if(isset($var2)) evalua: '; var_dump(isset($var2));
print 'if(     ($var2)) evalua: '; var_dump(      $var2);
print "\n";

print 'if(isset($var3)) evalua: '; var_dump(isset($var3));
print 'if(     ($var3)) evalua: '; var_dump(      $var3);
print "\n";

print 'if(isset($var4)) evalua: '; var_dump(isset($var4));
print 'if(     ($var4)) evalua: '; var_dump(      $var4);
print "\n";

print 'Sabemos que if(0) se comporta igual que if(false)' . "\n";
print 'Qué pasa con if(null)';
print "\n";

if (NULL) print 'NULL ~= true'; else print 'NULL ~= false';

Si lo ejecutas obtienes esa salida:

if(isset($var1)) evalua: bool(true)
if(     ($var1)) evalua: int(0)

if(isset($var2)) evalua: bool(true)
if(     ($var2)) evalua: bool(false)

if(isset($var3)) evalua: bool(false)
if(     ($var3)) evalua: NULL

if(isset($var4)) evalua: bool(false)
if(     ($var4)) evalua: NULL

Sabemos que if(0) se comporta igual que if(false)
QuÚ pasa con if(null)
NULL ~= false

Como verás, en el primer caso es donde obtienes discordancia entre las dos comprobaciones, ya que $var1 = 0 claramente está definida, pero if la evaluará como false.

Tunnecino

También podrías usar empty();

$var1 = 0;
$var2 = null;
$var3 = '';

if(empty($var1-3) echo 'Vacias';

Y la web imprime Vacías.

varuk

Am vale, lo pillo. Muchas gracias.

#5 Lo tengo así

<?php

include("conexion.php");

session_start();
$usuario = $POST['usuario'];
$contrasena = $
POST['contrasena'];

if ($usuario && $contrasena)
{
$resultado = mysql_query("SELECT * FROM administrar WHERE usuario='$usuario' AND contrasena='$contrasena'");
if (mysql_num_rows($resultado)>0)
{
//Si encuentra coincidencias asigna el $usuario a la variable "usuario_valido" y registra ésta última.
$_SESSION['usuario_valido']=$usuario;
}

}

//Si "usuario_vaido ha quedado registrado, porque se ha encontrado el usuario y contraseña, entonces redirige a la página privada
if (isset($SESSION['usuario_valido']) && !empty($SESSION['usuario_valido']))
{
header("Location: admin.php");
exit;
// ese exit lo ponemos para asegurar que no se ejucatará más código después de él
}

echo ("<form method='post' action='$PHP_SELF'>
Usuario</br><input type='text' name='usuario'></br>
Clave</br><input type='text' name='contrasena'></br></br>
<input type='submit' name='Submit' value='Entrar'>
</form>");

?>

Si el usuario no está registrado entonces no crea la variable $_SESSION['usuario_valido'], y por tanto no redirige la página y en la siguiente página, que se llama "admin.php", no se puede entrar porque también hay una condición de sólo entrar si existe la variable "usuario_valido" y si ésta no está vacia. Así lo he hecho.

Usuarios habituales

  • varuk
  • Tunnecino
  • guner
  • ZaO
  • NeB1
  • r2d2rigo