Foros del Web » Programando para Internet » PHP »

Problema con Switch e If

Estas en el tema de Problema con Switch e If en el foro de PHP en Foros del Web. Compañeros/as: Paso a comentarles de un inconveniente que estoy teniendo con un sistema que estoy desarrollando para el ministerio de educación de mi provincia. En ...
  #1 (permalink)  
Antiguo 15/03/2010, 17:35
 
Fecha de Ingreso: julio-2009
Ubicación: Córdoba capital
Mensajes: 8
Antigüedad: 14 años, 8 meses
Puntos: 0
Problema con Switch e If

Compañeros/as:

Paso a comentarles de un inconveniente que estoy teniendo con un sistema que estoy desarrollando para el ministerio de educación de mi provincia.

En si, es un 90% funcional ya, estoy en fases finales; pero me he encontrado con un inconveniente grave.

Lo que ocurre es que, como verán en el codigo, tengo una serie de variables y propiedades que evaluo para obtener el nombre de la tabla donde se almacenarán los datos.

tipo_carga = string que solo recibe los datos "I" ó "T" (Inicial ó Trayectoria)
anio_actual = NO es el año de fecha, es el año de educación (1er año, 2do etc), recibe enteros (del 1 al 6) y por defecto está en 0. Este cambia a string 'total' cuando se almacena la fila de totales unicamente.


Codigo problematico:
Código PHP:
$tabla "rmatri_ini10.";
        
        
        switch(
$this->tipo_carga)
            {
                case 
'I': if($this->anio_actual == 'total') { $tabla .= "t_inicial_totales"; } else { $tabla .= "t_inicial"; } break;
                case 
'T': if($this->anio_actual == 'total') { $tabla .= "t_trayectoria_totales"; } else { $tabla .= "t_trayectoria"; } break;
            } 
El inconveniente se presenta en Trayectoria; como verán las condiciones son exactamente iguales y opera perfectamente para cualquier caso.

Solo al cargar las escuelas que dan clases de Artistica (no tienen años, solo niveles), ocurre el inconveniente; lo cual hace que el bucle que recorre el array de niveles, guarde unicamente la fila totales n cantidad de veces.
Es decir, solo guarda la fila de totales y no las otras.

Para que esto ocurra, la UNICA y si, repito, la unica, posibilidad es que el valor de la propiedad anio_actual esté entrando como 'total'; pero al depurar, veo que está en 0. Por ende, php/apache interpreta que 0 es igual a total, cuando no deberia.

Como dije, para cualquier otro caso, distintos tipos de carga y tipos de educación, etc etc etc, funciona perfectamente.


Quisiera que me tiren alternativas para poder ver de solucionar el inconveniente ya que tengo que presentarlo a la brevedad.

Desde ya, muchisimas gracias.


Saludos desde Córdoba.

Ofesad


Ps: Si algo no está muy claro, puedo ampliarlo. Pregunten con confianza.
  #2 (permalink)  
Antiguo 15/03/2010, 18:53
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
Respuesta: Problema con Switch e If

if(isset($tuvariable))?????
  #3 (permalink)  
Antiguo 15/03/2010, 19:02
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 9 meses
Puntos: 88
Respuesta: Problema con Switch e If

tienes un gran error, estas intentado compara tipos de datos diferentes

$this->anio_actual es de tipo númerico y dices que va de 1 a 6 y por defecto esta en 0 y 'total' es una cadena de texto, cuando haces eso, php, intenta sacar algun número del string y si no lo encuentra le asigna 0 es decir total se esta cambiando a un número que es 0(cero).

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #4 (permalink)  
Antiguo 15/03/2010, 19:15
 
Fecha de Ingreso: julio-2009
Ubicación: Córdoba capital
Mensajes: 8
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema con Switch e If

Cita:
Iniciado por bacdavi Ver Mensaje
if(isset($tuvariable))?????

Agradezco tu aporte, pero la variable esta seteada, dado que es una propiedad de la clase (es decir que ya está declarada), asi que siempre tiene un valor, en este caso 0, que es el valor que le asigno por defecto.

Por otro lado, si no estuviese declarada, el sistema daria una excepción encontrarse con una variable/propiedad no declarada.

La verdad es que este tema es increiblemente simple, un problema casi estupido... pero no tiene nada de lógica =S
No termino de comprender que ocurre que no dá el resultado que deberia dar.

Saludos desde Córdoba.

Ofesad.
  #5 (permalink)  
Antiguo 15/03/2010, 19:22
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 9 meses
Puntos: 88
Respuesta: Problema con Switch e If

te repito, son los tipos de datos, de dejo esta post donde se trato el tema.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #6 (permalink)  
Antiguo 15/03/2010, 19:24
 
Fecha de Ingreso: julio-2009
Ubicación: Córdoba capital
Mensajes: 8
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema con Switch e If

Cita:
Iniciado por eits Ver Mensaje
tienes un gran error, estas intentado compara tipos de datos diferentes

$this->anio_actual es de tipo númerico y dices que va de 1 a 6 y por defecto esta en 0 y 'total' es una cadena de texto, cuando haces eso, php, intenta sacar algun número del string y si no lo encuentra le asigna 0 es decir total se esta cambiando a un número que es 0(cero).

saludos.

Totalmente de acuerdo con lo que dices, es cierto que es numerico, pero es extraño aun asi; dado que en usos anteriores de la variable funciona correctamente.

Voy a explicar un poco mas del sistema...
Tenemos 2 tipos de carga
I = Inicial
T = Trayectoria
(son 2 formularios de carga de datos, similares, pero con varias diferencias)
Tenemos 4 tipos de educación
1 = Comun
2 = Especial
3 = adultos
4 =Artistica

Digamos que estoy cargando la Trayectoria de educación Comun.
Este tipo de educación tiene 6 años.

Empieza un bucle...
Código PHP:
private function guardar_comun()
    {
        for(
$this->anio_actual 1$this->anio_actual <= 6$this->anio_actual++)
        {
            
$this->guardar_fila();
            
$this->checkFilas();
        }
        
$this->anio_actual 'total';
        
$this->guardar_fila();
        
$this->checkFilas();
        
$this->checkColumnas();
    } 
Como verás, se setea el valor de la propiedad anio_actual a 'total'; y funciona correctamente.

En el caso de Artistica, no ocurre lo mismo, dado que dicho tipo de educación NO posee años, sino Niveles (Comun tb los posee, pero no voy a ponerme a explayar en el tema).

Código PHP:
private function guardar_artistica()
    {
        
        for(
$this->arr_nivel_actual 0$this->arr_nivel_actual <= sizeof($this->id_niveles)-1$this->arr_nivel_actual++)
            {
                
$this->id_nivel_actual $this->id_niveles[$this->arr_nivel_actual];
                
$this->nivel_actual_format strtolower($this->niveles[$this->arr_nivel_actual]);
                
$this->nivel_actual_format str_replace('.'""$this->nivel_actual_format);
                
$this->nivel_actual_format str_replace(' '"_"$this->nivel_actual_format);
                                
                
$this->guardar_fila();
                
$this->checkFilas();
            }
        
$this->anio_actual 'total';
        
$this->guardar_fila();
        
$this->checkFilas();
        
$this->checkColumnas();
    } 
Con lo que me has dicho, me ha hecho pensar que deberia modificar la función de Artistica, agregandole, previamente a modificar el valor de la propiedad anio_actual, lo siguiente:
Código PHP:
$this->anio_actual ''
Ahora voy a ver de levantar el servidor y la base de datos para ver si funciona correctamente de dicha forma.

Saludos desde Córdoba.

Ofesad.
  #7 (permalink)  
Antiguo 15/03/2010, 19:36
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 9 meses
Puntos: 88
Respuesta: Problema con Switch e If

con lo que planteas creo que tambien puedes preguntar primero que tipo de dato es el valor de la variable $this->anio_actual

para ello te puedes ayudar de is_string o is_int

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.

Etiquetas: switch
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 05:29.