Foros del Web » Programando para Internet » PHP »

problema con switch and case

Estas en el tema de problema con switch and case en el foro de PHP en Foros del Web. Hola, tengo un problemas con un switch and case, que no logro hacer que cumpla su función. El caso es que tengo un link ....al ...
  #1 (permalink)  
Antiguo 29/09/2008, 15:44
Avatar de pablosky13  
Fecha de Ingreso: septiembre-2008
Mensajes: 42
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta problema con switch and case

Hola, tengo un problemas con un switch and case, que no logro hacer que cumpla su función.

El caso es que tengo un link....al cual le di un valor
Código PHP:
<?
$importar
='<a class="boton2" href="editor-de-texto.php?imp=1">Importar</a>';                            
       echo 
$importar;
?>
Unos radio botons
Código HTML:
<input type="radio" name="op" id="actualidad" value="actualidad">
<input type="radio" name="op" id="noticias" value="noticias">
<input type="radio" name="op" id="deportes" value="deportes"> 
y un TEXT AREA con switch and case
Código PHP:
<textarea name="contenido" id="contenido" cols="100" rows="20" style="font-family:Arial, Helvetica, sans-serif; font-size:10px">
<?     
switch ($_GET['imp']==1) {
    case 
"actualidad":{echo $textoact;}        break;
    case 
"noticias":  {echo $textonot;}        break;
    case 
"deportes":  {echo $textodep;}        break;
        }
?></textarea>
La idea: escojer un radio botonm (ej: actualidad), luego apretar el link "importar" y que aparesca la variable $textoact en el text area.

Lo que sucede: escojiendo o sin escojer radio botons, al apretar el link "importar", aparece SOLO la variable $textoact.

Creo que estoy escribiendo mal el codigo, pero no me doy cuenta donde, por favor si alguien sabe, estare agradecido.


  #2 (permalink)  
Antiguo 29/09/2008, 15:58
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema con switch and case

¿ switch ($_GET['imp']==1) ?

Supongo que quieres decir
Código PHP:
switch ($_GET['imp']) { 
  #3 (permalink)  
Antiguo 29/09/2008, 16:13
Avatar de pablosky13  
Fecha de Ingreso: septiembre-2008
Mensajes: 42
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: problema con switch and case

cuando escribo....
Código PHP:
switch ($_GET['imp']==1
es porque el link que hice tiene
Código PHP:
$importar='<a class="boton2" href="editor-de-texto.php?imp=1">Importar</a>';                             
       echo 
$importar
Al momento de sacar ==1 del switch........no importa ninguna variable, nisiquiera la que importaba antes.

Gracias de todos modos.
  #4 (permalink)  
Antiguo 29/09/2008, 16:23
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema con switch and case

El caso es que el switch no funciona así. O no sé muy bien cómo crees que funciona.

Código PHP:
switch ($variable) {
    case 
"valor1": ...
    case 
"valor2": ...
...

Lo que hace es comparar $variable con cada uno de los valores. Por eso no tiene sentido (*) poner en el switch (xxxxxx) una expresión como ($variable ==1) porque luego es eso lo que se compara.


No sé qué es lo que quieres hacer con tu código, porque no has explicado qué es lo que intentas conseguir. Pero sí que en ese switch no va ($_GET['imp']==1). Volviendo a leer algo de lo que pones, quizá lo que busques sea
Código PHP:
switch($_GET['op']) { ... 






(*) En algún caso puede tenerlo pero normalmente no. Y en este no lo tiene.
  #5 (permalink)  
Antiguo 29/09/2008, 17:21
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 18 años, 4 meses
Puntos: 19
De acuerdo Respuesta: problema con switch and case

Código PHP:
<?
$importar
='<a class="boton2" href="editor-de-texto.php?imp=actualidad">Importar</a>';                            
       echo 
$importar;
?>
y cuando imprimis en el switch saca el ==1
Código PHP:
<textarea name="contenido" id="contenido" cols="100" rows="20" style="font-family:Arial, Helvetica, sans-serif; font-size:10px">
<?     
switch ($_GET['imp']) {
    case 
"actualidad":{echo $textoact;}        break;
    case 
"noticias":  {echo $textonot;}        break;
    case 
"deportes":  {echo $textodep;}        break;
        }
?></textarea>
saludos
  #6 (permalink)  
Antiguo 29/09/2008, 19:02
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema con switch and case

Veamos, switch no realiza una comparación estricta entre la variable y los casos, sino mas bien una flexible (Referencia). Mira esto:

Código php:
Ver original
  1. $a = "hola"
  2. switch($a == "hola") {
  3.     case "actualidad":{echo "Texto actualidad";}        break;
  4.     case "noticias":  {echo "Texto noticias";}        break;
  5.     case "deportes":  {echo "Texto deportes";}        break;
  6. }
Verás que te imprime "Texto actualidad". Obviamente, la condición ($a == "hola") devuelve true, por lo que sería lo mismo poner:
Código php:
Ver original
  1. switch(true) {
  2.     case "actualidad":{echo "Texto actualidad";}        break;
  3.     case "noticias":  {echo "Texto noticias";}        break;
  4.     case "deportes":  {echo "Texto deportes";}        break;
  5. }
Y con este segundo código el resultado es el mismo. Qué está pasando?

Si en el switch intentas poner una comparación (como $variable == "valor"), el switch se hará en base al resultado de dicha comparación, que puede ser true o false. Ahora, como te dije más arriba, switch realiza comparaciones flexibles. Si revisas las tablas de comparación en el link que puse al inicio, verás que true comparada de manera flexible con cualquier cadena de texto, como "actualidad" o "deportes" devuelve true (Osea, true == "lo que sea"). Por eso se cumple la primera condición en el switch y se ejecuta su contenido, y el switch se detiene.

Lo mismo sucede en tu caso, al poner $_GET['imp'] == 1, estás comparando $_GET['imp'] con 1, lo cuál es verdadero (true), pues en la URL pones tupagina.php?imp=1. Por eso al evaluar en el primer caso con "actualidad" se cumple la condición y el switch termina, al igual que en el ejemplo que te puse.

Esto sólo para aclarar algunas cosas. La "solución" es la que te dio korg1988 en el mensaje anterior.

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 21:46.