Foros del Web » Programando para Internet » PHP »

Problemas con el Switch... Case

Estas en el tema de Problemas con el Switch... Case en el foro de PHP en Foros del Web. Hola a todos. Estoy empezando a programar en PHP. Tengo una situación con la sentencia Switch... Case. Explico, en una primera parte el usuario debe ...
  #1 (permalink)  
Antiguo 21/03/2009, 14:01
 
Fecha de Ingreso: marzo-2009
Mensajes: 3
Antigüedad: 15 años, 1 mes
Puntos: 0
Problemas con el Switch... Case

Hola a todos.

Estoy empezando a programar en PHP. Tengo una situación con la sentencia Switch... Case. Explico, en una primera parte el usuario debe de escoger entre 10 opciones disponibles (por ejemplo escogo la no. 7), en una segunda parte el usuario debe de escoger entre 3 opciones diponibles (por ejemplo 3). El proceso del switch ejecuta primero la opcion 7 y despues la opcion 3, sin embargo tambien ejecuta la opcion 3 de la parte 8, y la opcion 3 de la parte 9 y la opcion 3 de la parte 10. ¿Que debo de hacer para corregir este error...?
Mil Gracias.
  #2 (permalink)  
Antiguo 21/03/2009, 14:09
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problemas con el Switch... Case

Primero debes mostrarnos cuál es la estructura switch que tienes para que podamos saber por qué está dando problemas.

Lectura recomendada: http://www.php.net/switch
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 21/03/2009, 17:25
 
Fecha de Ingreso: marzo-2009
Mensajes: 3
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Problemas con el Switch... Case

Claro... Gracias.... Es la siguiente.... (Estas son las 3 primeras opciones...)


switch($destino){
case "1": // Bloque 1 (Destino=Tijuana)
switch($categoria){
case "1":
echo "Has seleccionado lo siguiente:","<br>";
echo "Destino: Tijuana", "<br>";
echo "Categoría: Gran Turismo","<br>";
echo "Estancia: $estancia noches","<br>";
echo "Adultos: $adultos","<br>";
echo "Niños: $ninos","<br>";
$importe=((($adultos*$gta)+($ninos*$gtn))*$estanci a);
printf("El total a pagar es de $ %.2f",$importe);
echo " ","<br>";
break;
case "2":
echo "Has seleccionado lo siguiente:","<br>";
echo "Destino: Tijuana", "<br>";
echo "Categoría: Turismo","<br>";
echo "Estancia: $estancia noches","<br>";
echo "Adultos: $adultos","<br>";
echo "Niños: $ninos","<br>";
$importe=((($adultos*$ta)+($ninos*$tn))*$estancia) ;
printf("El total a pagar es de $ %.2f",$importe);
echo " ","<br>";
break;
case "3":
echo "Has seleccionado lo siguiente:","<br>";
echo "Destino: Tijuana", "<br>";
echo "Categoría: Cinco Estrellas","<br>";
echo "Estancia: $estancia noches","<br>";
echo "Adultos: $adultos","<br>";
echo "Niños: $ninos","<br>";
$importe=((($adultos*$cincoa)+($ninos*$cincon))*$e stancia);
printf("El total a pagar es de $ %.2f",$importe);
echo " ","<br>";
break;
default:
echo "Opción no valida...";
}
case "2": // Bloque 2 (Destino=Ciudad Juárez)
switch($categoria){
case "1":
echo "Has seleccionado lo siguiente:","<br>";
echo "Destino: Ciudad Juárez", "<br>";
echo "Categoría: Gran Turismo","<br>";
echo "Estancia: $estancia noches","<br>";
echo "Adultos: $adultos","<br>";
echo "Niños: $ninos","<br>";
$importe=((($adultos*$gta)+($ninos*$gtn))*$estanci a);
printf("El total a pagar es de $ %.2f",$importe);
echo " ","<br>";
break;
case "2":
echo "Has seleccionado lo siguiente:","<br>";
echo "Destino: Ciudad Juárez", "<br>";
echo "Categoría: Turismo","<br>";
echo "Estancia: $estancia noches","<br>";
echo "Adultos: $adultos","<br>";
echo "Niños: $ninos","<br>";
$importe=((($adultos*$ta)+($ninos*$tn))*$estancia) ;
printf("El total a pagar es de $ %.2f",$importe);
echo " ","<br>";
break;
case "3":
echo "Has seleccionado lo siguiente:","<br>";
echo "Destino: Ciudad Juárez", "<br>";
echo "Categoría: Cinco Estrellas","<br>";
echo "Estancia: $estancia noches","<br>";
echo "Adultos: $adultos","<br>";
echo "Niños: $ninos","<br>";
$importe=((($adultos*$cincoa)+($ninos*$cincon))*$e stancia);
printf("El total a pagar es de $ %.2f",$importe);
echo " ","<br>";
break;
default:
echo "Opción no valida...";
}
case "3": // Bloque 3 (Destino=Monterrey)
switch($categoria){
case "1":
echo "Has seleccionado lo siguiente:","<br>";
echo "Destino: Monterrey", "<br>";
echo "Categoría: Gran Turismo","<br>";
echo "Estancia: $estancia noches","<br>";
echo "Adultos: $adultos","<br>";
echo "Niños: $ninos","<br>";
$importe=((($adultos*$gta)+($ninos*$gtn))*$estanci a);
printf("El total a pagar es de $ %.2f",$importe);
echo " ","<br>";
break;
case "2":
echo "Has seleccionado lo siguiente:","<br>";
echo "Destino: Monterrey", "<br>";
echo "Categoría: Turismo","<br>";
echo "Estancia: $estancia noches","<br>";
echo "Adultos: $adultos","<br>";
echo "Niños: $ninos","<br>";
$importe=((($adultos*$ta)+($ninos*$tn))*$estancia) ;
printf("El total a pagar es de $ %.2f",$importe);
echo " ","<br>";
break;
case "3":
echo "Has seleccionado lo siguiente:","<br>";
echo "Destino: Monterrey", "<br>";
echo "Categoría: Cinco Estrellas","<br>";
echo "Estancia: $estancia noches","<br>";
echo "Adultos: $adultos","<br>";
echo "Niños: $ninos","<br>";
$importe=((($adultos*$cincoa)+($ninos*$cincon))*$e stancia);
printf("El total a pagar es de $ %.2f",$importe);
echo " ","<br>";
break;
default:
echo "Opción no valida...";
}
  #4 (permalink)  
Antiguo 22/03/2009, 04:20
 
Fecha de Ingreso: marzo-2009
Mensajes: 30
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Problemas con el Switch... Case

Cita:
Iniciado por hcarretero Ver Mensaje
Claro... Gracias.... Es la siguiente.... (Estas son las 3 primeras opciones...)


switch($destino){
case "1": // Bloque 1 (Destino=Tijuana)
switch($categoria){
...
Se debe que te falta detener el case con break;

Prueba asi:
Código PHP:
<?php
switch($destino){
case 
"1"// Bloque 1 (Destino=Tijuana)
switch($categoria){
case 
"1":
echo 
"Has seleccionado lo siguiente:","<br>";
echo 
"Destino: Tijuana""<br>";
echo 
"Categoría: Gran Turismo","<br>";
echo 
"Estancia: $estancia noches","<br>";
echo 
"Adultos: $adultos","<br>";
echo 
"Niños: $ninos","<br>";
$importe=((($adultos*$gta)+($ninos*$gtn))*$estanci a);
printf("El total a pagar es de $ %.2f",$importe);
echo 
" ","<br>";
break;
case 
"2":
echo 
"Has seleccionado lo siguiente:","<br>";
echo 
"Destino: Tijuana""<br>";
echo 
"Categoría: Turismo","<br>";
echo 
"Estancia: $estancia noches","<br>";
echo 
"Adultos: $adultos","<br>";
echo 
"Niños: $ninos","<br>";
$importe=((($adultos*$ta)+($ninos*$tn))*$estancia) ;
printf("El total a pagar es de $ %.2f",$importe);
echo 
" ","<br>";
break;
case 
"3":
echo 
"Has seleccionado lo siguiente:","<br>";
echo 
"Destino: Tijuana""<br>";
echo 
"Categoría: Cinco Estrellas","<br>";
echo 
"Estancia: $estancia noches","<br>";
echo 
"Adultos: $adultos","<br>";
echo 
"Niños: $ninos","<br>";
$importe=((($adultos*$cincoa)+($ninos*$cincon))*$e stancia);
printf("El total a pagar es de $ %.2f",$importe);
echo 
" ","<br>";
break;
default:
echo 
"Opción no valida...";
}
break; 
///<<< estas te faltan
case "2"// Bloque 2 (Destino=Ciudad Juárez)
switch($categoria){
case 
"1":
echo 
"Has seleccionado lo siguiente:","<br>";
echo 
"Destino: Ciudad Juárez""<br>";
echo 
"Categoría: Gran Turismo","<br>";
echo 
"Estancia: $estancia noches","<br>";
echo 
"Adultos: $adultos","<br>";
echo 
"Niños: $ninos","<br>";
$importe=((($adultos*$gta)+($ninos*$gtn))*$estanci a);
printf("El total a pagar es de $ %.2f",$importe);
echo 
" ","<br>";
break;
case 
"2":
echo 
"Has seleccionado lo siguiente:","<br>";
echo 
"Destino: Ciudad Juárez""<br>";
echo 
"Categoría: Turismo","<br>";
echo 
"Estancia: $estancia noches","<br>";
echo 
"Adultos: $adultos","<br>";
echo 
"Niños: $ninos","<br>";
$importe=((($adultos*$ta)+($ninos*$tn))*$estancia) ;
printf("El total a pagar es de $ %.2f",$importe);
echo 
" ","<br>";
break;
case 
"3":
echo 
"Has seleccionado lo siguiente:","<br>";
echo 
"Destino: Ciudad Juárez""<br>";
echo 
"Categoría: Cinco Estrellas","<br>";
echo 
"Estancia: $estancia noches","<br>";
echo 
"Adultos: $adultos","<br>";
echo 
"Niños: $ninos","<br>";
$importe=((($adultos*$cincoa)+($ninos*$cincon))*$e stancia);
printf("El total a pagar es de $ %.2f",$importe);
echo 
" ","<br>";
break;
default:
echo 
"Opción no valida...";
}
break; 
///<<< estas te faltan
case "3"// Bloque 3 (Destino=Monterrey)
switch($categoria){
case 
"1":
echo 
"Has seleccionado lo siguiente:","<br>";
echo 
"Destino: Monterrey""<br>";
echo 
"Categoría: Gran Turismo","<br>";
echo 
"Estancia: $estancia noches","<br>";
echo 
"Adultos: $adultos","<br>";
echo 
"Niños: $ninos","<br>";
$importe=((($adultos*$gta)+($ninos*$gtn))*$estanci a);
printf("El total a pagar es de $ %.2f",$importe);
echo 
" ","<br>";
break;
case 
"2":
echo 
"Has seleccionado lo siguiente:","<br>";
echo 
"Destino: Monterrey""<br>";
echo 
"Categoría: Turismo","<br>";
echo 
"Estancia: $estancia noches","<br>";
echo 
"Adultos: $adultos","<br>";
echo 
"Niños: $ninos","<br>";
$importe=((($adultos*$ta)+($ninos*$tn))*$estancia) ;
printf("El total a pagar es de $ %.2f",$importe);
echo 
" ","<br>";
break;
case 
"3":
echo 
"Has seleccionado lo siguiente:","<br>";
echo 
"Destino: Monterrey""<br>";
echo 
"Categoría: Cinco Estrellas","<br>";
echo 
"Estancia: $estancia noches","<br>";
echo 
"Adultos: $adultos","<br>";
echo 
"Niños: $ninos","<br>";
$importe=((($adultos*$cincoa)+($ninos*$cincon))*$e stancia);
printf("El total a pagar es de $ %.2f",$importe);
echo 
" ","<br>";
break;
default:
echo 
"Opción no valida...";
}
break; 
///<<< estas te faltan
default:
//// este te servira para dar error.
}

?>
Es un problema comun te puede servir Notepad2 este te colorea el codigo y te muestra si cierras bien las { } es muy util. Aparte distingues mejor el codigo.
  #5 (permalink)  
Antiguo 22/03/2009, 13:07
 
Fecha de Ingreso: marzo-2009
Mensajes: 3
Antigüedad: 15 años, 1 mes
Puntos: 0
Muchas gracias.... hago las modificaciones y te cuento.....

Holo 3du4rd0, muchas gracias... si me funcionaron tus modificaciones... mil gracias... Me sugieres que utilice el Notepad2, yo utilizo el ConText, cual es mejor...?

Última edición por GatorV; 22/03/2009 a las 14:37
  #6 (permalink)  
Antiguo 22/03/2009, 23:38
 
Fecha de Ingreso: marzo-2009
Mensajes: 30
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Problemas con el Switch... Case

Ya vi el ConText pero aun asi me gusta mas el notepad2 ya que es igual al notepad que trae windows y no consume nada, y el coloreo es muy util.

Igual descargalo y pruebalo.

Saludos
  #7 (permalink)  
Antiguo 23/03/2009, 02:09
Avatar de rafaconpu  
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: Problemas con el Switch... Case

Básicamente como bien han explicado ya y veo que solucionado este link, cada vez que se utilice un switch ... case .... para evitar que tras ejecutar la opción correspondiente siga ejecutándose el código, hay que poner siempre break;

Otro caso distinto es que a partir de un case se tenga que ejecutar los siguientes "cases" en tal caso no se pone break;

En tu caso tienes dos switch anidados. Por cada uno de ellos deberás tener los correspondientes break; y dicho sea de paso, tampoco estaría mal tener el código tabulado para una mejor claridad del mismo.

Saludos.
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 18:25.