Foros del Web » Programando para Internet » PHP »

Asignar una accion PHP a una imagen html

Estas en el tema de Asignar una accion PHP a una imagen html en el foro de PHP en Foros del Web. Buenasss, tengo una base de datos en la cual almaceno las acciones a realizar al pulsar una imagen en una pagina web: TABLA: MENU CAMPOS: ...
  #1 (permalink)  
Antiguo 07/09/2005, 04:29
 
Fecha de Ingreso: septiembre-2005
Mensajes: 7
Antigüedad: 18 años, 7 meses
Puntos: 0
Pregunta Asignar una accion PHP a una imagen html

Buenasss,
tengo una base de datos en la cual almaceno las acciones a realizar al pulsar una imagen en una pagina web:
TABLA: MENU
CAMPOS: IDMENU, IMAGEN, ACCION
En el campo ACCION almaceno p.e. "LanzarMenu(100)", LanzarMenu() es una funcion escrita en PHP.
El codigo que utilizo para crear las imagenes en la pagina web es el siguiente:
<?
$cambiafila = 1;
while ($r = ibase_fetch_object($rs)){
if($cambiafila > 2){
$cambiafila=1;
echo "<tr/><tr>";
}
echo "<td><center><img onclick=\"$r->OPACCION\" src=\"iconos\\$r->OPICONO\"></center></td>";
$cambiafila += 1;
}
?>
El problema es que el codigo HTML resultante es:
<td><center><img onclic="LanzarMenu(100)" src="iconos\img1.gif"></center></td>
con lo cual el navegador intenta ejecutar LanzarMenu como si fuese una funcion JavaScript.
¿Se les ocurre alguna forma de hacer que ejecute la funcion en PHP?

Muchas gracias.
  #2 (permalink)  
Antiguo 07/09/2005, 07:36
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
PHP funciona en el servidor, lograr con php que al hacer click en una imagen se ejecute una accion implica llamar a una pagina, por tanto es posible convertir la imagen en un link y asi llamar a otra pagina o a la misma con un parametro.

Ejemplo:

Código PHP:
<html>
<body>
<?php
   
while($r ibase_fetch_object($rs))
   {
?>
    <a href="<?php echo $_SERVER['PHP_SELF'].'?accion='.$r->OPACCION;?>">
       <img src="iconos/<?php echo $r->OPICONO;?>">
    </a>
<?php
   
}
   if (isset(
$_GET['accion']))
   {
       
//codigo de la accion
      
echo $_GET['accion'];
   }
?>
</body>
</html>
  #3 (permalink)  
Antiguo 07/09/2005, 07:48
 
Fecha de Ingreso: septiembre-2005
Mensajes: 7
Antigüedad: 18 años, 7 meses
Puntos: 0
Gracias por tu respuesta, lo he implementado de esta manera:
echo "<td><center><a href=\"$r->OPACCION\" target=\"principal\"><img src=\"iconos\\$r->OPICONO\"></a></center></td>";
El valor de $r->OPACCION es fmenu.php?f=lanzarMenu&p=100&t=principal
fmenu.php tiene el siguiente codigo:
<?php
// Recoge los valores pasados
$mifuncion=$_GET["f"];
$pagina=$_GET["p"];
$target=$_GET["t"];

$cadena="$mifuncion(\"$pagina\");";
eval($cadena);

function lanzarMenu($qpagina){
echo "<?php\nheader(\"Location: $qpagina.php\");\n?>";
return;
}
?>
El problema que tengo ahora es que este código en lugar de lanzar $qpagina en el frame "principal", se envia como texto (creo) ya que muestra una pagina en blanco y si me voy a ver el codigo fuente el resultado es:
<?php
header("Location: 100.php");
?>

¿Qué es lo que hago mal?

Gracias de nuevo.
  #4 (permalink)  
Antiguo 07/09/2005, 08:07
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
mal, tu funcion, basta con esto:

function lanzarMenu($qpagina){
header("Location: $qpagina.php");
return;
}

en realidad para que eval?
por que no hacer la redireccion sin mas?
  #5 (permalink)  
Antiguo 07/09/2005, 11:08
 
Fecha de Ingreso: septiembre-2005
Mensajes: 7
Antigüedad: 18 años, 7 meses
Puntos: 0
Muchisimas gracias por segunda vez. La solucion que propones funciona correctamente.
Utilizo Eval($cadena) porque la funcion a lanzar ($mifuncion) no es siempre la misma, puede ser lanzarMenu, o lanzarSubMenu o lanzarProceso.
Finalmente el codigo queda así:
<?php
// Recoge los valores pasados
$mifuncion=$_GET["f"];
$pagina=$_GET["p"];

$cadena="$mifuncion(\"$pagina\");";
eval($cadena);

function lanzarMenu($qpagina){
header("Location: $qpagina.php");
return;
}
?>
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 00:08.