• Publicidad

Probando AJAX en Perl

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Probando AJAX en Perl

Notapor Negrazo » 2014-10-06 13:52 @619

Hola a todos:

Tengo una aplicación para la Captura de Calificaciones por Alumno en una escuela particular.

Actualmente me funciona bien, pero le quiero meter la característica Ajax para hacerla más práctica y eficiente.

El dato principal de entrada es el Código del Alumno (primer programa), con este acceso la Tabla de Alumnos y obtengo datos como su Nombre, Nivel (Kinder, Primaria o Secundaria), el Grado (primero, segundo, tercero, etc.), el Grupo (a, b, c, etc.), el Ciclo escolar (2013_2014, 2014_2015, etc.), esto se hace en un segundo programa.

Ahora, se muestra la Opción de Idioma, ya que el colegio es Bilingüe (Español, Inglés) y en un tercer programa muestro todas las Materias que lleva el Alumno para ese Nivel, Grado e Idioma y se capturan las notas respectivas y se graban.

Al meterle Ajax, se me está complicando la existencia y no le encuentro el(los) error(es) porque en el programa nuevo, en cuanto se captura el Código del Alumno, en el mismo programa se leen los datos del Alumno (Nivel, Grado, Grupo, Nombre y Ciclo), se selecciona el Idioma de la evaluación y esto me debería mostrar todas las materias que lleva el Alumno para ese Nivel, Grado e Idioma, pero algo mal está pasando porque no está enviando los datos del alumno a una segunda función de Ajax y al tratar de leer las Materias para calificarlas, no encuentra nada porque los datos del alumno traen null o vacíos y el acceso a la tabla de Calificaciones requiere todos esos datos se basa en esos datos.

Yo ya he hecho algunos programas en Ajax, pero esto está más avanzado para mí y no salgo del problema.

Si alguien ha hecho algo parecido le agradeceré y me dé una orientada por dónde ando mal.

Estoy utilizando Perl en Linux Mint, MySQL y el servidor web es Apache.

Aquí pongo el código del programa por si alguien le puede echar un vistazo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl  -w
  2.  
  3. use CGI;
  4. use CGI::Ajax;
  5. use DBI;
  6. use CGI::Session;
  7. use Date::Simple ( 'date', 'today' );
  8. use CGI qw(param uploadInfo);
  9. use Encode;
  10.  
  11. print "Content-type: text/html;charset=UTF-8\n\n";
  12.  
  13. my $dt            = today();
  14. my $cgi           = new CGI;
  15. my $CGISESSID     = $cgi->param('CGISESSID');
  16. my $gradoaut      = "";
  17. my $grupoaut      = "";
  18. my $nivaut        = "";
  19. my $clave         = "";
  20. my $calif         = "";
  21. my $permiso       = "";
  22. my $p1            = "";
  23. my $p2            = "";
  24. my $p3            = "";
  25. my @doc3          = "";
  26. my @doc1          = "";
  27. my @row           = "";
  28. my @nuevos        = "";
  29. my $ind           = "";
  30. my $user          = "";
  31. my $stream_select = "";
  32. my @reg5          = "";
  33. my $i             = 0;
  34. my $session       = CGI::Session->load( "driver:File", $CGISESSID, { 'Directory' => '/tmp/' } )
  35.     or die CGI::Session->errstr;
  36. $user = $session->param('user');
  37. $user = "n/a" unless $user;
  38.  
  39. my $pjx = new CGI::Ajax( 'js_func' => \&perl_func, 'js_func1' => \&perl_func1, 'skip_header' => 1, );
  40. print $pjx->build_html( $cgi, \&Show_HTML );
  41. $pjx->JSDEBUG(2);
  42.  
  43. sub perl_func {
  44.     print "Antes..." . "@_" . "<BR>";
  45.     my $alumno = shift;
  46.     my $usr    = shift;
  47.     print "Después..." . "@_" . "<BR>";
  48.  
  49.     # Configurar el acceso a la DB
  50.     my $con = DBI->connect( 'DBI:mysql:database=freyre;host=localhost', 'root', 'root' )
  51.         or die('No puedo leer la Base de Datos');
  52.     my $sth = $con->prepare("SELECT nivel,grado,grupo,nombre,ciclo FROM alumnos where codigo = ? ");
  53.     $sth->execute($alumno) or die "Error al leer Alumnos...!";
  54.  
  55.     my @doc = $sth->fetchrow_array;
  56.     $doc[0] = "nada" unless $doc[0];
  57.     my $nivel = $doc[0];
  58.     $doc[1] = "nada" unless $doc[1];
  59.     my $grado = $doc[1];
  60.     $doc[2] = "nada" unless $doc[2];
  61.     my $grupo = $doc[2];
  62.     $doc[3] = "nada" unless $doc[3];
  63.     my $nombre = $doc[3];
  64.     $doc[4] = "nada" unless $doc[4];
  65.     my $ciclo = $doc[4];
  66.     my $nombre1 = encode( "UTF-8", $nombre );
  67.  
  68.     my $dbh5 = $con->prepare("SELECT numlet, mesbim FROM gradosh WHERE grado = ? ");
  69.     $dbh5->execute($grado) or die "¡No puedo leer Grados...!";
  70.     @reg5 = $dbh5->fetchrow_array;
  71.     my $numlet = $reg5[0];
  72.     my $mesbim = $reg5[1];
  73.  
  74.     my $dbh2 = $con->prepare("SELECT grado, grupo, nivel FROM usuario WHERE usuario = ? ");
  75.     $dbh2->execute($usr) or die "¡No puedo leer Usuarios...!";
  76.     @reg2 = $dbh2->fetchrow_array;
  77.     chomp @reg2;
  78.     $gradoaut = $reg2[0];
  79.     $grupoaut = $reg2[1];
  80.     $nivaut   = $reg2[2];
  81.     if   ( $nivaut eq $nivel or $nivaut eq "Todos" ) { $p1 = "1"; }
  82.     else                                             { $p1 = "0"; }
  83.  
  84.     if   ( $gradoaut eq $grado or $gradoaut eq "Todos" ) { $p2 = "1"; }
  85.     else                                                 { $p2 = "0"; }
  86.  
  87.     if   ( $grupoaut eq $grupo or $grupoaut eq "Todos" ) { $p3 = "1"; }
  88.     else                                                 { $p3 = "0"; }
  89.     $permiso = $p1 . $p2 . $p3;
  90.  
  91.     if ( $permiso eq "111" ) {
  92.  
  93.         $stream_select .= "<input type='hidden' name='alumno' value='$alumno'/>";
  94.         $stream_select .= "<input type='hidden' name='nivel' value='$nivel'/>";
  95.         $stream_select .= "<input type='hidden' name='nombre1' value='$nombre1'/>";
  96.         $stream_select .= "<input type='hidden' name='grado' value='$grado'/>";
  97.         $stream_select .= "<input type='hidden' name='grupo' value='$grupo'/>";
  98.         $stream_select .= "<input type='hidden' name='ciclo' value='$ciclo'/>";
  99.         $stream_select .= "<input type='hidden' name='numlet' value='$numlet'/>";
  100.         $stream_select .= "<input type='hidden' name='mesbim' value='$mesbim'/>";
  101.         $stream_select = "<BR><B>Seleccione el Idioma: </B>";
  102.         my $sth4 = $con->prepare("SELECT idioma FROM idiomas order by idioma");
  103.         $sth4->execute() or die "¡No puedo leer en Idiomas...!";
  104.         $stream_select .= qq! <select name="idioma" id="idioma"!;
  105.         $stream_select
  106.             .= qq! onclick="js_func1( ['alumno','nivel','nombre1','grado','grupo','ciclo','numlet','mesbim','idioma'],  ['mate'] );return true;">!;
  107.  
  108.         while ( @doc4 = $sth4->fetchrow_array ) {
  109.             $idioma = $doc4[0];
  110.  
  111.             $stream_select .= "<option value=$idioma>$idioma</option>\n";
  112.         }
  113.         $stream_select .= "</select><BR>";
  114.         $stream_select
  115.             .= "<table border='4' align='left'><tr class='grande'><th>Nivel</th><th>Nombre</th><th>Grado</th><th>Grupo</th><th>Ciclo</th></tr>";
  116.         $stream_select
  117.             .= "<tr class='small1'><td>"
  118.             . $nivel
  119.             . "</td><td>"
  120.             . $nombre1
  121.             . "</td><td>"
  122.             . $grado
  123.             . "</td><td>"
  124.             . $grupo
  125.             . "</td><td>"
  126.             . $ciclo
  127.             . "</td></tr>";
  128.         $stream_select .= "</table><BR>";
  129.         return ($stream_select);
  130.     }
  131.     else {
  132.         $stream_select .= "<table border='0' align='left'><tr class='grande'><th>Permiso</th><th>Usuario</th></tr>";
  133.         $stream_select
  134.             .= "<tr class='small2'><td>No puedes calificar este Nivel/Grado/Grupo</td><td>Usuario desconocido</td></tr>";
  135.         $stream_select .= "<tr class='small2'><td>" . $permiso . "</td><td>" . $user . "</td></tr>";
  136.         $stream_select .= "</table>\n";
  137.         $stream_select .= "<br>";
  138.         return ($stream_select);
  139.     }
  140. }
  141.  
  142. sub perl_func1 {
  143.     print "<B> Ya estoy en func1.....</B><BR>";
  144.     my $alumno  = shift;
  145.     my $nivel   = shift;
  146.     my $nombre1 = shift;
  147.     my $grado   = shift;
  148.     my $grupo   = shift;
  149.     my $ciclo   = shift;
  150.     my $numlet  = shift;
  151.     my $mesbim  = shift;
  152.  
  153.     # Configurar el acceso a la DB
  154.     my $con = DBI->connect( 'DBI:mysql:database=freyre;host=localhost', 'root', 'root' )
  155.         or die('No puedo leer la Base de Datos');
  156.     my $sth1 = $con->prepare("SELECT mesactivo  FROM control where nivel = ? ");
  157.     $sth1->execute($nivel) or die "No puedo leer Control....!";
  158.     @doc3 = $sth1->fetchrow_array;
  159.     my $mes = "nada" unless $mes = $doc3[0];
  160.     print "<B> Ya leí registro de control...Mesactivo...." . $mes . "</B><BR>";
  161.     print "<B> Ya leí GRADOSH...Gradosh...." . $nivel . "</B><BR>";
  162.     if ( $mes eq 'Ene' ) { $ind = '01'; }
  163.     if ( $mes eq 'Feb' ) { $ind = '02'; }
  164.     if ( $mes eq 'Mar' ) { $ind = '03'; }
  165.     if ( $mes eq 'Abr' ) { $ind = '04'; }
  166.     if ( $mes eq 'May' ) { $ind = '05'; }
  167.     if ( $mes eq 'Jun' ) { $ind = '06'; }
  168.     if ( $mes eq 'Jul' ) { $ind = '07'; }
  169.     if ( $mes eq 'Ago' ) { $ind = '08'; }
  170.     if ( $mes eq 'Sep' ) { $ind = '09'; }
  171.     if ( $mes eq 'Oct' ) { $ind = '10'; }
  172.     if ( $mes eq 'Nov' ) { $ind = '11'; }
  173.     if ( $mes eq 'Dic' ) { $ind = '12'; }
  174.  
  175.     my $elem = 'cal' . $ind;
  176.     print "<B> Ya leí GRADOSH...Elem...." . $elem . "</B><BR>";
  177.  
  178.     my $sth5
  179.         = $con->prepare(
  180.         "SELECT materia, $elem FROM calificaciones where nivel = ? and grado = ? and grupo = ? and ciclo = ? and alumno = ?  and idioma = ? and tipo != 'Unitarias' order by sort "
  181.         );
  182.     $sth5->execute( $nivel, $grado, $grupo, $ciclo, $alumno, $idioma ) or die "No puedo leer Calificaciones....!";
  183.     $stream_select
  184.         = "<table border='4' align='center'><tr class='grande'><th>Clave</th><th>Descripcion</th><th>Calif.</th></tr>";
  185.     while ( @row = $sth5->fetchrow_array ) {
  186.         $clave = $row[0];
  187.         $calif = $row[1];
  188.         my $sth4 = $con->prepare("select descripcion from  materias where clave = '$clave' ");
  189.         $sth4->execute() or die "No puedo leer de Materias...!";
  190.         my @mat = $sth4->fetchrow_array;
  191.         $desc = $mat[0];
  192.         my $desc1 = encode( "UTF-8", $desc );
  193.  
  194.         $stream_select
  195.             .= "<tr class='small1'><td>$clave</td>"
  196.             . "<td>$desc1</td>"
  197.             . "<td><input type='text' name='calif' size='5' id='calif' value='$calif' />"
  198.             . "</td></tr>";
  199.         $stream_select .= "<td><input type='hidden' name='clave' value='$clave'/></td>";
  200.         $stream_select .= "<td><input type='hidden' name='ind' value='$ind'/></td>";
  201.         $stream_select .= "<td><input type='hidden' name='numlet' value='$numlet'/></td>";
  202.         $stream_select .= "<td><input type='hidden' name='mesbim' value='$mesbim'/></td>";
  203.         $i++;
  204.     }
  205.     $stream_select .= "</table>";
  206.     return ($stream_select);
  207. }
  208.  
  209. sub Show_HTML {
  210.     my $html = <<EOHTML;
  211.      <!DOCTYPE HTML>
  212.      <HTML>
  213.      <HEAD>
  214.      <script type="text/javascript" src="capt_calif.js">
  215.      </script>
  216.      <link rel="stylesheet" href="victoria.css" TYPE="text/css" media="screen">
  217.      </HEAD>
  218.     <BODY class="body">
  219.      <FORM action="capt_califxalumno2.pl?CGISESSID=$CGISESSID" ID="form1" method="get">
  220.      <p align='center'><img src='logo1.jpeg' border='0' name='banner' ></p><BR>
  221.      <H2 align='center'><B>Módulo de Calificaciones</B></H2>
  222.      <H3 align='left'><B>Calificaciones x Alumno</B></H3>
  223.       <B>Fecha.....................:</B>
  224.         <input type="text" name="fecha" value="$dt" />
  225.       <br>
  226.       <input type="hidden" id="user" name="user" value="$user" />
  227.       <br>
  228.       <B>Código del Alumno:</B>
  229.         <input type="text" name="cod" id="cod" value=""
  230.          onchange="js_func( ['cod','user'],  ['idio'] )" />
  231.       <br>
  232.        <div id="idio"></div><br>
  233.        <div id="mate"></div><br>
  234.  
  235.      <input type="submit" name="submit" value="Continuar" />
  236.      <input type="button" name="back" value="Atras" onClick="history.go(-1)"/>
  237.      <input type="hidden" name="CGISESSID" value=$CGISESSID />
  238.      </FORM>
  239.      <p align='left'><B>Powered by </B><img src='ajax3.jpeg' width='30' height='30' ></p><BR>
  240.      </BODY>
  241.      </HTML>
  242. EOHTML
  243.     return $html;
  244. }
Coloreado en 0.013 segundos, usando GeSHi 1.0.8.4


Muchas gracias.
Última edición por explorer el 2014-10-06 16:44 @739, editado 4 veces en total
Razón: aplicacion => aplicación;caracteristica => característica; AJAX => Ajax; mas => más; practica => práctica; Codigo => Código; etc => etc.; Opcion => Opción; Bilingue => Bilingüe; Ingles => Inglés; esta => está; evaluacion =
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Publicidad

Re: Probando AJAX en Perl

Notapor explorer » 2014-10-06 17:25 @767

Según la documentación de CGI::Ajax, sección EXAMPLES, habría que cambiar

"<input type='hidden' name='alumno' value='$alumno'/>";

por

"<input type='hidden' id='alumno' value='$alumno'/>";


Otra cosa, aparte... Si usaras las funciones que trae el módulo CGI, reducirías el tamaño del programa a la mitad.
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: Probando AJAX en Perl

Notapor Negrazo » 2014-10-07 12:50 @576

Estimado explorer:

Gracias por tu ayuda, como siempre lo has hecho.

Te comento 2 cosas:
1- Ya probé con el cambio sugerido en los campos 'hidden' y todo sigue igual.
2- En referencia a tu comentario de usar las funciones de CGI, para optimizar este programa, te platico lo siguiente:

Yo aprendí Perl en forma lírica y totalmente autónoma, y me costó mucho trabajo llegar a realizar lo que he hecho hasta ahora, siempre basándome en los errores que aparecen en el archivo error.log de Apache, pero nunca he tomado un curso formal en donde me indiquen cuáles ventajas puedes obtener usando una cosa en lugar de otra o cómo estructurar mejor un programa, por lo que te agradecería me dieras un ejemplo de qué función (solo una) pudiere utilizar de CGI para hacer este programa más chico y eficiente. Ya viendo esto, seguramente me clavaré a estudiarlo a fondo y ver qué más le puedo optimizar a éste y a muchos otros programas que tengo por allí.

Nuevamente, gracias.
Negrazo.
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Re: Probando AJAX en Perl

Notapor explorer » 2014-10-07 13:07 @588

Yo no he dicho nada de 'hidden'.

Fíjate bien: es usar el 'id'.

Esta es una versión reducida (no probado, claro):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. use CGI qw(*table);
  6. use CGI::Ajax;
  7. use CGI::Session;
  8. use DBI;
  9. use Date::Simple ( 'date', 'today' );
  10. use Encode;
  11.  
  12. my $dt            = today();
  13. my $cgi           = CGI->new();
  14. my $CGISESSID     = $cgi->param('CGISESSID');
  15.  
  16.  
  17. $cgi->charset('utf-8');
  18.  
  19. my $session = CGI::Session->load("driver:File", $cgi, { 'Directory' => '/tmp/' })
  20.             or die CGI::Session->errstr;
  21.  
  22. my $user = $session->param('user') || "n/a";
  23.  
  24. my $pjx = CGI::Ajax->new(
  25.             'js_func'     => \&perl_func,
  26.             'js_func1'    => \&perl_func1,
  27.             'skip_header' => 1,
  28. );
  29.  
  30. print $pjx->build_html( $cgi, \&Show_HTML );
  31. #$pjx->JSDEBUG(2);
  32.  
  33. ### Funciones
  34. sub perl_func {
  35.     my($alumno, $usr) = @_;
  36.  
  37.     # Configurar el acceso a la DB
  38.     my $con = DBI->connect( 'DBI:mysql:database=freyre;host=localhost', 'root', 'root' )
  39.             or die '¡No puedo leer la Base de Datos!';
  40.  
  41.     # Hacer la consulta en alumnos
  42.     my $sth = $con->prepare("SELECT nivel,grado,grupo,nombre,ciclo FROM alumnos where codigo = ? ");
  43.     $sth->execute($alumno) or die '¡Error al leer Alumnos!';
  44.  
  45.     # Ajuste de los datos
  46.     my @doc = $sth->fetchrow_array();
  47.     for my $doc (@doc) { $doc ||= 'nada' }
  48.     my($nivel, $grado, $grupo, $nombre, $ciclo) = @doc;
  49.     my $nombre1 = encode_utf8($nombre);
  50.  
  51.     # Otra consulta en gradosh
  52.     my $dbh5 = $con->prepare("SELECT numlet, mesbim FROM gradosh WHERE grado = ? ");
  53.     $dbh5->execute($grado) or die "¡No puedo leer Grados!";
  54.  
  55.     my @reg5 = $dbh5->fetchrow_array();
  56.     my($numlet, $mesbim) = @reg5;
  57.  
  58.     # Otra consuta en usuario
  59.     my $dbh2 = $con->prepare("SELECT grado, grupo, nivel FROM usuario WHERE usuario = ? ");
  60.     $dbh2->execute($usr)
  61.         or die "¡No puedo leer Usuarios...!";
  62.  
  63.     chomp(my($gradoaut, $grupoaut, $nivaut) = $dbh2->fetchrow_array());
  64.  
  65.     my $p = 0;
  66.  
  67.     $p++ if $nivaut   eq $nivel  or  $nivaut   eq 'Todos';
  68.     $p++ if $gradoaut eq $grado  or  $gradoaut eq 'Todos';
  69.     $p++ if $grupoaut eq $grupo  or  $grupoaut eq 'Todos';
  70.  
  71.     my $stream_select = '';
  72.    
  73.     if ($p == 3 ) {
  74.  
  75.         $stream_select =<<EOS;
  76. <input type='hidden' name='alumno'  value='$alumno'  />
  77. <input type='hidden' name='nivel'   value='$nivel'   />
  78. <input type='hidden' name='nombre1' value='$nombre1' />
  79. <input type='hidden' name='grado'   value='$grado'   />
  80. <input type='hidden' name='grupo'   value='$grupo'   />
  81. <input type='hidden' name='ciclo'   value='$ciclo'   />
  82. <input type='hidden' name='numlet'  value='$numlet'  />
  83. <input type='hidden' name='mesbim'  value='$mesbim'  />
  84. <br><b>Seleccione el idioma: </b>
  85. EOS
  86.  
  87.         my $sth4 = $con->prepare("SELECT idioma FROM idiomas order by idioma");
  88.         $sth4->execute() or die "¡No puedo leer en Idiomas...!";
  89.  
  90.         my @idiomas;
  91.        
  92.         while ( @doc4 = $sth4->fetchrow_array()) {
  93.             push @idiomas, $doc4[0];
  94.         }
  95.  
  96.         $stream_select .= $cgi->Select(
  97.                             {
  98.                                 -name    => 'idioma',
  99.                                 -id      => 'idioma',
  100.                                 -onclick => "js_func1( ['alumno','nivel','nombre1','grado','grupo','ciclo','numlet','mesbim','idioma'],  ['mate'] ); return true;"
  101.                             },
  102.                             option([@idiomas])
  103.         );
  104.  
  105.  
  106.         $stream_select .= $cgi->br();
  107.  
  108.         $stream_select .= $cgi->table({-border => 4, -align  => 'left'},
  109.                             Tr({-class => 'grande'}, th(['Nivel','Nombre','Grado','Grupo','Ciclo']) ),
  110.                             Tr({-class => 'small1'}, td([$nivel,$nombre1,$grado,$grupo,$ciclo])     ),
  111.         );
  112.  
  113.         $stream_select .= $cgi->br();
  114.     }
  115.     else {
  116.         $stream_select .= $cgi->table({-border => 0, -align  => 'left'},
  117.                             Tr({-class => 'grande'}, th(['Permiso','Usuario']) ),
  118.                             Tr({-class => 'small2'}, td(['No puedes calificar este nivel/grado/grupo','Usuario desconocido'])),
  119.                             Tr({-class => 'small2'}, td([$permiso,$user])),
  120.         );
  121.         $stream_select .= $cgi->br();
  122.     }
  123.  
  124.     return $stream_select;
  125. }
  126.  
  127. sub perl_func1 {
  128.     my($alumno,$nivel,$nombre1,$grado,$grupo,$ciclo,$numlet,$mesbim) = @_;
  129.  
  130.     my %mes_a_ind = (
  131.         Ene => '01', Feb => '02', Mar => '03', Abr => '04', May => '05', Jun => '06',
  132.         Jul => '07', Ago => '08', Sep => '09', Oct => '10', Nov => '11', Dic => '12',
  133.     );
  134.  
  135.     # Configurar el acceso a la DB
  136.     my $con = DBI->connect( 'DBI:mysql:database=freyre;host=localhost', 'root', 'root' )
  137.         or die('No puedo leer la Base de Datos');
  138.     my $sth1 = $con->prepare("SELECT mesactivo  FROM control where nivel = ? ");
  139.     $sth1->execute($nivel) or die "¡No puedo leer Control!";
  140.  
  141.     my @doc3 = $sth1->fetchrow_array();
  142.     my $mes  = $doc3[0] || 'nada';
  143.     my $ind  = $mes_a_ind{$mes};    
  144.     my $elem = "cal$ind";
  145.  
  146.     my $sth5 = $con->prepare(
  147.         "SELECT materia, $elem FROM calificaciones where nivel = ? and grado = ? and grupo = ? and ciclo = ? and alumno = ?  and idioma = ? and tipo != 'Unitarias' order by sort "
  148.     );
  149.     $sth5->execute( $nivel, $grado, $grupo, $ciclo, $alumno, $idioma ) or die "¡No puedo leer Calificaciones!";
  150.  
  151.     $stream_select = start_table({-border => 4, -align=>'center'});
  152.  
  153.     $stream_select .= Tr({-class => 'grande'},
  154.                             th(['Clave','Descripción','Calif.']),
  155.                       );
  156.    
  157.     while (my @row = $sth5->fetchrow_array() ) {
  158.         my($clave,$calif) = @row;
  159.  
  160.         my $sth4 = $con->prepare("select descripcion from  materias where clave = '$clave' ");
  161.         $sth4->execute()
  162.             or die "No puedo leer de Materias...!";
  163.  
  164.         my @mat = $sth4->fetchrow_array();
  165.         my $desc = encode_utf8($mat[0]);
  166.  
  167.         $stream_select .= Tr({-class=>'small1'},
  168.                             td([$clave,$desc,
  169.                                 $cgi->textfield(-name => 'calif', -size => 5, -id => 'calif', -value => $calif) .
  170.                                    $cgi->hidden(-name => 'clave',  -value => $clave)  .
  171.                                    $cgi->hidden(-name => 'ind',    -value => $ind)    .
  172.                                    $cgi->hidden(-name => 'numlet', -value => $numlet) .
  173.                                    $cgi->hidden(-name => 'mesbim', -value => $mesbim) .
  174.                             ])
  175.         );
  176.     }
  177.  
  178.     $stream_select .= $cgi->end_table();
  179.  
  180.     return $stream_select;
  181. }
  182.  
  183. sub Show_HTML {
  184.     my $html = <<EOHTML;
  185. <!DOCTYPE HTML>
  186. <HTML>
  187.     <HEAD>
  188.         <script type="text/javascript" src="capt_calif.js"></script>
  189.         <link rel="stylesheet" href="victoria.css" TYPE="text/css" media="screen">
  190.     </HEAD>
  191.     <BODY class="body">
  192.         <FORM action="capt_califxalumno2.pl" ID="form1" method="get">
  193.             <p align='center'><img src='logo1.jpeg' border='0' name='banner' ></p><BR>
  194.             <H2 align='center'><B>Módulo de Calificaciones</B></H2>
  195.             <H3 align='left'><B>Calificaciones x Alumno</B></H3>
  196.             <B>Fecha.....................:</B>
  197.             <input type="text" name="fecha" value="$dt" /><br>
  198.             <input type="hidden" id="user" name="user" value="$user" /><br>
  199.  
  200.             <B>Código del Alumno:</B>
  201.             <input type="text" name="cod" id="cod" value="" onchange="js_func( ['cod','user'],  ['idio'] )" /><br>
  202.  
  203.             <div id="idio"></div><br>
  204.             <div id="mate"></div><br>
  205.  
  206.             <input type="submit" name="submit" value="Continuar" />
  207.             <input type="button" name="back" value="Atras" onClick="history.go(-1)"/>
  208.             <input type="hidden" name="CGISESSID" value=$CGISESSID />
  209.         </FORM>
  210.         <p align='left'><B>Powered by </B><img src='ajax3.jpeg' width='30' height='30' ></p><BR>
  211.     </BODY>
  212. </HTML>
  213. EOHTML
  214.  
  215.     return $html;
  216. }
Coloreado en 0.008 segundos, usando GeSHi 1.0.8.4

El caso es que se puede reducir más usando algún sistema de plantillaje, pero para ver varios métodos de generación de código HTML, vale.
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


Volver a Intermedio

¿Quién está conectado?

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