Foros del Web » Programando para Internet » PHP »

Errores por variables no definidas

Estas en el tema de Errores por variables no definidas en el foro de PHP en Foros del Web. Hola a todos. Tengo mi php.ini configurado para ser sensible a cualquier error, por más minimo que sea. El asunto... es que se me presenta ...
  #1 (permalink)  
Antiguo 22/09/2004, 19:07
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
Errores por variables no definidas

Hola a todos.

Tengo mi php.ini configurado para ser sensible a cualquier error, por más minimo que sea. El asunto... es que se me presenta la siguiente incognita...¿son realmente importantes los errores por índices no definidos? Por ejemplo:

Notice: Undefined index: username in blablablah...panel.php on line 4

Resulta que ese "username" es un $_SESSION['username'] que no existe, debido que la sesión no existe. Por lo tanto devuelve ese error.

Por ejemplo quiero hacer algo tan sencillo como esto:

Código PHP:
include('dbconn.php');
$ssql="SELECT * FROM users WHERE username='$_SESSION[username]'";
$rs=mysql_query($ssql);
if(!
$row=mysql_fetch_array($rs)){
  if(
$row['password']=!$_SESSION['password']){
    
header('index.php');
  }

Si el usuario no se ha logueado (si no existe la sesión) entonces el usuario no podrá ver la página gracias al header(). Obviamente, si el usuario no se ha logueado, la sesión no existe y me devuelve el error antes mencionado.

¿Son realmente importantes ese tipo de errores?

La única forma de evitarlos sería con:

$var=isset($_SESSION['username'])?$_SESSION['username']:'';

Pero hacer eso con cada superglobal es un fastidio!!!

¿Qué me recomiendan?
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #2 (permalink)  
Antiguo 22/09/2004, 20:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues es por tu seguridad .. si te molesta eso, desactiva los mensajes de error usando la función: error_reporting() .. pero que sepas que los errores estarán ahí mismo, sólo los "tapas". Tus archivos de registros de errores de tu servidor igualmente seguiran generando esa entrada de error en sus log's ..

Programa bien aunque te sea un fastidio.

Puedes automatizar un poco el proceso teníendo en cuenta que los "superglobal" son arrays .. así que puedes recorrerlos con bucles como foreach() para aplicar un isset() a cada elemento que lees e incluso crear una variable de mismo nombre usando "variables variables"

Código PHP:
foreach ($_SESSION as $variable=>$valor){
   if (!empty(
$valor)){
      
// "variables variables": crear una variable dinámicamente si tiene valor.
      
$$variable=$valor;
   } else {
      $
$variable='';
   }


Un saludo,

Última edición por Cluster; 22/09/2004 a las 20:19
  #3 (permalink)  
Antiguo 22/09/2004, 20:55
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
Tienes razón... no me queda otra que validar primero si existe o no el superglobal.

Un saludo y gracias por tu sugerencia.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #4 (permalink)  
Antiguo 23/09/2004, 00:12
 
Fecha de Ingreso: abril-2003
Mensajes: 93
Antigüedad: 21 años
Puntos: 0
Hola Gente.
Yo tengo los mismos problemas. Soy nuevo en esto de la programacion y voy pasito a pasito asi que os rogaria que me explicasis para tontos como hacer la solucion esa de las variables, ya que el codigo ese que habeis puesto no me entero de nada.
por cierto ¿que es isset()?
  #5 (permalink)  
Antiguo 23/09/2004, 01:41
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Supercoco, todas las funciones estan en el manual de www.php.net . Usa su buscador para buscar isset.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 23/09/2004, 07:44
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
isset() es una función que verifica si la variable existe o no... es como preguntar "Is set $variable?"

Devolverá TRUE o FALSE dependiendo del resultado. Entonces, cuando hablamos de los arrays superglobales como $_SESSION, $_COOKIE, $_POST o $_GET... etc... hay momentos en que dichos arrays no están definidos y hay que definirlos para que no lance error.

En una linea puedes hacerlo asi:

Código PHP:
$var=isset($_SESSION['username'])?$_SESSION['username']:''
Eso es lo mismo que: Si está definido $_SESSION['username'] entonces $var = $_SESSION['username'], de lo contrario $var = '' (nada).

Posteriormente trabajarás con $var y no con $_SESSION['username'], asi el sistema no te devolverá errores.

No se si me expliqué bien, cualquier cosa preguntas!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #7 (permalink)  
Antiguo 23/09/2004, 07:46
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
Ahh por cierto, esa forma de hacer un if else en una sola linea se le llama "operador ternario" o algo asi... (No estoy seguro)... josemi o Cluster deben conocer el nombre verdadero.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:07.