Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » CGI con DIV oculto  RESUELTO Responder al tema
Nuevo tema


Página 1 de 2  [ 17 mensajes ]  Ir a página 1, 2  Siguiente
 
Nota 2011-08-19 07:11 @341

Perlero Nuevo
Registrado: 2009-11-27 05:47 @283
Mensajes: 37
CGI con DIV oculto  RESUELTO
Buenas tardes.

Como proyecto tengo que hacer un CGI, en el que al pulsar sobre un enlace se despliegue una descripción del mismo. Pensaba hacerlo a través de un DIV oculto. Además, al lado del enlace sería recomendable que apareciera un botón que, al pincharlo, te llevara a la página relacionada.

Los datos que aparecerían en el CGI, estarían en una BBDD MySQL. Para ir trabajando, de forma local, me he instalado el paquete XAMPP.

Por ahora lo que he conseguido es conectarme a la BBDD y presentarlo en un HTML. Para mí ahora viene lo difícil, que sería definir cómo incrusto el DIV en el código y cómo enlazo a las distintas páginas donde estaría toda la información completa.

Un saludo
Gonzalo


Nota 2011-08-26 04:38 @235

Perlero Nuevo
Registrado: 2009-11-27 05:47 @283
Mensajes: 37
Re: CGI con DIV oculto
Buenos días a todos

Aquí está el código, si no añado el DIV, funciona bien, pero con el DIV me aparece un problema al ejecutarlo.
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!c:/xampp/perl/bin/perl.exe
  2. use strict;
  3. use warnings;
  4. use CGI qw/:standard/;
  5. use DBI;
  6.  
  7. my $dbh=DBI->connect("DBI:mysql:mysql;host=localhost",'','')
  8.         or die "Cannot connect to database:$DBI::errstr";
  9.        
  10. my $sth=$dbh->prepare("SELECT denominacion,grupo,explicacion FROM lineas ORDER BY grupo");
  11. $sth->execute() or die "Cannot execute sth:$DBI::errstr";
  12.  
  13. print header,
  14.          start_html ("RECETAS DE COCINA"),
  15.          table ({-border=>0});
  16.         while(my($denominacion,$grupo,$explicacion)=$sth->fetchrow_array()){
  17.                 if ($explicacion eq ""){
  18.                         $explicacion="<b> </b>";
  19.                 }
  20.                 print Tr({-aling=>'CENTER', -valing=>'TOP'},
  21.                         [td(["$denominacion","$grupo"])
  22.                         ]);
  23.                        
  24.                 print Div ({id=>"descripcion"},
  25.                 Tr({-aling=>'CENTER', -valing=>'TOP'},
  26.                 [td(["$explicacion"])
  27.                         ]),
  28.                 );     
  29.                 }
  30.                


El error que me aparece en la consola es el siguiente:

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
Print () on unopened filehandle DIV at line 24


Intentaré seguir buscando el error, a ver si puedo avanzar con el script.

Un saludo
Gonzalo


Nota 2011-08-26 04:54 @246
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: CGI con DIV oculto
Cambia
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1.                 print Div ({id=>"descripcion"},
por
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1.                 print div({id=>"descripcion"},

_________________
JF^D Perl programming


Nota 2011-08-26 05:47 @283

Perlero Nuevo
Registrado: 2009-11-27 05:47 @283
Mensajes: 37
Re: CGI con DIV oculto
Gracias, Explorer.

A veces con tanto signo de puntuación me pierdo, y se me van las cosas sencillas.

Ahora intentaré insertarle el JavaScript, para que al picar sobre la descripción me la muestre u oculte, a ver qué sale.

Un saludo
Gonzalo


Nota 2011-08-29 03:45 @198

Perlero Nuevo
Registrado: 2009-11-27 05:47 @283
Mensajes: 37
Re: CGI con DIV oculto
Hola a todos

He estado buscando info en Internet de cómo incluir el JavaScript dentro del código cgi, y no existe mucha información al respecto. Revisando la info existente y teniendo en cuenta cómo debía ir el código de JavaScript que obtuve de la red. Esto es lo que puedo hacer.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. print header;
  2. .
  3. .
  4. .
  5. print <<E_1;
  6. <script>
  7. function muestra_oculta(id){....................................
  8. if (document.getElementById){ //se obtiene el id
  9. var el = document.getElementById(id); //se define la variable "el" igual a nuestro div
  10. el.style.display = (el.style.display == 'none') ? 'block' : 'none'; //damos un atributo display:none que oculta el div
  11. }
  12. }
  13. window.onload = function(){/*hace que se cargue la función lo que predetermina que div estará oculto hasta llamar a la función nuevamente*/
  14. muestra_oculta('descripcion');/* "contenido_a_mostrar" es el nombre que le dimos al DIV */
  15. }
  16. </script>
  17. E_1
  18. ;
  19.          start_html ("RECETAS DE COCINA"),
  20. .
  21. .
  22. .
  23.  


Y ésta es la parte del código que debería ir asociada al JavaScript

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. .
  2. .
  3. print
  4.     Tr(
  5.         { -aling => 'CENTER', -valing => 'TOP' },
  6.         [
  7.             td([
  8.                 a(
  9.                     { -href => "#", Onclick => "muestra_oculta('descripcion')" },
  10.                     "$denominacion"
  11.                 ),
  12.                 "$grupo"
  13.             ]),
  14.         ]
  15.     );
  16. print
  17.     div(
  18.         { id => "descripcion" },
  19.         Tr(
  20.             { -aling => 'CENTER', -valing => 'TOP' },
  21.             [
  22.                 td([
  23.                     "$explicacion"
  24.                 ])
  25.             ]
  26.         ),
  27.     );
  28. .
  29. .
  30. .
  31.  


¿Alguna idea de cuál es el motivo por el que no funciona, o es que estoy haciendo algo mal y no me he dado cuenta?

Un saludo
Gonzalo


Nota 2011-08-29 12:53 @578
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: CGI con DIV oculto
Te falta un print() en el start_html(). Además, puedes usar la facilidad de CGI.pm para meter el código JavaScript. Algo así (no probado):

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. my $codigo_js = << EOJ;
  2. function muestra_oculta(id) {
  3.     if (document.getElementById){             // se obtiene el id
  4.         var el = document.getElementById(id); // se define la variable "el" igual a nuestro div
  5.                                               // damos un atributo display:none que oculta el div
  6.         el.style.display = (el.style.display == 'none') ? 'block' : 'none';
  7.     }
  8. }
  9. window.onload = function() {
  10.     // hace que se cargue la función
  11.     // lo que predetermina que div estará oculto hasta llamar a la función nuevamente
  12.     // "contenido_a_mostrar" es el nombre que le dimos al DIV
  13.     muestra_oculta('descripcion');
  14. }
  15. EOJ
  16.  
  17. print header;
  18. print start_html(
  19.      -title  => 'RECETAS DE COCINA',
  20.      -script => $codigo_js,
  21. );
  22.  

_________________
JF^D Perl programming


Nota 2011-08-30 03:19 @180

Perlero Nuevo
Registrado: 2009-11-27 05:47 @283
Mensajes: 37
Re: CGI con DIV oculto
Hola a todos

He hecho el cambio y me aparece nuevo error. La función no se ejecuta correctamente, es decir, el div no se oculta y cuando picas sobre el enlace aparece el siguiente error:

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
Objeto no encontrado: El enlace requerido no ha sido localizado en este servidor. El enlace en la página referente parece tener algun error o ha expirado.


El script, está en un servidor local, y las modificaciones las realizo sobre el script que está en la carpeta cgi-bin.

Seguiré trasteando a ver si doy con la solución.

Un saludo
Gonzalo


Nota 2011-08-30 05:59 @291
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: CGI con DIV oculto
La parte del código que genera el código HTML también está mal, o sobran cosas:

* Un Tr() es una fila de una tabla (<table>) por lo que debe estar dentro de una tabla
* No es 'aling' ni 'valing', sino 'align' y 'valign'
* Si dentro de una celda o una fila solo hay un elemento, no es necesario definir el contenido como arrays anónimos. Tampoco pasa nada si de deja así, desde luego
* A Onclick le falta el '-' delante
* Cuando quieres pasar una variable como dato, no es necesario ponerla entre comillas dobles, como el caso de "$denominacion", "$grupo" y "$explicacion". Con solo poner $denominacion, $grupo y $explicacion, ya es suficiente.

Quedaría algo así (no probado):
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. print
  2.     table(
  3.         Tr({ -align => 'center', -valign => 'top' }, [
  4.             td([
  5.                 a({ -href => "#", -Onclick => "muestra_oculta('descripcion')" }, $denominacion),
  6.                 $grupo,
  7.             ]),
  8.         ]),
  9.     );
  10.  
  11. print
  12.     div({ id => "descripcion" },
  13.         table(
  14.             Tr({ -align => 'center', -valign => 'top' }, [
  15.                 td([
  16.                     $explicacion,
  17.                 ]),
  18.             ]),
  19.         ),
  20.     );
  21.  

Te recomiendo que compruebes el código HTML una vez que ha sido generado, en el navegador web, para ver si es correcto o no.

_________________
JF^D Perl programming


Nota 2011-08-30 09:26 @434

Perlero Nuevo
Registrado: 2009-11-27 05:47 @283
Mensajes: 37
Re: CGI con DIV oculto
Hola Explorer

Gracias por la ayuda.

La instrucción para la creación de la tabla (Table), la incluí después de start_html, porque quería que la tabla se fuera generando dinámicamente a la vez que el bucle fuera leyendo los datos de la BBDD, o al menos eso decía el material que consulté.

He modificado lo que me comentas y sigue sin ejecutarse la llamada al evento Onclick. Además he revisado el html que se genera y es correcto.

Hay una cosa que no entiendo, de la parte del script que publicaste, y es el "código" que aparece antes de la función javascript, dentro del evento, (..javascript:muestra...).

¿Se utilizaría cuando se hace la llamada a la función usando el escalar $jscript?

Seguiré peleando con el código.

Un saludo
Gonzalo


Nota 2011-08-30 09:42 @446
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: CGI con DIV oculto
Hay un error en el código que te he puesto: sobra el "javascript:".

Lo que hice fue meter todo el código JavaScript, como si fuera un texto, dentro del escalar $codigo_js. Luego, con el print del start_html(), ese código sale hace la página (que se colocará en el <head> del HTML).

Quien va a ejecutar el código JavaScript es el usuario del navegador web, al hacer el clic sobre el enlace.

Para estar seguros, mira a ver la consola de errores (menú Herramientas del Firefox) para que te saque los errores JavaScript, y así sabrás si es un problema del HTML o del código JavaScript.

_________________
JF^D Perl programming


Nota 2011-08-30 09:52 @453

Perlero Nuevo
Registrado: 2009-11-27 05:47 @283
Mensajes: 37
Re: CGI con DIV oculto
Parece ser que hay dos errores

El primero aparece al cargar la página

-
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
Error: syntax error
Archivo de origen: http://localhost/cgi-bin/lineas2.cgi
Línea: 9, columna: 28
Código fuente:
function muestra_oculta(id){....................................


y el segundo al intentar ejecutar el código JavaScript, si picamos sobre el enlace.

--
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
Error: muestra_oculta is not defined
Archivo de origen: http://localhost/cgi-bin/lineas2.cgi
Línea: 1


Antes de añadirlo al script, probé en HTML y funcionaba sin problemas.

Un saludo
Gonzalo


Nota 2011-08-30 09:55 @455
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: CGI con DIV oculto
gonzalos escribió:
Antes de añadirlo al script, probé en HTML y funcionaba sin problemas.

entonces... viendo las diferencias entre uno y otro, puedes ver qué es lo que sobra, lo que falta, o lo que está mal...

_________________
JF^D Perl programming


Nota 2011-09-01 06:34 @315

Perlero Nuevo
Registrado: 2009-11-27 05:47 @283
Mensajes: 37
Re: CGI con DIV oculto
Buenas tardes a todos

Finalmente he conseguido que funcione la aplicación, a excepción de una cosa y es que el Div que debería estar oculto aparece visible al cargar la página.

Además he hecho unas pequeñas modificaciones en el código, para que el el id del Div se asocie al id de la tabla de la BBDD y así el código javascript funcione independientemente con cada párrafo a ocultar.

Aquí dejo las modificaciones

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. print table (
  2.  
  3.                     Tr({ -align => 'CENTER', -valign => 'top' }, [
  4.                         td([
  5.                             a({-href=>"#", -Onclick=>"muestra_oculta('$id')"},$denominacion),
  6.                
  7.                                 $grupo]),
  8.                     ]),
  9.                 );
  10.            print div({id=>$id},
  11.            
  12.                   table (
  13.  
  14.                     Tr({ -align => 'CENTER', -valign => 'top' }, [
  15.                         td([
  16.                
  17.                                 $explicacion]),
  18.                     ]),
  19.                 ),
  20.              ),


Seguiré buscando para corregir el pequeño error que queda por solucionar.

Un saludo
Gonzalo


Nota 2011-09-01 06:44 @322
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: CGI con DIV oculto
Quizá sea tan sencillo como poner un display:none:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. print div({-id => $id, -style => 'display:none'},

_________________
JF^D Perl programming


Nota 2011-09-01 07:06 @337

Perlero Nuevo
Registrado: 2009-11-27 05:47 @283
Mensajes: 37
Re: CGI con DIV oculto
Estupendo, muchas gracias por la respuesta.

Un saludo
Gonzalo


Responder al tema  [ 17 mensajes ]  Ir a página 1, 2  Siguiente

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO