Foros del Web » Programando para Internet » PHP »

Ayuda con Switch

Estas en el tema de Ayuda con Switch en el foro de PHP en Foros del Web. Holas, he aquí con una nueva interrogante... comento un poco, estoy haciendo una page con galeria de imagenes, las opciones segun la var $op viene ...
  #1 (permalink)  
Antiguo 17/05/2004, 13:40
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
Ayuda con Switch

Holas, he aquí con una nueva interrogante...

comento un poco, estoy haciendo una page con galeria de imagenes, las opciones segun la var $op viene de una pagina donde se carga la info del personaje, etc etc entonces hay un link a galería, donde obvio se pueden ver las imagenes correspondientes al monicaco.

envio la op a la page y ahi entra al switch donde se hira a la ruta que contiene las imagenes, como verla y todo esta Ok, lo que solo me complica es que, no todos los personajes tienen fotos =(, por ende cuando supongamos OP entra con melchi,

(la page donde se ven toda la info del personaje es una plantlla que para todos tiene los mismos links) por ende todos van a tener siempre el mismo link "Galeria" (es así por que se espera poder en algun momento que todos tengan al menos una foto)

pero por mientras

en la page que recibe Op=melchi sera algo así...


Código PHP:
Include "top.php";
switch(
$op)
{
case 
"vengador":
include(
"vengador/pics/algo.php"); // dir con las pics eso ya hecho 
break;

case 
"spiderman":
include(
"spiderman/pics/algo.php"); // dir con las pics eso ya hecho
break;
}
Include 
"down.php"

(ese switch sera enorme cuando este completo, pero resulta demasiado funcional =) para el scripts de imagenes que estoy utilizando, que se mueve por los directorios que uno le indica, sin db ni nada, pero ese no es el punto ahora..)

como ven melchi no aparece ahí, entonces solo parece top y down y en el mdio NADA, pero quiero ver como hacer que si la $op, no esta dentro de las opciones vaya a una page que diga, este personaje no tiene fotos por ahora, etc, etc....me imagino algo

if $op no esta en las opciones CASE
include "default.php"; // page con mensaje de que no hay pics.. para esa OP en este momento, vuelva luego...

Es eso basicamente... y ando perdio como hacerlo...

Nesky.
  #2 (permalink)  
Antiguo 17/05/2004, 15:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En la estructura switch tienes el caso "default" para definir "todo lo que no esté en los anteriores case: "

www.php.net/switch

Cita:
(ese switch sera enorme cuando este completo, pero resulta demasiado funcional =)
Recuerda que puedes usar arrays asociativos para estos casos (que se asemejaría ya a una estructrua de "base de datos") . ejemplo:

Código PHP:
<?
$opciones
['vengador']="vengador/pics/algo.php";
$opciones['spiderman']="spiderman/pics/algo.php";

$op=$_GET['op'];
include (
$opciones[$op]);
?>
Y .. siguiendo la estructura que tienes . .hasta podríamos evitar el array simplemente (siempre y cuando mantengan esa estrucutra fija):

Código PHP:
include($op."/pics/algo.php"); 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 17/05/2004, 16:18
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
Cluster, como siempre, Muchas pero Muchas Gracias =).

El dato de eviar escribir tan linea me gusto bastante =), ayq ue la esctrucutra es siempre la misma =).


Nesky
  #4 (permalink)  
Antiguo 17/05/2004, 21:36
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
pucha, no se que hago mal, hice una mescla con el codigo que me sugeriste y uufff, miles de lineas menos =), pero tengo el drama de cuando no hay pagina o op no hay nada y no me manda a la dire aer.php que es la page q tengo de prueba q dice, no hay archivos de audio etc etc pa este personaje..., pero no resulta, si hay op, entra la page de una si no sale error que no esta la page.

default es cuando no hay opcion en el switch, pero no se q tengo mal..



Código PHP:

switch ($op)
{
case 
$op;
include(
$op."/audio/index.php");
break; 
default:
include(
"aer.php");
break;

Nesky.
  #5 (permalink)  
Antiguo 17/05/2004, 22:08
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
como para agregar y quiza debi partir así, se puede hacer una mescla con las dos cosas, por que una la linea
<?
include($op."/audio/index.php");
?>
me simplifica todo a esa linea =), pero no tengo la opción de default para cuando no haya nada en el case, por eso quise hacer esa junta, se podra??..

mesclar esa linda linea con default como la ensalada q hice arriba =)

Nesky
  #6 (permalink)  
Antiguo 18/05/2004, 01:38
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Si tienes solo un conjunto finito de valores de $op, puedes usar un array para almacenar solo la lista de valores validos:
Código PHP:
$ops=array('valor1','valor2','valor3');
if (!
in_array($op,$ops)) {
  include (
'default.php');
} else {
  include (
$op.'/index.php');

Se puede hacer lo mismo con la opcion de arrays con la ruta de Cluster.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 18/05/2004, 08:58
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
Interesante propuesta, el gran problema es que ese conjunto finito son como 300 valores =(.

por ende esa linea seria mas largo que la gran muralla =(

igual josemi, esa rutina esta solida y me destapo otra forma de hacer justo otra cosa q tenia media truncada..=).

para este proceso quiero seguir ocn la idea de cluster ya que todo lo que originalmente iban a ser muchas lineas, ahora es solo una, pero hay que mter de alguna manera el default =).

Nesky.
  #8 (permalink)  
Antiguo 18/05/2004, 09:05
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, es que es una solucion generalista. Pero para tu caso concreto puede ser mas sencillo.

Por lo que veo, lo que haces es incluir un fichero que esta en el subdirectorio indicado por $op. Entonces te interesa incluir el de por defecto cuando no exista el directorio $op:
Código PHP:
if (is_dir($op)) {
  include(
$op.'/index.php');
} else {
  include(
'default.php');

Por supuesto, esto puede llevar a riesgos de seguridad. Para "controlarlos" debes comprobar que $op no contiene .. (subir directorio) o comprobar con realpath() (www.php.net/realpath).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 18/05/2004, 09:12
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 4 meses
Puntos: 0
Excelente, eso mismito era lo que andaba buscado =)... y siempre estan las rutas comprobadas y ahora el doble don realpatch =).

Gracias josemi.

Nesky.
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 19:25.