• Publicidad

Mandar datos del formulario a otro cgi

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

Mandar datos del formulario a otro cgi

Notapor marcmb » 2010-05-03 10:14 @468

Buenas, me he registrado hace un ratito y ya tengo un problemilla: quiero hacer un cgi que te pida nombre de usuario y contraseña y luego mande estos datos a otro cgi. De momento tengo el formulario que te pide los datos y te los muestra en pantalla, ¿qué debo hacer para mandarlo a otro cgi? ¿Y luego para que el otro cgi los reciba?

El cgi es simplemente esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #
  3. use CGI qw(:standard :form);
  4. use CGI::Carp qw(fatalsToBrowser);
  5.  
  6. print   header,
  7.         start_html(
  8.             -title  => 'El título de la web',
  9.             -author => 'correo electronico',
  10.             -lang   => 'es-ES',
  11.         ),
  12.         '<body background="/fondo.jpg" bgcolor="silver">',
  13.         '<center>Acceso a los usuarios registrados:</center>',br,br,
  14.         start_form,
  15.             'Nombre? :',br,textfield('nom'),br,
  16.             'Contrase&ntilde;a? :',br,password_field('paraulapas'),p,
  17.             submit('Probar'),
  18.         end_form,
  19.         ;
  20.  
  21. if (param('nom') ne "") {
  22.     print br,br,
  23.           'Tu nombre es ',param('nom'),p,
  24.           'Tu pass: ',param('paraulapas')
  25.           ;
  26. }
  27.  
  28. end_html;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Gracias de antemano.
Avatar de Usuario
marcmb
Perlero nuevo
Perlero nuevo
 
Mensajes: 55
Registrado: 2010-05-03 07:42 @362
Ubicación: Girona

Publicidad

Re: Mandar datos del formulario a otro cgi

Notapor explorer » 2010-05-03 10:46 @490

Bienvenido a los foros de Perl en Español, marcmb.

Para pasar los parámetros a otro CGI, desde el primero, tienes que hacer una petición HTTP a ese CGI. Puedes ser algo tan sencillo como

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use LWP::Simple;

my $resultado = get('http://servidor/cgi-bin/segundo.cgi?arg1=par1&arg2=par2');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ten en cuenta que el usuario solo verá la salida del primer cgi.

Otra forma de hacerlo. Si el segundo cgi está en el mismo servidor que el primero, se podría intentar con una llamada system() o qx(). De aquí depende de si el sistema permite ejecutar nuevos procesos desde los cgi.

Otra forma de hacerlo. Si el primer cgi ha terminado con todo lo que tenía que hacer, podría llamar al segundo cgi mediante un Location:, y así, es el navegador del usuario el que hace la petición para obtener el segundo cgi. Los parámetros son pasados por el URL que el primero pasará al segundo por medio de ese Location.
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

Re: Mandar datos del formulario a otro cgi

Notapor marcmb » 2010-05-03 12:42 @571

No había caído en esa solución :? pero me gustaría más averiguar sobre las otras maneras de hacerlo. El servidor es mi propio PC, el cual ya tengo funcionando perfectamente con Virtualhost, gracias a algunos posts tuyos en el foro ;) . Si hiciera falta cambiar algo en el Apache lo cambio, porque al tratarse de mandar una contraseña sería muy bueno que no salga en la barra del explorador, ya que si algún día me conecto desde un cyber cualquier "curioso" podría ver perfectamente la contraseña.

Y otra cosa, probé GET y POST para mandar formularios de un html a un cgi y con GET el cgi los recoge perfectamente, pero con POST casi me vuelvo loco, y acabé desistiendo (estaba ya echando humo de la cabeza), es por eso que ahora estoy haciéndolo directamente del cgi, y si fuera posible mandar las variables directamente de un cgi a otro con system() o qx(); sería la caña, ¡je,je,je!, todo quedaría mejor implementado (para mi gusto al menos).

Saludos y mil gracias por responder tan rápido, ¡me he quedado sorprendido de la rapidez!
Avatar de Usuario
marcmb
Perlero nuevo
Perlero nuevo
 
Mensajes: 55
Registrado: 2010-05-03 07:42 @362
Ubicación: Girona

Re: Mandar datos del formulario a otro cgi

Notapor explorer » 2010-05-03 14:39 @652

Usando el módulo CGI, el manejo (recepción) de los argumentos pasados por POST se hace de la misma manera que con GET.

A la hora de hacer un POST, lo puedes hacer con el módulo HTTP::Request o el HTTP::Request::Common. Tienes ejemplos en lwpcook.

Si los programas van a funcionar en el mismo servidor, pues entonces sí que puedes ejecutarles con system() o qx(), e incluso puedes inventarte otros métodos para intercambiar información. Por ejemplo, escribiendo ficheros en el disco. Así no pasa ninguna información por los URL.

De todas maneras... no veo mucho sentido que un cgi llame a un segundo programa, para realizar una tarea... ¿es que no la puede realizar el primer cgi?

Faltan detalles...
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

Re: Mandar datos del formulario a otro cgi

Notapor marcmb » 2010-05-03 16:56 @747

Entiendo que no lo entiendas, ¡je,je.je!, pero es simplemente por comodidad, para tener un cgi que solo esté para identificación de usuarios y otro para generar código HTML.

De esta manera tengo un "programa" con unas pocas líneas (el de verificación de usuarios) y el otro más amplio para generar el código. Aparte así no tengo que preocuparme de tener variables repetidas, etc... como curiosidad te diré que empecé a usar Perl hace 10 u 11 años justamente para que me generara webs para no tener que hacer cada web a mano (para que veas lo perro que soy ¡ja,ja,ja!).

Hoy ya no, pero mañana me pondré a mirar todo eso que me has comentado, y una preguntita que quería hacerte a título personal: en el miniportátil tengo Ubuntu 10 instalado al igual que en el de sobremesa, pero el ahorro de batería no es su fuerte, precisamente, y en un post tuyo vi que también tienes un miniportátil, ¿qué distro me recomendarías? Por si interesa, el portátil es el Asus1000h (lo digo por compatibilidades).
Avatar de Usuario
marcmb
Perlero nuevo
Perlero nuevo
 
Mensajes: 55
Registrado: 2010-05-03 07:42 @362
Ubicación: Girona

Re: Mandar datos del formulario a otro cgi

Notapor explorer » 2010-05-03 17:46 @781

marcmb escribiste:De esta manera tengo un "programa" con unas pocas líneas (el de verificación de usuarios) y el otro más amplio para generar el código. Aparte así no tengo que preocuparme de tener variables repetidas, etc...
Pues para eso sirven los módulos... te construyes un módulo y tienes el código separado (espacios de nombres de las variables separados).

marcmb escribiste:como curiosidad te diré que empecé a usar Perl hace 10 u 11 años justamente para que me generara webs para no tener que hacer cada web a mano (para que veas lo perro que soy ¡ja,ja,ja!).
De un script Perl así, nació PHP.

marcmb escribiste:en el miniportátil tengo Ubuntu 10 instalado al igual que en el de sobremesa, pero el ahorro de batería no es su fuerte, precisamente, y en un post tuyo vi que también tienes un miniportátil, ¿qué distro me recomendarías? Por si interesa, el portátil es el Asus1000h (lo digo por compatibilidades).
Yo tengo el Asus EeePC 901, creo recordar, pero apenas lo uso. Me es muy incómodo el teclado tan pequeño. El consumo de batería es función de lo que hagas con él. Yo lo usaba para tomar notas en reuniones, y cuando no apuntaba nada, pulsaba el botón de apagado de la pantalla. De esa manera, la batería me aguantaba toda la jornada laboral. Si, en cambio, me pongo a ver películas, pues entonces la batería dura mucho menos, claro. No hay mucha diferencia con las distribuciones, porque casi todas traen la misma combinación de kernel más controladores hardware. Lo que sí es cierto es que las cercanas a Debian (como Ubuntu) hablan mejor con el hardware especial de algunos aparatos.

Para Asus Eee PC y familia tienes la Ubuntu Eee. Aquí hay una web con ejemplo de instalación en tu equipo.
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

Re: Mandar datos del formulario a otro cgi

Notapor marcmb » 2010-05-04 11:56 @539

Muy interesante la información de las distintas distribuciones, ¡je,je,je! Al final lo de abrir la otra web lo he hecho como tu decías pero con un script de JavaScript en el Perl, de la siguiente forma:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$var = '?param1='.$tecm.'&param2='.$tecd.'&param3='.$tecb;

print '<script type="text/JavaScript">',
      'location.href="elnombredelcgi.cgi', $var, '"',
      '</script>'
      ;
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y de esta manera solo salen estos datos en la URL que no importa que se vean. Las líneas a partir del print() están dentro de un if() que es el que comprueba los datos de usuario y manda esos parámetros del usuario concreto que ha leído anteriormente de un archivo.

¡Gracias por la ayuda!
Avatar de Usuario
marcmb
Perlero nuevo
Perlero nuevo
 
Mensajes: 55
Registrado: 2010-05-03 07:42 @362
Ubicación: Girona

Re: Mandar datos del formulario a otro cgi

Notapor explorer » 2010-05-04 12:36 @567

Hummm...

Cuando tengas un rato, deberías aprender el concepto de "sesiones".

Casi todos los módulos CGI para Perl les contemplan, empezando por las humildes galletas (cookies), así que es una buena forma de controlar la sesión de un usuario, y te ahorras el tener que comprobar la autenticación del usuario: si tiene una galleta, es que es un usuario legal, así que le mando los datos del fichero, y punto.
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

Re: Mandar datos del formulario a otro cgi

Notapor marcmb » 2010-05-05 09:50 @452

Pues como estoy sin trabajo como casi 5 millones de españoles tiempo tengo, pero como empecé a hacer la web de 0 y el servidor hará cosa de una semana, ahora estoy bastante liado con otras cosas de la web (como escribir cada dato de una matriz en una línea distinta dentro del archivo, que es lo que estoy buscando ahora), pero tienes razón, las galletitas son algo perfecto para esto y quiero implementarlas más adelante. Para lo que estoy haciendo realmente no las necesito, pero no está de menos aprender todo lo que sea posible. Cuando termine la web básica me pondré con las cookies y luego buscaré el libro que me has recomendado de los módulos (en otro hilo) y cambiaré la manera de uso de los cgi y dejaré solo uno con los módulos aparte.

¡Muchas gracias por toda la ayuda!
Avatar de Usuario
marcmb
Perlero nuevo
Perlero nuevo
 
Mensajes: 55
Registrado: 2010-05-03 07:42 @362
Ubicación: Girona

Re: Mandar datos del formulario a otro cgi

Notapor marcmb » 2010-05-11 09:41 @445

Explorer, ahora que tengo todo funcionando perfectamente en la web, me gustaría quitar el poco JavaScript que tengo en algunos cgi, como lo de abrir otra página.

He estado probando con get, redirect, etc... y no me funciona.

Al usar get('laurl') no hace absolutamente nada, y si le pongo redirect('laurl') lo que hace es escribirme:

Status: 302 Found Location: laurl

Pero en cambio, redirect lo uso en un cgi sin ningún código HTML y me redirecciona sin problemas, me tiene algo confuso esto...

Probablemente sea algo que no hago bien, pero me gustaría tener los cgi íntegramente con Perl, que al JavaScript le tengo un poco de manía, ya que hay usuarios que bloquean el uso de éste en el navegador, y esto es algo que haría que la página dejara de funcionar correctamente, ya que al identificarte como usuario, acceso.cgi lo que hace es mandar unos parámetros al frame de arriba (menu.cgi) y escribir una galleta, y el frame de arriba cuando recibe los parámetros lee la galleta y la borra. Aparte cambia la página acceso.cgi por otra donde sale la explicación del menú que se abre arriba (con las opciones de usuario).

He estado mirando por la red y parecía que el problema radicaba en que lo ponía dentro de donde está el código HTML, pero he probado poniendo print end_html; antes de ejecutar el redirect y tampoco. Y todo lo que encuentro por Internet es para usar un cgi que solo se preocupa de redireccionarte, sin hacer nada más.

¿Qué estoy haciendo mal?
Avatar de Usuario
marcmb
Perlero nuevo
Perlero nuevo
 
Mensajes: 55
Registrado: 2010-05-03 07:42 @362
Ubicación: Girona

Siguiente

Volver a Básico

¿Quién está conectado?

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