Foros del Web » Programando para Internet » PHP »

¿Porque me pasa esto?

Estas en el tema de ¿Porque me pasa esto? en el foro de PHP en Foros del Web. Hola compañeros, Resulta que desde hace un tiempo unos meses, al programar en local con XAMP me sale como un error que dice que no ...
  #1 (permalink)  
Antiguo 01/07/2013, 03:13
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 10 meses
Puntos: 5
¿Porque me pasa esto?

Hola compañeros,
Resulta que desde hace un tiempo unos meses, al programar en local con XAMP me sale como un error que dice que no he definido la variable, peor funciona perfectamente. Me explico:
Yo siempre he programado igual, por ejemplo en un if else, dentro pongo una variable y directamente la lleno con lo que sea. Asi me enseñaron y hace poco nunca tube problemas. Que a cambiado?, que hago mal? estoy hablando de PHP.

Undefined index: user in /loquesea/app/includes/header.php on line 9


Muchas gracias
  #2 (permalink)  
Antiguo 01/07/2013, 03:28
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: ¿Porque me pasa esto?

El problema no es del condicional IF... es de que estas accediendo a una posicion de un array no definida, ej:

$frutas = array('manzana','pera');
echo $fritas[0]; // manzana
echo $fritas[1]; // pera
echo $fritas[2]; // Undefined index !
__________________
Salu2!
  #3 (permalink)  
Antiguo 01/07/2013, 03:32
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: ¿Porque me pasa esto?

No es un error, sólo un aviso. Por eso funciona.

Según el manual:
Cita:
Depender del valor predeterminado de una variable sin inicializar es problemático al incluir un archivo en otro que use el mismo nombre de variable. También es un importante riesgo de seguridad cuando la opción register_globals se encuentra habilitada. Un error de nivel E_NOTICE es emitido cuendo se trabaja con variables sin inicializar, con la excepción del caso en el que se anexan elementos a un array no inicializado. La construcción del lenguaje isset() puede ser usada para detectar si una variable ya ha sido inicializada.
Entonces lo suyo es declarar las variables o arrays antes de referenciarlos, o al menos usar isset() para comprobar que existen.

Si antes no te ocurría y ahora si, será porque se cambió la configuración de PHP para mostrar E_NOTICE. Si quieres evitarlo, puedes declarar en tu fichero:

Código PHP:
Ver original
  1. error_reporting(E_ALL ^ E_NOTICE);

Más info: http://www.php.net/manual/es/errorfu...figuration.php

Como ves el propio manual recomienda tenerlos activados, al menos en el entorno de desarrollo. En producción luego realmente no interesará mucho.
  #4 (permalink)  
Antiguo 01/07/2013, 05:07
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: ¿Porque me pasa esto?

Muchisimas gracias pzin, me a servido de mucho, sin animo de abusar, me recomiendas que las defina y luego las use o continuo como hasta ahora?

Gracias de nuevo.
  #5 (permalink)  
Antiguo 01/07/2013, 05:21
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: ¿Porque me pasa esto?

Dependerá un poco del código. Si estás intentando referenciar el índice de un array que no existe, habría que ver porqué lo estás haciendo. Igual es que estás usando algún bucle e implementándolo mal, o calculando mal ese índice (empezar por 1 en lugar de 0) o cualquier otra cosa.
  #6 (permalink)  
Antiguo 01/07/2013, 08:24
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: ¿Porque me pasa esto?

No, no es un array, mira te explico, yo tengo una clase en css que se llama errorInput entonces hago lo siguiente:

if($_POST['a'] == 1){
$msg = Ok;
$claseError = '';
}else{
$msg = 'Fallo';
$claseError = 'errorInput';
}


Tanto $msg, como $claseError las estoy creando y llenando en el if else y simplemente si falla la comprobacion se le aplica la clase a la input. Y funciona pero me da los errores anteriormente dichos.

<input class="<?php echo $claseError; ?>" name="suma" />
<p><?php echo $msg; ?></p>

Esto es mas o menos lo que tengo.
  #7 (permalink)  
Antiguo 01/07/2013, 08:28
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: ¿Porque me pasa esto?

el problema es $_POST['a']

Supongo que no siempre estas enviando esa variable a la pagina, y el error te dice jsutamente eso, no existe el indice a.

El if deberia preguntar justamente eso. Ademas, tampoco es muy prolijo que iguales a 1 o a 0, porque justamente son booleanos.


Código PHP:
//pregunta si existe a, y si es distinta a 0
if(  isset($_POST['a']) && $_POST['a']){

    
//foo

__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives

Etiquetas: Ninguno
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 07:19.