Foros del Web » Programando para Internet » PHP »

Switch que no me funciona

Estas en el tema de Switch que no me funciona en el foro de PHP en Foros del Web. Tengo el siguiente código. Cuando $dias = 0 no entra al lugar adecuado ¿que estoy haciendo mal? Gracias anticipadas. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original ...
  #1 (permalink)  
Antiguo 09/12/2011, 16:34
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Switch que no me funciona

Tengo el siguiente código.
Cuando $dias = 0 no entra al lugar adecuado
¿que estoy haciendo mal?

Gracias anticipadas.

Código PHP:
Ver original
  1. $dias == 0;
  2.  
  3.     switch ($dias) {
  4.         case ($dias == 0): # hoy
  5.             $color = "#00FF00";
  6.                 $mensaje = 'La fecha indicada es la fecha de hoy.';
  7.                 break;
  8.         case ($dias < 0): # anterior
  9.             $color = "#9900FF";
  10.                 $mensaje = abs($dias).' días de adelanto respecto a la fecha de hoy.';
  11.                 break;
  12.         case ($dias > 0): # posterior
  13.             $color = "#FF6699";
  14.                 $mensaje = abs($dias).' días de atraso respecto a la fecha de hoy.';
  15.                 break;
  16.     }

Última edición por Bier; 09/12/2011 a las 16:35 Razón: Acento
  #2 (permalink)  
Antiguo 09/12/2011, 16:37
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Switch que no me funciona

Te recomiendo urgentemente leer la documentación para el uso de Switch
  #3 (permalink)  
Antiguo 09/12/2011, 16:44
 
Fecha de Ingreso: noviembre-2008
Mensajes: 33
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Switch que no me funciona

El switch no es un if encadenado, para eso usa if... elseif .... else
Lee la documentacion de las cosas de php que uses para evitar estos errores ;)
  #4 (permalink)  
Antiguo 09/12/2011, 17:00
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Switch que no me funciona

Les agradezco sus comentarios, pero ahora les regreso la respuesta:

Estimado ocp001a:
"Te recomiendo urgentemente leer la documentación para el uso de Switch", ya que tu respuesta es muy incorrecta, claro que se puede, incluso viene en el manual:
http://php.net/manual/es/control-structures.switch.php

Estimado Desaroll:
Te respondo lo mismo, ¿imaginas si debo realizar 100 comparaciones?, el código quedaría enorme. Para ello existe el SWITCH, solo que no me funciona cuando comparo contra 0 (cero), algún error debo tener, o quizá no debo hacer comparaciones contra 0, por ello solicité ayuda a quien sepa la causa de ello.

Les comento que lo he resuelto de manera interna, pero tengo la intranquilidad en que es lo que tengo mal mi SWITCH al comparar contra 0.

Lo anterior lo he escrito sin ánimo de crear polémica, si no tienen una respuesta probada u orientativa, solicitaría no poner más respuestas a este hilo.

Gracias a los dos.
  #5 (permalink)  
Antiguo 09/12/2011, 17:05
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: Switch que no me funciona

Haber tienes un error muy grave, claro que un switch no es el mas indicado para tu caso en switch es para cosas concretas es decir en case es asi
switch($dias)
case '0':
echo "olo que quieras";
break;
pero lo que deberias de usar es un if con elseif
seria igual cambiarn el case por if y elseif si no sabes hacerlo pideme ayuda. espero que me entiendas, por cierto si usas if quita el switch jeje. un saludo.
  #6 (permalink)  
Antiguo 09/12/2011, 17:09
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Switch que no me funciona

Cita:
Iniciado por edie8 Ver Mensaje
Haber tienes un error muy grave, claro que un switch no es el mas indicado para tu caso en switch es para cosas concretas es decir en case es asi
switch($dias)
case '0':
echo "olo que quieras";
break;
pero lo que deberias de usar es un if con elseif
seria igual cambiarn el case por if y elseif si no sabes hacerlo pideme ayuda. espero que me entiendas, por cierto si usas if quita el switch jeje. un saludo.
Gracias por tu ayuda, pero el código que he puesto claro que funciona, solo la comparación contra 0 con me arroja el resultado correcto.

Esta funcionalidad de SWITCH se encuentra documentada en:
http://www.php.net/manual/es/control...itch.php#93342
Incluso viene un ejemplo al respecto.

Lo que he resuelto, es que todas las comparaciones las hago dentro del SWITCH, pero la comparación contra 0 la he hecho con un IF.

A quien suponga que no se puede hacer lo que digo, le agradeceré pueda leer:
http://www.php.net/manual/es/control...itch.php#93342 y en base a ello pueda responder con mayor conocimiento de ello.

Gracias
  #7 (permalink)  
Antiguo 09/12/2011, 17:11
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: Switch que no me funciona

Oye tu variable la tienes asi $dias==0;????
esta mal seria $dia=0;
  #8 (permalink)  
Antiguo 09/12/2011, 17:15
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: Switch que no me funciona

E probado tu codigo con la modificacion y me funciona bien asique solo era eso te sobraba un igual para decirle a la variable que es = a 0 y no es ==0 eso es la correccion y funcionaria pruebalo y me comentas vale? lo del error de antes meti la pata estaba bien sorry. un saludo.
  #9 (permalink)  
Antiguo 09/12/2011, 17:31
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Switch que no me funciona

Gracias edie8

El error que comentas ya lo corregí, (Si te refieres al renglón1). Lo escribí aquí "al vuelo", aunque en mi programa lo tengo correcto.

Por cierto, ya probé dentro del Switch con = y con == pero no me funciona de ninguna forma.
Me da curiosidad de cual es el problema, hasta ahora todo lo que he utilizado en PHP es perfecto, seguramente hay un "pero" en la compración a 0. Incluso el manual de PHP no tiene ejemplo de comparación a 0.

De todas formas no me funciona la comparacion con 0.

El código es:

Código PHP:
Ver original
  1. $dias = 0;
  2.  
  3.     switch ($dias) {
  4.         case ($dias == 0): # hoy
  5.            $color = "#00FF00";
  6.                 $mensaje = 'La fecha indicada es la fecha de hoy.';
  7.                 break;
  8.         case ($dias < 0): # anterior
  9.            $color = "#9900FF";
  10.                 $mensaje = abs($dias).' días de adelanto respecto a la fecha de hoy.';
  11.                 break;
  12.         case ($dias > 0): # posterior
  13.            $color = "#FF6699";
  14.                 $mensaje = abs($dias).' días de atraso respecto a la fecha de hoy.';
  15.                 break;
  16.     }

Gracias por tu tiempo, muy agradecido.
Seguiré probando y revisando manuales.

Saludos
  #10 (permalink)  
Antiguo 09/12/2011, 17:38
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: Switch que no me funciona

ami me pasa lo mismo el 0 me sale el mensaje del segundo case y nose por que segun veo me parece que el codigo esta bien algo se nos escapa y de nada para eso estamos para ayudarnos. un saludo y suerte.
  #11 (permalink)  
Antiguo 09/12/2011, 17:50
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Switch que no me funciona

He probado varios formatos, por ejemplo el siguiente:

Código PHP:
Ver original
  1. case (0): # hoy
  2.            $color = "#00FF00";
  3.                 $mensaje = 'La fecha indicada es la fecha de hoy.';
  4.                 break;

Pero no funciona.

Seguiremos investigando.
Saludos
  #12 (permalink)  
Antiguo 09/12/2011, 18:00
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: Switch que no me funciona

esque para poner el 0 no tenes que ponerlo entre parentesis sino entre comiyas simples asi si funciona lo he pprobado en mi servidor local. ponlo como te digo y me dices si te funciona. y si pones eso con tu codigo de antes ya si funciona ese era el fallo jeje era simple jeje.
  #13 (permalink)  
Antiguo 09/12/2011, 18:03
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Switch que no me funciona

Disculpa, no entendí en donde las comillas ¿Puedes poner el código?

Gracias
  #14 (permalink)  
Antiguo 09/12/2011, 18:06
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: Switch que no me funciona

este es tu codigo no
Código PHP:
$dias 0;
 
    switch (
$dias) {
        case (
$dias == 0): # hoy
            
$color "#00FF00";
                
$mensaje 'La fecha indicada es la fecha de hoy.';
                break;
        case (
$dias 0): # anterior
            
$color "#9900FF";
                
$mensaje abs($dias).' días de adelanto respecto a la fecha de hoy.';
                break;
        case (
$dias 0): # posterior
            
$color "#FF6699";
                
$mensaje abs($dias).' días de atraso respecto a la fecha de hoy.';
                break;
    } 
pos cambia lo por este y ami me funciona
Código PHP:
$dias 0;
 
    switch (
$dias) {
        case 
'0'# hoy
            
$color "#00FF00";
                
$mensaje 'La fecha indicada es la fecha de hoy.';
                break;
        case (
$dias 0): # anterior
            
$color "#9900FF";
                
$mensaje abs($dias).' días de adelanto respecto a la fecha de hoy.';
                break;
        case (
$dias 0): # posterior
            
$color "#FF6699";
                
$mensaje abs($dias).' días de atraso respecto a la fecha de hoy.';
                break;
    } 
Pruebalo y me dices si te funciono va??
  #15 (permalink)  
Antiguo 09/12/2011, 18:25
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Switch que no me funciona

Asunto resuelto:

El problema es que el 0 no debe estar contenido en paréntesis, es decir debe estar como a continuación se indica:

Con ello se cumple a la perfección con el manual de PHP.
Gracias edie8, tu ayuda a sido muy valiosa.

Cada vez me maravilla más PHP.


Código PHP:
Ver original
  1. $dias = 0;
  2.  
  3.     switch ($dias) {
  4.         case 0: # hoy
  5.            $color = "#00FF00";
  6.                 $mensaje = 'La fecha indicada es la fecha de hoy.';
  7.                 break;
  8.         case ($dias < 0): # anterior
  9.            $color = "#9900FF";
  10.                 $mensaje = abs($dias).' días de adelanto respecto a la fecha de hoy.';
  11.                 break;
  12.         case ($dias > 0): # posterior
  13.            $color = "#FF6699";
  14.                 $mensaje = abs($dias).' días de atraso respecto a la fecha de hoy.';
  15.                 break;
  16.     }
  #16 (permalink)  
Antiguo 10/12/2011, 04:10
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: Switch que no me funciona

De nada y para eso esta este foro para ayudarnos todos. Un saludo y me alegro de haber ayudado.

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 16:13.