Probando AJAX en Perl
Publicado: 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.
Muchas gracias.
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.
Using perl Syntax Highlighting
- #! /usr/bin/perl -w
- use CGI;
- use CGI::Ajax;
- use DBI;
- use CGI::Session;
- use Date::Simple ( 'date', 'today' );
- use CGI qw(param uploadInfo);
- use Encode;
- print "Content-type: text/html;charset=UTF-8\n\n";
- my $dt = today();
- my $cgi = new CGI;
- my $CGISESSID = $cgi->param('CGISESSID');
- my $gradoaut = "";
- my $grupoaut = "";
- my $nivaut = "";
- my $clave = "";
- my $calif = "";
- my $permiso = "";
- my $p1 = "";
- my $p2 = "";
- my $p3 = "";
- my @doc3 = "";
- my @doc1 = "";
- my @row = "";
- my @nuevos = "";
- my $ind = "";
- my $user = "";
- my $stream_select = "";
- my @reg5 = "";
- my $i = 0;
- my $session = CGI::Session->load( "driver:File", $CGISESSID, { 'Directory' => '/tmp/' } )
- or die CGI::Session->errstr;
- $user = $session->param('user');
- $user = "n/a" unless $user;
- my $pjx = new CGI::Ajax( 'js_func' => \&perl_func, 'js_func1' => \&perl_func1, 'skip_header' => 1, );
- print $pjx->build_html( $cgi, \&Show_HTML );
- $pjx->JSDEBUG(2);
- sub perl_func {
- print "Antes..." . "@_" . "<BR>";
- my $alumno = shift;
- my $usr = shift;
- print "Después..." . "@_" . "<BR>";
- # Configurar el acceso a la DB
- my $con = DBI->connect( 'DBI:mysql:database=freyre;host=localhost', 'root', 'root' )
- or die('No puedo leer la Base de Datos');
- my $sth = $con->prepare("SELECT nivel,grado,grupo,nombre,ciclo FROM alumnos where codigo = ? ");
- $sth->execute($alumno) or die "Error al leer Alumnos...!";
- my @doc = $sth->fetchrow_array;
- $doc[0] = "nada" unless $doc[0];
- my $nivel = $doc[0];
- $doc[1] = "nada" unless $doc[1];
- my $grado = $doc[1];
- $doc[2] = "nada" unless $doc[2];
- my $grupo = $doc[2];
- $doc[3] = "nada" unless $doc[3];
- my $nombre = $doc[3];
- $doc[4] = "nada" unless $doc[4];
- my $ciclo = $doc[4];
- my $nombre1 = encode( "UTF-8", $nombre );
- my $dbh5 = $con->prepare("SELECT numlet, mesbim FROM gradosh WHERE grado = ? ");
- $dbh5->execute($grado) or die "¡No puedo leer Grados...!";
- @reg5 = $dbh5->fetchrow_array;
- my $numlet = $reg5[0];
- my $mesbim = $reg5[1];
- my $dbh2 = $con->prepare("SELECT grado, grupo, nivel FROM usuario WHERE usuario = ? ");
- $dbh2->execute($usr) or die "¡No puedo leer Usuarios...!";
- @reg2 = $dbh2->fetchrow_array;
- chomp @reg2;
- $gradoaut = $reg2[0];
- $grupoaut = $reg2[1];
- $nivaut = $reg2[2];
- if ( $nivaut eq $nivel or $nivaut eq "Todos" ) { $p1 = "1"; }
- else { $p1 = "0"; }
- if ( $gradoaut eq $grado or $gradoaut eq "Todos" ) { $p2 = "1"; }
- else { $p2 = "0"; }
- if ( $grupoaut eq $grupo or $grupoaut eq "Todos" ) { $p3 = "1"; }
- else { $p3 = "0"; }
- $permiso = $p1 . $p2 . $p3;
- if ( $permiso eq "111" ) {
- $stream_select .= "<input type='hidden' name='alumno' value='$alumno'/>";
- $stream_select .= "<input type='hidden' name='nivel' value='$nivel'/>";
- $stream_select .= "<input type='hidden' name='nombre1' value='$nombre1'/>";
- $stream_select .= "<input type='hidden' name='grado' value='$grado'/>";
- $stream_select .= "<input type='hidden' name='grupo' value='$grupo'/>";
- $stream_select .= "<input type='hidden' name='ciclo' value='$ciclo'/>";
- $stream_select .= "<input type='hidden' name='numlet' value='$numlet'/>";
- $stream_select .= "<input type='hidden' name='mesbim' value='$mesbim'/>";
- $stream_select = "<BR><B>Seleccione el Idioma: </B>";
- my $sth4 = $con->prepare("SELECT idioma FROM idiomas order by idioma");
- $sth4->execute() or die "¡No puedo leer en Idiomas...!";
- $stream_select .= qq! <select name="idioma" id="idioma"!;
- $stream_select
- .= qq! onclick="js_func1( ['alumno','nivel','nombre1','grado','grupo','ciclo','numlet','mesbim','idioma'], ['mate'] );return true;">!;
- while ( @doc4 = $sth4->fetchrow_array ) {
- $idioma = $doc4[0];
- $stream_select .= "<option value=$idioma>$idioma</option>\n";
- }
- $stream_select .= "</select><BR>";
- $stream_select
- .= "<table border='4' align='left'><tr class='grande'><th>Nivel</th><th>Nombre</th><th>Grado</th><th>Grupo</th><th>Ciclo</th></tr>";
- $stream_select
- .= "<tr class='small1'><td>"
- . $nivel
- . "</td><td>"
- . $nombre1
- . "</td><td>"
- . $grado
- . "</td><td>"
- . $grupo
- . "</td><td>"
- . $ciclo
- . "</td></tr>";
- $stream_select .= "</table><BR>";
- return ($stream_select);
- }
- else {
- $stream_select .= "<table border='0' align='left'><tr class='grande'><th>Permiso</th><th>Usuario</th></tr>";
- $stream_select
- .= "<tr class='small2'><td>No puedes calificar este Nivel/Grado/Grupo</td><td>Usuario desconocido</td></tr>";
- $stream_select .= "<tr class='small2'><td>" . $permiso . "</td><td>" . $user . "</td></tr>";
- $stream_select .= "</table>\n";
- $stream_select .= "<br>";
- return ($stream_select);
- }
- }
- sub perl_func1 {
- print "<B> Ya estoy en func1.....</B><BR>";
- my $alumno = shift;
- my $nivel = shift;
- my $nombre1 = shift;
- my $grado = shift;
- my $grupo = shift;
- my $ciclo = shift;
- my $numlet = shift;
- my $mesbim = shift;
- # Configurar el acceso a la DB
- my $con = DBI->connect( 'DBI:mysql:database=freyre;host=localhost', 'root', 'root' )
- or die('No puedo leer la Base de Datos');
- my $sth1 = $con->prepare("SELECT mesactivo FROM control where nivel = ? ");
- $sth1->execute($nivel) or die "No puedo leer Control....!";
- @doc3 = $sth1->fetchrow_array;
- my $mes = "nada" unless $mes = $doc3[0];
- print "<B> Ya leí registro de control...Mesactivo...." . $mes . "</B><BR>";
- print "<B> Ya leí GRADOSH...Gradosh...." . $nivel . "</B><BR>";
- if ( $mes eq 'Ene' ) { $ind = '01'; }
- if ( $mes eq 'Feb' ) { $ind = '02'; }
- if ( $mes eq 'Mar' ) { $ind = '03'; }
- if ( $mes eq 'Abr' ) { $ind = '04'; }
- if ( $mes eq 'May' ) { $ind = '05'; }
- if ( $mes eq 'Jun' ) { $ind = '06'; }
- if ( $mes eq 'Jul' ) { $ind = '07'; }
- if ( $mes eq 'Ago' ) { $ind = '08'; }
- if ( $mes eq 'Sep' ) { $ind = '09'; }
- if ( $mes eq 'Oct' ) { $ind = '10'; }
- if ( $mes eq 'Nov' ) { $ind = '11'; }
- if ( $mes eq 'Dic' ) { $ind = '12'; }
- my $elem = 'cal' . $ind;
- print "<B> Ya leí GRADOSH...Elem...." . $elem . "</B><BR>";
- my $sth5
- = $con->prepare(
- "SELECT materia, $elem FROM calificaciones where nivel = ? and grado = ? and grupo = ? and ciclo = ? and alumno = ? and idioma = ? and tipo != 'Unitarias' order by sort "
- );
- $sth5->execute( $nivel, $grado, $grupo, $ciclo, $alumno, $idioma ) or die "No puedo leer Calificaciones....!";
- $stream_select
- = "<table border='4' align='center'><tr class='grande'><th>Clave</th><th>Descripcion</th><th>Calif.</th></tr>";
- while ( @row = $sth5->fetchrow_array ) {
- $clave = $row[0];
- $calif = $row[1];
- my $sth4 = $con->prepare("select descripcion from materias where clave = '$clave' ");
- $sth4->execute() or die "No puedo leer de Materias...!";
- my @mat = $sth4->fetchrow_array;
- $desc = $mat[0];
- my $desc1 = encode( "UTF-8", $desc );
- $stream_select
- .= "<tr class='small1'><td>$clave</td>"
- . "<td>$desc1</td>"
- . "<td><input type='text' name='calif' size='5' id='calif' value='$calif' />"
- . "</td></tr>";
- $stream_select .= "<td><input type='hidden' name='clave' value='$clave'/></td>";
- $stream_select .= "<td><input type='hidden' name='ind' value='$ind'/></td>";
- $stream_select .= "<td><input type='hidden' name='numlet' value='$numlet'/></td>";
- $stream_select .= "<td><input type='hidden' name='mesbim' value='$mesbim'/></td>";
- $i++;
- }
- $stream_select .= "</table>";
- return ($stream_select);
- }
- sub Show_HTML {
- my $html = <<EOHTML;
- <!DOCTYPE HTML>
- <HTML>
- <HEAD>
- <script type="text/javascript" src="capt_calif.js">
- </script>
- <link rel="stylesheet" href="victoria.css" TYPE="text/css" media="screen">
- </HEAD>
- <BODY class="body">
- <FORM action="capt_califxalumno2.pl?CGISESSID=$CGISESSID" ID="form1" method="get">
- <p align='center'><img src='logo1.jpeg' border='0' name='banner' ></p><BR>
- <H2 align='center'><B>Módulo de Calificaciones</B></H2>
- <H3 align='left'><B>Calificaciones x Alumno</B></H3>
- <B>Fecha.....................:</B>
- <input type="text" name="fecha" value="$dt" />
- <br>
- <input type="hidden" id="user" name="user" value="$user" />
- <br>
- <B>Código del Alumno:</B>
- <input type="text" name="cod" id="cod" value=""
- onchange="js_func( ['cod','user'], ['idio'] )" />
- <br>
- <div id="idio"></div><br>
- <div id="mate"></div><br>
- <input type="submit" name="submit" value="Continuar" />
- <input type="button" name="back" value="Atras" onClick="history.go(-1)"/>
- <input type="hidden" name="CGISESSID" value=$CGISESSID />
- </FORM>
- <p align='left'><B>Powered by </B><img src='ajax3.jpeg' width='30' height='30' ></p><BR>
- </BODY>
- </HTML>
- EOHTML
- return $html;
- }
Coloreado en 0.008 segundos, usando GeSHi 1.0.8.4
Muchas gracias.