Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Inconveniente switch anidados

Estas en el tema de Inconveniente switch anidados en el foro de PHP en Foros del Web. Buenos días, estoy con este inconveniente, tengo el siguiente codigo: Código PHP: <?php include ( "funciones.php" ); if ( verifyuser ()){      $opcion = $_GET [ "opcion" ...
  #1 (permalink)  
Antiguo 24/01/2014, 07:15
 
Fecha de Ingreso: agosto-2009
Mensajes: 73
Antigüedad: 14 años, 8 meses
Puntos: 0
Inconveniente switch anidados

Buenos días, estoy con este inconveniente, tengo el siguiente codigo:

Código PHP:
<?php
include ("funciones.php");
if (
verifyuser()){
    
$opcion=$_GET["opcion"];
    switch (
$opcion){
    
    case 
"user":
    echo 
"<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3c.org/TR/html4/strict.dtd'>";
    echo 
"<html>
            <head>
                <meta http-equiv='content-type' content='text/html; charset=utf-8' />
                <title>GTD-MASTER</title>
                <meta name='keywords' content='' />
                <meta name='description' content='' />
                <link href='../estilos/estilo.css' rel='stylesheet' type='text/css' />
            </head>
            <body>
                <div id='wrapper'>
                    <div id='container'>
                        <div id='header'>
                            <h2>Mis tareas</h2><img src='../images/bloc2.jpg' width='70' height='70' />
                            <div id='header_right'>"
;
                            
$idPersona $_SESSION['persona_idPersona'];
                            
$user=nombres("SELECT nombres, apellidos FROM persona WHERE idPersona='$idPersona'");
                            echo 
"<h1 align='left' class='tam2'><strong>Bienvenido ";
                            echo 
"</strong></h1>";
                            
error_reporting(E_ERROR E_WARNING E_PARSE);
                            echo 
"<table><tr><td><p>".$user["nombres"]."</p></td>";
                            echo 
"<td><form action='logoff.php'>
                                    <input type='submit' name='salir' value='salir'/>
                                    </form></td></tr></table>"
;
                        
            echo 
"    </div>
                </div>
                <div id='side_left'>
                    <div id='menu'>
                    <h3>Nuevas tareas</h3>
                        <ul>
                            <li><a href='inbox.php?pagina=bandeja'>Bandeja de entrada</a></li>
                        </ul>
                        <ul>
                            <li><a href='inbox.php?pagina=nuevo'>Nueva Tarea</a></li>
                        </ul>
                    
                    <ul>
                        <li><h3>Acciones</h3></li>
                        <li><a href='inbox.php?pagina=archivar'>Archivar</a></li>
                        <li><a href='inbox.php?pagina=resolver'>Resueltas</a></li>
                    </ul>
                    
                    <ul>
                        <li><h3>Organizar</h3></li>
                        <li><a href='inbox.php?pagina=proximo'>Pr&oacute;ximo</a></li>
                        <li><a href='inbox.php?pagina=delegar'>Delegar</a></li>
                        <li><a href='inbox.php?pagina=espera'>En espera</a></li>
                    </ul>
                    <ul>
                        <li><h3><a href='inbox.php?pagina=proyecto'>Proyectos</a></h3></li>
                    </ul>
                    <ul>
                        <li><h3><a href='inbox.php?pagina=eliminados'>Eliminados</a></h3></li>
                    </ul>
                    <ul>
                        <li><a href='inbox.php?pagina=nuevo'>Nueva Tarea</a></li>
                    </ul>
                    </div>
                </div>
                <div id='content'>"
;
                        
$recibe_pagina=$_GET["pagina"];
                        
                        echo 
$recibe_pagina;
                        echo 
$opcion;
                        switch (
$recibe_pagina){ 
                            case 
"bandeja":
                                include (
'bandeja.php'); 
                            break;
                            case 
'archivar':
                                include (
'archivar.php'); 
                            break; 
                            case 
'resolver':
                                include (
'resolver.php'); 
                            break; 
                            case 
'proximo':
                                include (
'proximo.php'); 
                            break; 
                            case 
'delegar':
                                include (
'delegar.php'); 
                            break; 
                            case 
'espera':
                                include (
'espera.php'); 
                            break; 
                            case 
'proyecto':
                                include (
'proyecto.php'); 
                            break; 
                            case 
'eliminados':
                                include (
'eliminados.php'); 
                            break; 
                            case 
'nuevo':
                                include (
'nuevo.php'); 
                            break; 
                            default:
                                include (
'bandeja.php');
                                break;
                        }
                        
                
        echo 
"    </div>
            </div>
        </div>
        <div id='footer'>
            
        </div>
    </body>
</html>"
;
    break;
    case 
"admin":
    echo 
"<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3c.org/TR/html4/strict.dtd'>";
    echo 
"<html>
            <head>
                <meta http-equiv='content-type' content='text/html; charset=utf-8' />
                <title>GTD-MASTER</title>
                <meta name='keywords' content='' />
                <meta name='description' content='' />
                <link href='../estilos/estilo.css' rel='stylesheet' type='text/css' />
            </head>
            <body>
                <div id='wrapper'>
                    <div id='container'>
                        <div id='header'>
                            <h2>Mis tareas</h2><img src='../images/bloc2.jpg' width='70' height='70' />
                            <div id='header_right'>"
;
                            
$idPersona $_SESSION['persona_idPersona'];
                            
$user=nombres("SELECT nombres, apellidos FROM persona WHERE idPersona='$idPersona'");
                            echo 
"<p align='left' class='tam2'><strong>Bienvenido ";
                            echo 
"</strong></p>";
                            
error_reporting(E_ERROR E_WARNING E_PARSE);
                            echo 
"<table><tr><td><p>".$user["nombres"]."</p></td>";
                            echo 
"<td><form action='logoff.php'>
                                    <input type='submit' name='salir' value='salir'/>
                                    </form></td></tr></table>"
;
                        
            echo 
"    </div>
                </div>
                <div id='side_left'>
                    <div id='menu'>
                    <h3>Administrador</h3>
                        <ul>
                            <li><a href='inbox.php?pagina=bandeja'>Modificar usuario</a></li>
                        </ul>
                        <ul>
                            <li><a href='inbox.php?pagina=nuevo'>Activar/Desactivar</a></li>
                        </ul>
                    
                    <ul>
                        <li><h3>Reportes</h3></li>
                        <li><a href='inbox.php?pagina=archivar'>Tareas por usuario</a></li>
                        <li><a href='inbox.php?pagina=resolver'>Estadisticas tareas por usuario</a></li>
                    </ul>
                    
                    </div>
                </div>
                <div id='content'>"
;
                     
                        
$recibe_pagina=$_GET['pagina'];
                        switch (
$recibe_pagina){ 
                            case 
'bandeja':
                                include (
'bandeja.php'); 
                            break;
                            case 
'archivar':
                                include (
'archivar.php'); 
                            break; 
                            case 
'resolver':
                                include (
'resolver.php'); 
                            break; 
                            case 
'proximo':
                                include (
'proximo.php'); 
                            break;   
                            case 
'delegar':
                                include (
'delegar.php'); 
                            break; 
                            case 
'espera':
                                include (
'espera.php'); 
                            break; 
                            case 
'proyecto':
                                include (
'proyecto.php'); 
                            break; 
                            case 
'eliminados':
                                include (
'eliminados.php'); 
                            break; 
                            case 
'nuevo':
                                include (
'nuevo.php'); 
                            break; 
                            default:
                                include (
'bandeja.php');
                                break;
                        }
                
        echo 
"    </div>
            </div>
        </div>
        <div id='footer'>
            
        </div>
    </body>
</html>"
;
//break;
default:
    
//header("Location: error2.php");
    
echo"hola1";
    break;
}

}else{
    
header('Location: erro3.php');
}
El cual posee switch anidades, el primer switch opcion viene del login, el mismo trae que tipo de usuario se ha logueado (user o admin) y carga el contenido correspondiente.

El segundo switch $recibe_pagina es un menu el cual utilizo para cargar solamente el contenido de la pagina y no cargar toda la pagina cada vez que se accede en algún lugar.

Problema, el primer switch funciona bien carga el contenido, pero al dar clic en cualquier opcion del menu me dice el siguiente error:

Notice: Undefined index: opcion in /var/www/inbox.php on line 4

Me da para pensar que no está tomando los valores del segundo switch y que intenta cargar el valor pagina en el primer switch.

Desde ya muchas gracias por su ayuda.
  #2 (permalink)  
Antiguo 24/01/2014, 07:58
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
Respuesta: Inconveniente switch anidados

mi sugerencia
http://techtastico.com/post/aprende-...-debug-en-php/

http://translate.google.com/translat...-guide%2Fpage1
  #3 (permalink)  
Antiguo 24/01/2014, 09:49
 
Fecha de Ingreso: agosto-2009
Mensajes: 73
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Inconveniente switch anidados

enlinea777, gracias por tu respuesta, el notice que larga es porque trata de usar la variable $opcion del siwth general, pero lo que no entiendo es porque hace esto, al elegir cualquier opción del menú debería cargar la variable $recibe_pagina y mostrar la opción, en lugar de esto directamente salta al default del switch $opcion.

Saludos.
  #4 (permalink)  
Antiguo 24/01/2014, 10:29
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Inconveniente switch anidados

dieguito12, lee bien tu error...

Te está diciendo "Undefined index: opcion" en linea 4.

Concretamente, que estás intentando acceder a un index de un array que no existe.

Esta es la línea:

Código PHP:
Ver original
  1. $opcion=$_GET["opcion"];

Primero, para evitar estos fallos, tendrías q comprobar si existe:
Código PHP:
Ver original
  1. if( isset($_GET["opcion") ) {
  2.     //Aqui lo q quieras hacer
  3. }
  4. else {
  5.     //¿Excepcion? ¿Mensaje de error?
  6. }

Te recomiendo empezar a controlar esas cosas... sino, siempre se puede "romper" el script php ;)

PD: Supongo q deduces de dónde viene el error, no? ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #5 (permalink)  
Antiguo 24/01/2014, 10:52
 
Fecha de Ingreso: agosto-2009
Mensajes: 73
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Inconveniente switch anidados

Eleazan gracias por la respuesta, el $opcion viene desde este codigo:

Código PHP:
<?php

//session_start();
include ("funciones.php");

if(isset(
$_POST['nick'])) $nick=$_POST['nick'];
else 
$nick="";

if(isset(
$_POST['pass'])) $pass $_POST['pass'] ;
else 
$pass="";

if(
conexion($nick$pass)){
    if(
$_SESSION['estadoUsuario_estadoUsuario'] == 1)
        {
        if(
$_SESSION['rol_idRol'] == 1)
            
header("Location: inbox.php?pagina=admin");
            
        elseif(
$_SESSION['rol_idRol'] == 2)
            
header("Location: inbox.php?opcion=user");
        }
        else
            
header("Location: error1.php");
}
?>
Que es el login, de ahí obtengo si el usuario esta habilitado o no, y que tipo de usuario es, en el que uso la variable $opcion.

Mi pregunta es, porque al seleccionar cualquier opcion del menu, cuya variable es $recibe_pagina, se sale del case user y va directamente al default.

Saludos
  #6 (permalink)  
Antiguo 24/01/2014, 10:59
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Inconveniente switch anidados

Cita:
Iniciado por dieguito12 Ver Mensaje
Eleazan gracias por la respuesta, el $opcion viene desde este codigo:

Código PHP:
<?php

//session_start();
include ("funciones.php");

if(isset(
$_POST['nick'])) $nick=$_POST['nick'];
else 
$nick="";

if(isset(
$_POST['pass'])) $pass $_POST['pass'] ;
else 
$pass="";

if(
conexion($nick$pass)){
    if(
$_SESSION['estadoUsuario_estadoUsuario'] == 1)
        {
        if(
$_SESSION['rol_idRol'] == 1)
            
header("Location: inbox.php?pagina=admin");
            
        elseif(
$_SESSION['rol_idRol'] == 2)
            
header("Location: inbox.php?opcion=user");
        }
        else
            
header("Location: error1.php");
}
?>
Que es el login, de ahí obtengo si el usuario esta habilitado o no, y que tipo de usuario es, en el que uso la variable $opcion.

Mi pregunta es, porque al seleccionar cualquier opcion del menu, cuya variable es $recibe_pagina, se sale del case user y va directamente al default.

Saludos

Intentaré explicártelo :)

Cuando un usuario loguea bien, lo mandas a esta página:
inbox.php?opcion=user

Y entonces, le muestras unos enlaces... que si pincha en uno, se va a esta página
inbox.php?pagina=proyecto

Asi pues, tu servidor primero recibe "ejecuta inbox.php con la variable "opcion" = "user".

Despues recibe un "ejecuta inbox.php con la variable "pagina" = "proyecto".

Pero, tu inbox.php requiere la variable opción. Tienes que seguir propagándola. El segundo caso deberia ser un "ejecuta inbox.php con la variable "opcion"="user" y "pagina"="proyecto". Tienes que añadir un parámetro a las urls

No sé si lo has entendido :)

Saludos!
__________________
>> Eleazan's Source
>> @Eleazan
  #7 (permalink)  
Antiguo 24/01/2014, 11:03
 
Fecha de Ingreso: agosto-2009
Mensajes: 73
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Inconveniente switch anidados

Genioooo Elezean, exactamente eso me faltaba!! para el menu tenia que poner lo siguiente.

inbox.php?opcion=user&pagina=proyecto

Con esto quedo funcionando.

Muchas graciasss!!!

Etiquetas: anidados, html, inconveniente, select, 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 15:57.