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.