Cita:
<script language="JavaScript">
/************************************************** **************************/
//Objeto Estudiante
//En este objeto guardaremos las propiedades de los Estudiantes
// que traeremos en la consulta a la base
/************************************************** **************************/
function Estudiante(grado, codigo, nombre)
{
this.idGrado = grado;
this.idGrupo = codigo;
this.nombre = nombre;
}
/************************************************** **************************/
//Generacion del vector
//Esto es la clave de todo!
//Lo que hacemos es traer un query con los Estudiantes.
//Loopeamos ese query y por cada registro generamos un objeto del tipo Estudiante.
//Notese que este procesamiento se esta haciendo con php, por lo tanto
//se está ejecutando en el servidor. Notesé ademas que estamos trabajando
//dentro de los tags <script><//script>, por lo que TODO lo que escribamos
//aqui será interpretado por el parser de JavaScript al momento que
//se sirva la pagina en el browser del cliente .
/************************************************** *************************/
var vectorEstudiantes = new Array();
<?php
//Consultamos la base para traer los Estudiantes
$query = "select G.codigo, G.grado, G.nombre as nombre from grupo G, grado Gr where G.grado = Gr.codigo";
$rs->Open($query, $oConn);
//Recorremos la colección de Grupos
$indice = 0;
while(!$rs->EOF())
{
//Aca es donde escribimos en el document una nueva entrada al vectorEstudiantes
//Sería algo asi:
//vectorEstudiantes[1] = new Provincia(11,01,'On11');
//donde 11 es el grado, 01 es el codigo y 'On11' es el nombre.
echo "vectorEstudiantes[".$indice."] = new Estudiante(".$rs->Fields("grado").",".$rs->Fields("codigo").",'".$rs->Fields("nombre")."'); \n";
$rs->movenext();
$indice++;
}
?>
/************************************************** **************************/
//Llenar combo de Grupos
//El propósito de este método es recibir un Grado y cargar en el combo
//Grupos todas aquella cuyo Grado concuerde con el parámetro de entrada
/************************************************** **************************/
function LlenarGrupos(grado)
{
//Limpiamos el contenido del combo antes de cargarle nuevos datos
vaciarCombo('grupo');
//Recorremos el vectorEstudiantes
var posicion=0;
for(var i=0; i < vectorEstudiantes.length; i++)
{
if (vectorEstudiantes[i].idGrado == grado)
{
agregarDatoCombo('grupo',posicion,vectorEstudiante s[i].nombre,vectorEstudiantes[i].idGrupo,false);
posicion++;
}
}
}
/************************************************** ************/
//Manejo del combo
/************************************************** ************/
function vaciarCombo(comboDestino)
{
document.getElementById(comboDestino).length = null;
}
function agregarDatoCombo(comboDestino,orden,descripcion,va lor,estado)
{
document.getElementById(comboDestino).options[orden] = new Option(descripcion,valor,"",estado);
}
</script>
<form name=123 method=post action=grados.php>
<table border="0" width="100%" id="table1" cellspacing="0" cellpadding="0">
<tr>
<td width="349">
<p class="Etiqueta"> Grado:</td>
<td>
<? echo"<select name='grado' id='grado' class = 'Texto' $y onChange='LlenarGrupos(this.value)'>";
$sql="SELECT * FROM $tabla2 ORDER BY $llave";
$rs->Open($sql, $oConn);
armarCombo("- Grados -",0,1);
while(!$rs->EOF())
{
$grad1=$rs->Fields("codigo");
$gradn=$rs->Fields("nombre");
if ($grad1 == $gra3){
echo " <option value=$grad1 selected > $gradn ";
echo"<script language='JavaScript'> vaciarCombo('grado'); $rs->First(); LlenarGrupos($grad1); </script>";
}
armarCombo($rs->Fields("nombre"),0,$rs->Fields("codigo"));
$rs->movenext();
}
?>
</select>
</td>
</tr>
<tr>
<td width="349"><p class="Etiqueta"> Grupo:</p></td>
<td>
<? echo"<select name='grupo' id='grupo' class= 'Texto' $y value = '$gru3'>";
?>
</select>
</td>
</tr>
<table>
<input type=submit value='Consultar' name=Listar >
</form>
/************************************************** **************************/
//Objeto Estudiante
//En este objeto guardaremos las propiedades de los Estudiantes
// que traeremos en la consulta a la base
/************************************************** **************************/
function Estudiante(grado, codigo, nombre)
{
this.idGrado = grado;
this.idGrupo = codigo;
this.nombre = nombre;
}
/************************************************** **************************/
//Generacion del vector
//Esto es la clave de todo!
//Lo que hacemos es traer un query con los Estudiantes.
//Loopeamos ese query y por cada registro generamos un objeto del tipo Estudiante.
//Notese que este procesamiento se esta haciendo con php, por lo tanto
//se está ejecutando en el servidor. Notesé ademas que estamos trabajando
//dentro de los tags <script><//script>, por lo que TODO lo que escribamos
//aqui será interpretado por el parser de JavaScript al momento que
//se sirva la pagina en el browser del cliente .
/************************************************** *************************/
var vectorEstudiantes = new Array();
<?php
//Consultamos la base para traer los Estudiantes
$query = "select G.codigo, G.grado, G.nombre as nombre from grupo G, grado Gr where G.grado = Gr.codigo";
$rs->Open($query, $oConn);
//Recorremos la colección de Grupos
$indice = 0;
while(!$rs->EOF())
{
//Aca es donde escribimos en el document una nueva entrada al vectorEstudiantes
//Sería algo asi:
//vectorEstudiantes[1] = new Provincia(11,01,'On11');
//donde 11 es el grado, 01 es el codigo y 'On11' es el nombre.
echo "vectorEstudiantes[".$indice."] = new Estudiante(".$rs->Fields("grado").",".$rs->Fields("codigo").",'".$rs->Fields("nombre")."'); \n";
$rs->movenext();
$indice++;
}
?>
/************************************************** **************************/
//Llenar combo de Grupos
//El propósito de este método es recibir un Grado y cargar en el combo
//Grupos todas aquella cuyo Grado concuerde con el parámetro de entrada
/************************************************** **************************/
function LlenarGrupos(grado)
{
//Limpiamos el contenido del combo antes de cargarle nuevos datos
vaciarCombo('grupo');
//Recorremos el vectorEstudiantes
var posicion=0;
for(var i=0; i < vectorEstudiantes.length; i++)
{
if (vectorEstudiantes[i].idGrado == grado)
{
agregarDatoCombo('grupo',posicion,vectorEstudiante s[i].nombre,vectorEstudiantes[i].idGrupo,false);
posicion++;
}
}
}
/************************************************** ************/
//Manejo del combo
/************************************************** ************/
function vaciarCombo(comboDestino)
{
document.getElementById(comboDestino).length = null;
}
function agregarDatoCombo(comboDestino,orden,descripcion,va lor,estado)
{
document.getElementById(comboDestino).options[orden] = new Option(descripcion,valor,"",estado);
}
</script>
<form name=123 method=post action=grados.php>
<table border="0" width="100%" id="table1" cellspacing="0" cellpadding="0">
<tr>
<td width="349">
<p class="Etiqueta"> Grado:</td>
<td>
<? echo"<select name='grado' id='grado' class = 'Texto' $y onChange='LlenarGrupos(this.value)'>";
$sql="SELECT * FROM $tabla2 ORDER BY $llave";
$rs->Open($sql, $oConn);
armarCombo("- Grados -",0,1);
while(!$rs->EOF())
{
$grad1=$rs->Fields("codigo");
$gradn=$rs->Fields("nombre");
if ($grad1 == $gra3){
echo " <option value=$grad1 selected > $gradn ";
echo"<script language='JavaScript'> vaciarCombo('grado'); $rs->First(); LlenarGrupos($grad1); </script>";
}
armarCombo($rs->Fields("nombre"),0,$rs->Fields("codigo"));
$rs->movenext();
}
?>
</select>
</td>
</tr>
<tr>
<td width="349"><p class="Etiqueta"> Grupo:</p></td>
<td>
<? echo"<select name='grupo' id='grupo' class= 'Texto' $y value = '$gru3'>";
?>
</select>
</td>
</tr>
<table>
<input type=submit value='Consultar' name=Listar >
</form>
bueno , este codigo lo he modificado y adaptado lo mejor posible a mi proyecto... (aun sin manejar mucho el javascript, problema,.. que me complica),... este script me funciona perfecto para ingresar datos.... , no presenta ningun fallo,... lo malo es cuando llamo un registro con una consulta hecha con php y mysql... pues el segundo combo (grupo) aparece vacio,.. el combo grado aparece con el grado de la consulta repitiendose...en el combo....
la verdad ya he revisado el codigo bastante, y no encuentro el fallo,.. ojala alguien que maneje el javascript me pueda ayudar....
gracias... de antemano..
codigo con el que hago el llamado a los registros
Cita:
<?php
if( $consultar == "Listar" ){
$sql = "SELECT * FROM $tabla"
$cursor = mysql_query( $sql, $con );
?>
</p>
<table border=1 aling align=center width="614" height="0" >
<tr> <th bgcolor=#336699 width="393" >
<p class="TextB">Estudiante</p>
<th bgcolor=#336699 width="205">
<p class="TextB">Grupo</p>
<?
while( $fila = mysql_fetch_array( $cursor ) ) {
$cod2 = $fila[0];
$gru2 = $fila[8];
echo "<tr><td bgcolor='#ffffff'><a class='Texto' href=index.php?page=estudiante&consultar=EJ&vestd= $cod2></a></td><td bgcolor='#ffffff' class='Texto'>$gru2</td></tr>";
}
}
?>
if( $consultar == "Listar" ){
$sql = "SELECT * FROM $tabla"
$cursor = mysql_query( $sql, $con );
?>
</p>
<table border=1 aling align=center width="614" height="0" >
<tr> <th bgcolor=#336699 width="393" >
<p class="TextB">Estudiante</p>
<th bgcolor=#336699 width="205">
<p class="TextB">Grupo</p>
<?
while( $fila = mysql_fetch_array( $cursor ) ) {
$cod2 = $fila[0];
$gru2 = $fila[8];
echo "<tr><td bgcolor='#ffffff'><a class='Texto' href=index.php?page=estudiante&consultar=EJ&vestd= $cod2></a></td><td bgcolor='#ffffff' class='Texto'>$gru2</td></tr>";
}
}
?>
Cita:
<?
//este fragmento de codigo va antes del formulario
if( $consultar=="EJ"){
$sql = "SELECT * FROM $tabla WHERE $llave = '$vestd'"
. " ORDER BY $orden ASC LIMIT 0, 30";
$cursor = mysql_query( $sql, $con );
while( $fila = mysql_fetch_array( $cursor ) ) {
$cod3 = $fila['codigo'];
$gra3 = $fila['grado'];
$gru3 = $fila['grupo'];
}
}
>?
//este fragmento de codigo va antes del formulario
if( $consultar=="EJ"){
$sql = "SELECT * FROM $tabla WHERE $llave = '$vestd'"
. " ORDER BY $orden ASC LIMIT 0, 30";
$cursor = mysql_query( $sql, $con );
while( $fila = mysql_fetch_array( $cursor ) ) {
$cod3 = $fila['codigo'];
$gra3 = $fila['grado'];
$gru3 = $fila['grupo'];
}
}
>?