Foros del Web » Programando para Internet » PHP »

Problema Switch

Estas en el tema de Problema Switch en el foro de PHP en Foros del Web. Hola a todos, Estoy realizando un portal, estoy utilizando "Switch" , para el sistema de las secciones. Es decir, que cuando haga clic en un ...
  #1 (permalink)  
Antiguo 14/12/2010, 14:48
Avatar de ayukkonen  
Fecha de Ingreso: octubre-2010
Ubicación: Sevilla
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Problema Switch

Hola a todos,

Estoy realizando un portal, estoy utilizando "Switch", para el sistema de las secciones. Es decir, que cuando haga clic en un enlace se abra en la zona donde tengo el "Switch".

Me funcionan todas, pero cuando abro la página me aparece el siguiente mensaje:

Notice: Undefined index: id in C:\wamp\www\web_dinamica\index.php on line 62
contenido


El caso es que la última palabra, "contenido", es lo que debería de mostrar por defecto.

¿Alguna solución? A continuación os copio el código.

Gracias y un saludo.


SWITCH:

switch($_GET['id']){

default:

include ('modulos/contenido.php');

break;

case 0:

include ('modulos/contenido.php');

break;

case 1:

include ('modulos/secciones/archivo.php');

break;

case 2:

include ('modulos/secciones/categorias.php');

break;

case 3:

include ('modulos/secciones/contacto.php');

break;

case 4:

include ('modulos/secciones/registro.php');

break;

case 5:

include ('modulos/secciones/administracion.php');

break;

}


ENLACES:

echo "<li><a href='?id=0'>Portada</a></li>";
echo "<li><a href='?id=1'>Archivo</a></li>";
echo "<li><a href='?id=2'>Categorías</a></li>";
echo "<li><a href='?id=3'>Contacto</a></li>";
  #2 (permalink)  
Antiguo 14/12/2010, 14:57
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 2 meses
Puntos: 10
Respuesta: Problema Switch

Puedes igualar

$id=$_GET['id'];

y en el switch usa el $id en lugar del $_GET['id'], si te sigue el problema antes de la linea que te puse pon $id="";
  #3 (permalink)  
Antiguo 14/12/2010, 15:15
Avatar de ayukkonen  
Fecha de Ingreso: octubre-2010
Ubicación: Sevilla
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Problema Switch

Gracias por tu aporte compañero.

Lo dejé tal y como tú me lo dijistes, de ésta forma:


$id = $_GET['id'];

switch($id){


Y me sigue apareciendo esto:

Notice: Undefined index: id in C:\wamp\www\web_dinamica\index.php on line 60
contenido


En principio, sigue ocurriendo el mismo problema. Más posibles soluciones por favor.
  #4 (permalink)  
Antiguo 14/12/2010, 15:18
Avatar de ayukkonen  
Fecha de Ingreso: octubre-2010
Ubicación: Sevilla
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Problema Switch

Perdonad.

"August", no había visto la segunda parte de tu mensaje.

Lo he dejado como bien me dijiste en segunda instancia. Es decir, de esta otra forma:

$id = "";

switch($id){


Y no me aparece error alguno, pero no me cambia de sección si hago clic en los enlaces. Anteriormente si funcionaban.

Sigo esperando aportes, gracias y un saludo.
  #5 (permalink)  
Antiguo 14/12/2010, 15:26
 
Fecha de Ingreso: febrero-2005
Mensajes: 626
Antigüedad: 19 años, 2 meses
Puntos: 10
Respuesta: Problema Switch

Ya intentaste esto?:

$id = "";
$id = $_GET['id'];
  #6 (permalink)  
Antiguo 14/12/2010, 15:27
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Problema Switch

Prueba a poner el default abajo del todo del switch.
  #7 (permalink)  
Antiguo 14/12/2010, 15:29
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Problema Switch

O bueno, espera, me acabo de dar cuenta.
Las variables que cogemos de POST y GET son cadenas (string) y tu la estas comparando con un numero entero (integer).

Prueba a hacer esto:
Código PHP:
Ver original
  1. $id = (int) $_GET['id'];
  2. switch ($id) {
  3. ...
  4. }
  #8 (permalink)  
Antiguo 14/12/2010, 15:49
Avatar de ayukkonen  
Fecha de Ingreso: octubre-2010
Ubicación: Sevilla
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Problema Switch

He probado como dice "August", y también he probado eso que dice "mariomon17" , poniendo al final el default. Antes lo tenía así y tampoco funciona.

Con respecto a lo que dices del tipo de variables (enteras, cadenas...), no creo que sea, ya que las secciones me funcionan correctamente.

Aún así, he puesto en los "cases", case "0". Y sigue sin funcionar.

Saludos y gracias.
  #9 (permalink)  
Antiguo 14/12/2010, 16:55
Avatar de auttranadhie  
Fecha de Ingreso: noviembre-2008
Ubicación: Madrid (España)
Mensajes: 156
Antigüedad: 15 años, 4 meses
Puntos: 8
Respuesta: Problema Switch

Hola:

Sólo una pregunta: ¿de dónde sale $_GET["id"]? Tal y como lo pones parece que lo pases a través de un parámetro URL.

El problema que te está dando no está en el switch(). Está en que la variable no la has definido anteriormente. Verifica que la has definido por algún sitio. Mira a ver el valor del register_globals en php.ini por si acaso.

Suerte y un saludo.
__________________
A. Uttranadhie
  #10 (permalink)  
Antiguo 14/12/2010, 16:58
Avatar de ayukkonen  
Fecha de Ingreso: octubre-2010
Ubicación: Sevilla
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Problema Switch

Cuando pongo lo siguiente:

$id = $_GET['id'];

switch($id){


Se supone que la estoy definiendo, y en ella estoy metiendo el valor que se recoge, ¿no?

¿A qué te refieres con eso de register_globals? No domino del todo el manejo del fichero PHP.ini.

Gracias y saludos.
  #11 (permalink)  
Antiguo 14/12/2010, 17:22
Avatar de auttranadhie  
Fecha de Ingreso: noviembre-2008
Ubicación: Madrid (España)
Mensajes: 156
Antigüedad: 15 años, 4 meses
Puntos: 8
Respuesta: Problema Switch

Hola:

Vamos a ver:

$id = $_GET["id"] no contiene nada. Es nulo.

Literalmente estás diciendo lo siguiente: que la variable id es igual a la misma variable que, además, es nula.

Te recomiendo una atenta lectura acerca de las variables en general y sobre las de tipo sesión y globales de PHP. Las de tipo $_GET[] se pueden usar para tomar el valor de la misma variable que hemos pasado por URL. Por ejemplo:

pagina.php?variable=2

Si yo hiciera:

Código PHP:
echo "El valor es: ".$_GET["variable"]; 
El sistema me devolvería:

El valor es: 2

Po otro lado si dijeras:

Código PHP:
$id 2
Ahora la variable estaría definida.

La directiva register_globals establece el uso global de las variables en el servidor. Desde la versión 5.3 ya no se usa. Normalmente está como off por cuestiones de seguridad, de ahí que utilicemos variables del tipo $_GET[] para pasar una variable de una página PHP a otra.

Espero que hayas entendido la explicación y recibe un saludo.
__________________
A. Uttranadhie
  #12 (permalink)  
Antiguo 14/12/2010, 17:36
Avatar de ayukkonen  
Fecha de Ingreso: octubre-2010
Ubicación: Sevilla
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Problema Switch

Más o menos, creo que entiendo.

Antes lo que hice fué:

$id = "0";

switch($_GET['id']){


Para que por defecto tenga como valor "0", y de esta forma coja el "case 0" por defecto. A parte, también tengo el default.

Ahora lo he vuelto a hacer y sigue sin funcionar.

Gracias y un saludo.
  #13 (permalink)  
Antiguo 14/12/2010, 17:49
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Problema Switch

-Ah.. yo eh provado de todo los notice ya no tienen inmportancia usa error_reporting y ya esta.
  #14 (permalink)  
Antiguo 14/12/2010, 17:51
Avatar de auttranadhie  
Fecha de Ingreso: noviembre-2008
Ubicación: Madrid (España)
Mensajes: 156
Antigüedad: 15 años, 4 meses
Puntos: 8
Respuesta: Problema Switch

Hola, de nuevo:

Hay una cosa que no acabo de comprender:

Por cada valor del switch() haces un include(). No sé si lo que esperas es que vaya directamente a la página. El include() ejecutará el código que tiene y te devolverá aquello que le has dicho que haga.

Asimismo, tienes una lista con el siguiente código:

Código PHP:
echo "<li><a href='?id=0'>Portada</a></li>";
echo 
"<li><a href='?id=1'>Archivo</a></li>";
echo 
"<li><a href='?id=2'>Categorías</a></li>";
echo 
"<li><a href='?id=3'>Contacto</a></li>"
Ya te puedo asegurar que los href no te van a funcionar porque ... ¿dónde están las páginas? Sólo has escrito el valor de la variable que envías por URL.

Por último: sigues evaluando $_GET["id"] en el switch() en vez de $id. Si has definido $id = 0 haz que evalúe esa variable y no la de tipo $_GET[]. Aún así, sigo preguntándote ... ¿de dónde sale $_GET["id"]? Ten en cuenta que el $id = 0 que has definido sólo es para una prueba.

Un saludo.
__________________
A. Uttranadhie
  #15 (permalink)  
Antiguo 15/12/2010, 02:20
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema Switch

A ver, para @phpfan es lo peor que puedes "recomendar" es como decir que un coche esta tirando gasolina y la solución es simplemente ignorarlo...

Ahora, el error es porque NO ESTAS VERIFICANDO la variable $_GET, para eso existe if e isset....
Código PHP:
Ver original
  1. if (isset($_GET['id'])) {
  2.        $id = $_GET['id'];
  3.        echo 'La variable ID tiene un valor: '.$_GET['id'];
  4. }else {
  5.        $id = 'default';
  6.        echo 'La variable ID NO tiene un valor, le asignamos una valor por default';
  7. }
  8.  
  9. switch($id) {
  10.        case 0:
  11.               //código
  12.               break;
  13.        //mas código
  14.        case 'default':
  15.               //código que se ejecutará cuando $_GET['id'] no tenga valor
  16.               break;
  17. }

Por ultimo @auttranadhie el sistema que esta utilizando @ayukkonen es un sistema modular (arcaico pero al final de cuentas modular), el hecho de cargar archivos mediante includes (o requires según sea el caso) es para mantener el código separado por secciones o bloques, que le falta mucho para pulir su código, claro, no lo pongo en duda, pero va por buen camino, eso si, tus links pueden funcionar así, pero olvidate que los bots de buscadores sigan esos links, lo mejor es que agreges el "index.php" (o como se llame tu archivo que administre tus bloques) a esos links
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 15/12/2010 a las 02:26
  #16 (permalink)  
Antiguo 15/12/2010, 09:37
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Problema Switch

Prueba todo lo que te han dicho y nos cuentas, aunque lo de declarar la variable pienso que no es el problema, porque si no se recibe nada por GET en ID sera NULL y el el switch entraria al DEFAULT.
Como te digo, haz la prueba que te dijo @Nemutag.

Cita:
Iniciado por Nemutagk Ver Mensaje
Por ultimo @auttranadhie el sistema que esta utilizando @ayukkonen es un sistema modular (arcaico pero al final de cuentas modular), el hecho de cargar archivos mediante includes (o requires según sea el caso) es para mantener el código separado por secciones o bloques, que le falta mucho para pulir su código, claro, no lo pongo en duda, pero va por buen camino ...
OFFTOPIC:
¿Por que motivo es un sistema arcaico? ¿Como habria que hacerlo para que estuviera "correcto"? Me quede con la duda jeje
  #17 (permalink)  
Antiguo 15/12/2010, 09:45
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema Switch

@mariomon17 en ningún momento eh dicho que sea incorrecto su implementación, al referirme "arcaico" me refería a simplista y en su forma mas básica, ahora que lo pienso no fue correcto referirme de esa manera, si se mal entendio pido una disculpa ; la forma más idónea sería implementar un sistema MVC, pero esto comparado con el código que tiene es mucho mas complicado
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #18 (permalink)  
Antiguo 15/12/2010, 09:50
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Problema Switch

Cita:
Iniciado por Nemutagk Ver Mensaje
@mariomon17 en ningún momento eh dicho que sea incorrecto su implementación, al referirme "arcaico" me refería a simplista y en su forma mas básica, ahora que lo pienso no fue correcto referirme de esa manera, si se mal entendio pido una disculpa ; la forma más idónea sería implementar un sistema MVC, pero esto comparado con el código que tiene es mucho mas complicado
¿Sistema MVC?
Voy a ver que es eso.
  #19 (permalink)  
Antiguo 07/01/2011, 06:29
Avatar de ayukkonen  
Fecha de Ingreso: octubre-2010
Ubicación: Sevilla
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Problema Switch

Compañeros, perdonad por la tardanza, pero he estado de vacaciones fuera de mi ciudad y me ha sido imposible conectarme.

He estado probando todo lo que aportáis pero sigue sin funcionarme.

En sí, lo que son las secciones, cuando hago clic en ellas me lleva correctamente. El problema es en la página por defecto. Que me aparece lo que deseo pero también el Warning...

Saludos y gracias por vuestras aportaciones.
  #20 (permalink)  
Antiguo 07/01/2011, 06:36
Avatar de ayukkonen  
Fecha de Ingreso: octubre-2010
Ubicación: Sevilla
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Problema Switch

Os facilito el nuevo código:

<?php

switch($_GET['id']){

default:

include ('secciones/quienessomos.php');

break;

case 0:

include ('secciones/redes.php');

break;

case 1:

include ('secciones/web.php');

break;

case 2:

include ('secciones/aplicaciones.php');

break;

case 3:

include ('secciones/recuperacion.php');

break;

case 4:

include ('secciones/buscadores.php');

break;

case 5:

include ('secciones/formacion.php');

break;

case 6:

include ('secciones/tienda/tienda.php');

break;

case 7:

include ('secciones/quienessomos.php');

break;

case 8:

include ('secciones/noticias.php');

break;

case 9:

include ('secciones/comollegar.php');

break;

case 10:

include ('secciones/contacto.php');

break;

case 11:

include ('secciones/clientes.php');

break;

case 12:

include ('secciones/administracion.php');

break;

}

?>

Menú que enlaza al contenido:

<?php

echo "<a id='menu' href='?id=0'>Redes</a>";
echo "<a id='menu' href='?id=1'>Diseño Web</a>";
echo "<a id='menu' href='?id=2'>Aplicaciones</a>";
echo "<a id='menu' href='?id=3'>Recuperación</a>";
echo "<a id='menu' href='?id=4'>Buscadores & SEO</a>";
echo "<a id='menu' href='?id=5'>Formación</a>";
echo "<a id='menu' href='?id=6'>Tienda</a>";

?>
  #21 (permalink)  
Antiguo 07/01/2011, 14:14
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema Switch

Ya te había dado la solución, el error te lo manda porque estas intentado acceder a una variable GET que no existe, y por lo que veo en tu código ni si quiera lo has probado....

Por cierto @mariomon17, el problema no es que switch este tomando un valor equivocado, puedes probarlo por ti mismo, y veras que switch toma el valor correcto (null), el "error notice" es porque te esta indicado que estas intentando acceder a una variable no definida
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #22 (permalink)  
Antiguo 07/01/2011, 14:36
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Problema Switch

Cita:
Iniciado por Nemutagk Ver Mensaje
Por cierto @mariomon17, el problema no es que switch este tomando un valor equivocado, puedes probarlo por ti mismo, y veras que switch toma el valor correcto (null), el "error notice" es porque te esta indicado que estas intentando acceder a una variable no definida
En que momento dije que era por eso?
  #23 (permalink)  
Antiguo 07/01/2011, 17:39
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema Switch

Aquí....

Cita:
Prueba todo lo que te han dicho y nos cuentas, aunque lo de declarar la variable pienso que no es el problema, porque si no se recibe nada por GET en ID sera NULL y el el switch entraria al DEFAULT.
Como te digo, haz la prueba que te dijo @Nemutag.
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #24 (permalink)  
Antiguo 07/01/2011, 18:34
Avatar de ayukkonen  
Fecha de Ingreso: octubre-2010
Ubicación: Sevilla
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Problema Switch

Nemutagk, parece que lo he conseguido...

De hecho el error ya no aparece, pero... No me aparece la sección por defecto que debería.

Me aparece por defecto la sección "Redes", en vez que "Quiénes somos".

Te copio el código, gracias y un saludo.


<?php

if (isset($_GET['id'])) {

$id = $_GET['id'];

}else {

$id = 'default';

}

switch ($id){

default:

include ('secciones/quienessomos.php');

break;

case 0:

include ('secciones/redes.php');

break;

case 1:

include ('secciones/web.php');

break;

case 2:

include ('secciones/aplicaciones.php');

break;

case 3:

include ('secciones/recuperacion.php');

break;

case 4:

include ('secciones/buscadores.php');

break;

case 5:

include ('secciones/formacion.php');

break;

case 6:

include ('secciones/tienda/tienda.php');

break;

case 7:

include ('secciones/quienessomos.php');

break;

case 8:

include ('secciones/noticias.php');

break;

case 9:

include ('secciones/comollegar.php');

break;

case 10:

include ('secciones/contacto.php');

break;

case 11:

include ('secciones/clientes.php');

break;

case 12:

include ('secciones/administracion.php');

break;

}

?>
  #25 (permalink)  
Antiguo 07/01/2011, 18:44
Avatar de ayukkonen  
Fecha de Ingreso: octubre-2010
Ubicación: Sevilla
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Problema Switch

Bueno, ya está solucionado, qué digo... "Solucionadísimo".

Al parecer, $id no coge el valor default, sino que por defecto se le asigna "0", de esta forma siempre al inicio me aparecía la sección "Redes" que es la que tenía $id=0, y no "Quiénes somos", simplemente he cambiado el orden de los "case" y lo he conseguido.

Todo por supuesto a vuestra ayuda, sin vosotros no lo habría conseguido. Muchísimas gracias por todo y de corazón. Gracias por vuestra ayuda y tiempo. Os lo agradezco enormemente.

Hay mucha gente buena por estos foros. Un abrazo desde Sevilla.
  #26 (permalink)  
Antiguo 07/01/2011, 19:49
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Problema Switch

Lo siento, no me acordé, jeje.

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 04:09.