Foros del Web » Programando para Internet » PHP »

Llamar a funciones desde la dirección (GET)

Estas en el tema de Llamar a funciones desde la dirección (GET) en el foro de PHP en Foros del Web. Bien, estoy haciendo una aplicacion y la estoy haciendo bastante estructurada. Imaginemonos que tengo una web modular y escribo esto en el navegador: http://www.misitioweb.com/miaplicaci...&func=detalles Esto ...
  #1 (permalink)  
Antiguo 06/09/2006, 08:35
jpeeri
Invitado
 
Mensajes: n/a
Puntos:
Llamar a funciones desde la dirección (GET)

Bien, estoy haciendo una aplicacion y la estoy haciendo bastante estructurada.

Imaginemonos que tengo una web modular y escribo esto en el navegador:

http://www.misitioweb.com/miaplicaci...&func=detalles

Esto llamaria a un index.php que esta en miaplicacion/secc/noticias/index.php

Ahora veamos el index.php que tiene dos partes. La primera se definen todas las funciones y la segunda es una muy facil que se les llama. Se llama de la siguiente manera
Código PHP:
$funcionllamada $_GET['func'];
Noticias_user_$funcionllamada(); 
Se hace asi bien o hay que cambiar algo?
  #2 (permalink)  
Antiguo 06/09/2006, 10:08
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
mmm, la veo un tanto rara y poco segura
Mejor deberías usar switch() para ir tomando los valores de $_GET['func'] y ejecutar la función según el valor de func, así te evitás problemas de seguridad.

Y en caso de que quieras usar la misma forma, creo que deberías usar eval() para 'pegar' la variable y formar el nombre de la función.


Saludos.
  #3 (permalink)  
Antiguo 06/09/2006, 10:17
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

En alguna prueba que he hecho, detrás de una variable o una cadena se puede poner un par de paréntesis (abierto y cerrado) y dentro los parámetros y funciona... la verdad es que no me había planteado el tema de la seguridad, pero puedo afirmar que funciona...

Sobre la forma de la llamada... me parece que Noticias_user_ debería ser una cadena (o sea entrecomillarse) y la variable debería concatenarse... (no sabría decir las alternativas posibles...)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 06/09/2006, 11:55
jpeeri
Invitado
 
Mensajes: n/a
Puntos:
¿?¿? No os entiendo a ninguno de los dos. Que lo haga con switch... Y si hago una funcion nueva tengo que modificar tambien eso... MMM no se a que te refieres con entrecomillar Noticias_user_ ...

Un Saludo

PD: No hay algo por ahi que te indique que es seguro y que no es seguro? ¿Por qué no es seguro?
  #5 (permalink)  
Antiguo 06/09/2006, 13:55
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años
Puntos: 7
POR LO DE swirch se refieren a esto
$i = $_GET['func'];

switch ($i) {
case 0:
Noticias_user_1();
break;
case 1:
Noticias_user_2();
break;
case 2:
Noticias_user_3();
break;
}
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #6 (permalink)  
Antiguo 06/09/2006, 14:10
jpeeri
Invitado
 
Mensajes: n/a
Puntos:
Si, ya lo se. Lo utilizo para modular mis secciones.
  #7 (permalink)  
Antiguo 06/09/2006, 18:19
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
No hay un riesgo inminente ni clarísimo, solo creo que es una buena práctica no ejecutar directamente lo que un usuario puede pasar como dato a un programa sino controlarlo y filtrarlo lo mejor posible primero. Por las dudas, uno nunca sabe si mañana podría estar trabajando con otro programa en el que sí cause problemas.

Además la solución con switch se me hace mucho más clara y 'comentable', para tener claro qué se hace y cuándo.


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 01:02.