• Publicidad

Paso de datos de un cgi a otro (en este caso)

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Paso de datos de un cgi a otro (en este caso)

Notapor slopal » 2006-03-20 12:52 @578

Hola...

Tengo un script que genera una página html donde "monta" una tabla tipo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
AA 3 [x]
AT 2 [x]
CC 3 [x]
CG 1 [x]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

donde [x] es un botón tipo "submit".

Cada submit tiene que llamar a un cgi que abrirá otra ventana del navegador y mostrará "otras cosas" en HTML.

Al principio de mi primer cgi (el que crea la tabla) tengo puesto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "<form action=\"http://gralggen.lsi.upc.es/cgi-bin/freq/graphic.cgi\" target=\"_blank\" method=\"POST\" ENCTYPE=\"multipart/form-data\">";
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

para definir que los botones tienen que llamar a graphic.cgi.

Hasta aquí supongo que bien...

La tabla la creo con un bucle que va haciendo las partes HTML (td, tr... y pintando los campos y creando cada botón).

Antes de crear el botón envío unos datos "ocultos" tipo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print"<input type=\"hidden\" name=\"freq\" value=\"$f\">";
  2. ....;
  3. ...;
  4.  
  5. print"<input name=\"$tup_most\" value=\"    X    \" type=\"submit\">\n"; # el botón
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


PROBLEMA: Cuando genero la tabla me sale bien y tal. Pero al pulsar en los botones, si pulso en el primero, me pasa bien los datos y me hace lo que toca bien. En cambio si pulso a cualquier otro botón me sale lo mismo que con el primero... Entonces supongo que solo se envían los datos "ocultos" la primera vez (de hecho he puesto chivatos y he comprobado que es eso lo que pasa), pero no sé por qué.

No sé si será porque se llaman igual, si los tendré que nombrar de forma especial (en el input name del botón intenté que fuera diferente el nombre por si se confundía, pero nada...).

Seguro que hay una forma muy fácil de hacerlo...

:oops:

P.D.: ¡Qué bien me explico...! GRACIAS
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Publicidad

Notapor slopal » 2006-03-20 13:16 @595

Por otra parte me han comentado que tendría que crear un <form> para cada "botón" con nombre diferente...

Pero tampoco me funciona.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                  print "<form name=\"form<span style="font-weight: bold">$cont</span>\" action=\"http://gralggen.lsi.upc.es/cgi-bin/freq/graphic.cgi\" target=\"_blank\" method=\"POST\" ENCTYPE=\"multipart/form-data\">";
  2.  
  3.                  # enviament paràmetres ocults per fer la imatge
  4.                  ...
  5.                  print"<input type=\"hidden\" name=\"freq\" value=\"$f\">";
  6.                  ...
  7.  
  8.                  print"<input name=\"$tup_most\" value=\"    X    \" type=\"submit\">\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Si miro el código fuente de la tabla cuando la muestra en HTML solo me sale el <form0> (el primero...) :S
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: Paso de datos de un cgi a otro (en este caso)

Notapor explorer » 2006-03-20 13:24 @600

Cuando el usuario pulsa en un botón submit, el cliente web envía al servidor los valores de todos los campos que estén definidos dentro del <form> al que pertenece ese botón.

Si quieres enviar información distinta según el botón pulsado, tienes que: O crear nombres distintos para cada una de las opciones ocultas, O un formulario para cada botón submit.

En caso de elegir la segunda opción, creas un <form> por cada botón submit junto con las opciones ocultas.

Para distinguir qué botón ha sido pulsado puedes hacerlo:
  • Dando a cada botón submit un nombre distinto (boton1, boton2, etc., etc.)
  • Poner un campo oculto con el nombre o número de la opción a la que pertenece de las 4 que hay (<input type="hidden" name="opcion" value="1">...).

Luego, en el programa, primero miras qué botón ha sido pulsado y actúas en consecuencia.

P.D. No sé si me he explicado.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-03-20 13:36 @608

¡Gracias, explorer!

Pero... :roll: con la primera solución que me habían dado ya iba... Lo que me había olvidado de cerrar el <form> dentro del bucle y claro... :P

¡Aaah, qué alegría-rabia que dan estos errores tontos! Ya va :)
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

El truco del almendruco XD

Notapor macgregor » 2006-03-23 05:06 @254

Hola.

Lamento responder después de varios días, pero tuve mucho trabajo y no me pude pasar por el foro :(

Teniendo en cuenta que ya te funciona es posible que no modifiques tu código con la idea que te voy a dar, pero teniendo en cuenta que se trata de un trabajo académico es posible que te lo plantees :)

De todas formas te explico otra opción para que la tengas en cuenta en futuras ocasiones, y otros usuarios también la puedan aplicar.

Otra forma de hacer lo que quieres, desde mi punto de vista más elegante y sencilla a la hora de programar y entender el código es haciendo un solo <form> y todos los botones que quieras.

No tienes necesidad de definir parámetros duplicados con nombres distintos para pasar la información a los diferentes <form>.

El truco por llamarlo así consiste en modificar el action del formulario al pulsar en el botón, de esta manera es como si tuvieras tantos formularios distintos como botones y todos reciben el mismo número de parámetros con los mismos nombres :)

Mucho más sencillo a la hora de programar el o los cgi que recibirán estos parámetros, no te volverás loco con tanto nombre diferente :D
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <button type="button" name="boton1" id="boton1" onclick = "document.formulario.action='http://gralggen.lsi.upc.es/cgi-bin/freq/boton1.cgi'; document.formulario.submit();">
  2.                         <IMG title="Soy un fiber loc@" ALT="Como todos XD" src="../img/mi_imagen.gif" border="0"/>
  3. </button>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

(en el código HTML se debe poner "formulario" al nombre del <form>)

Este código en Javascript es independiente del navegador sigue el DOM del documento, por lo tanto funciona en todos. Afortunadamente ;)

Espero que te sirva de ayuda.

Un saludo.
MACGREGOR [TM]
Avatar de Usuario
macgregor
Perlero nuevo
Perlero nuevo
 
Mensajes: 80
Registrado: 2004-12-09 07:32 @355
Ubicación: españa

Notapor slopal » 2006-04-10 09:14 @426

Gracias, macgregor, como no estoy sobrada en tiempo... no lo probaré :oops:, pero si en el futuro lo necesito me será útil.

Soy una fiber sin tiempo... como todos :wink:
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 10 invitados