Trabajo con dos tablas MATERIA
ID_MATERIA,CLAVE, NOMBRE, H_TEORIA, H_PRACTICA, CREDITOS, REQUISITO
(ID_MATERIA=REQUISITO)
Ejemplo
1-ALG1, ALGEBRA I,25,5,50,NINGUNO
2-ALG2, ALGEBRA II,25,5,50,ALG1
DETALLE_CARGA
ID_DETALLE, ID_CARGA, ID_CLASE, ID_MATERIA, CALIFICACION, OPORTUNIDAD, OBSERVACION
(Registra las calificaciones de las asignaturas elegidas por el alumno)
Mi primer código muestra el listado de las asignaturas ofertadas… para elegir en cuales se inscribirá el alumno….
Código PHP:
<?php
include 'globals.php';
session_start();
$id_alumno = $_SESSION['owner_session_id'];
$q_id_alumno = quoted($id_alumno);
$conexion = solicitarConexion();
$query_materias_ofertadas = "SELECT C.ID_CLASE, M.CLAVE, M.NOMBRE, M.CREDITOS, (SELECT CONCAT(IP.TITULO, ' ', IP.NOMBRE, ' ', IP.P_APELLIDO, ' ', IP.S_APELLIDO) FROM PROFESOR AS IP WHERE IP.ID_PROFESOR = C.ID_PROFESOR) AS NOMBRE_PROFESOR, (SELECT G.NOMBRE FROM GRUPO AS G WHERE G.ID_GRUPO = C.ID_GRUPO) AS NOMBRE_GRUPO FROM CLASE AS C, MATERIA AS M WHERE M.ID_MATERIA = C.ID_MATERIA AND C.ESTATUS = 'ofertada' ORDER BY M.NOMBRE";
$result_materias_ofertadas = @mysql_query($query_materias_ofertadas, $conexion) or die(mysql_error());
encabezado("Oferta academica");
navegacion();
echo "<h1>Materias ofertadas</h1>";
echo "<form method=\"post\" action=\"comprobar_carga.php\" >
<table>
<tr>
<td>Clave</td>
<td>Materia</td>
<td>Creditos</td>
<td>Profesor</td>
<td>Grupo</td>
<td></td>
</tr>";
$filas = mysql_num_rows($result_materias_ofertadas);
if($filas == 0){
echo "<tr>
<td colspan=6>No hay materias ofertadas.</td>
</tr>";
}else{
while($materia_ofertada = mysql_fetch_array($result_materias_ofertadas)){
echo "<tr>
<td>".$materia_ofertada['CLAVE']."</td>
<td>".$materia_ofertada['NOMBRE']."</td>
<td>".$materia_ofertada['CREDITOS']."</td>
<td>".$materia_ofertada['NOMBRE_PROFESOR']."</td>
<td>".$materia_ofertada['NOMBRE_GRUPO']."</td>
<td><input type=\"checkbox\" name=\"clases[]\" value=\"".$materia_ofertada['ID_CLASE']."\"></td>
</tr>";
}
echo "<tr>
<td>
<input type=\"hidden\" value=\"$id_alumno\">
<input type=\"submit\" value=\"Comprobar carga\">
</td>
</tr>";
}
echo "</table></form>";
?>
comprobar_carga.php
Muestra el listado de asignaturas seleccionadas… si se eligió una que no tiene requisito (cursar una materia previa)
Muestra un botón para Inscribirse al curso…
Si se seleccionó una materia que tenga requisito… muestra un botón para corregir (envía al formulario previo para volver elegir).
Hasta acá está bien…
Pero ahora intento hacer lo siguiente
Si selecciono más de una materia… y alguna seleccionada tiene requisito muestra --- Corregir
Esto necesito cambiarlo a lo siguiente…. si el alumno selecciono dos materias y en esa selección esta la materia y su requisito permita INSCRIBIRSE a las dos… en lugar de mostrar Corregir…
Código PHP:
<?php
include 'globals.php';
session_start();
$id_alumno = $_SESSION['owner_session_id'];
$q_id_alumno = quoted($id_alumno);
if(!isset($_POST['clases'])){
header("Location: oferta_academica.php");
}
$clases = $_POST['clases'];
encabezado("Comprobar carga");
navegacion();
$conexion = solicitarConexion();
$errores = array();
$creditos_totales = 0;
$horas_teoria_totales = 0;
$horas_practica_totales = 0;
echo "<table>
<tr>
<td>Clave</td>
<td>Profesor<br>Materia</td>
<td>Grupo</td>
<td>Horas Teoria</td>
<td>Horas Practica</td>
<td>Créditos</td>
</tr>";
foreach($clases as $clase){
$q_clase = quoted($clase);
$query_precedente="SELECT M.ID_MATERIA, M.CLAVE, M.NOMBRE, DC.CALIFICACION, DC.OPORTUNIDAD, DC.OBSERVACION FROM MATERIA AS M, DETALLE_CARGA AS DC WHERE M.ID_MATERIA = (SELECT MI.REQUISITO FROM MATERIA AS MI, CLASE AS CI WHERE MI.ID_MATERIA = CI.ID_MATERIA AND CI.ID_CLASE = $q_clase) AND M.ID_MATERIA = DC.ID_MATERIA";
$query_precedente_detalle ="SELECT M.ID_MATERIA, M.CLAVE, M.NOMBRE, DC.CALIFICACION, DC.OPORTUNIDAD, DC.OBSERVACION FROM MATERIA AS M, DETALLE_CARGA AS DC WHERE M.ID_MATERIA = (SELECT MI.REQUISITO FROM MATERIA AS MI, CLASE AS CI WHERE MI.ID_MATERIA = CI.ID_MATERIA AND CI.ID_CLASE = $q_clase) AND M.ID_MATERIA = DC.ID_MATERIA";
$result_precedente = @mysql_query($query_precedente, $conexion) or die(mysql_error());
$filas = mysql_num_rows($result_precedente);
$tiene_precedente = true;
if($filas == 0){
$tiene_precedente = false;
}else{
$precedente = mysql_fetch_array($result_precedente);
$materia = $precedente['CLAVE']." - ".$precedente['NOMBRE'];
$result_precedente_detalle = @mysql_query($query_precedente_detalle, $conexion) or die(mysql_error());
$filas = mysql_num_rows($result_precedente_detalle);
if($filas == 0){
$errores[$clase] = "Requisito no cumplido: $materia";
}else{
$clase_precedente = mysql_fetch_array($result_precedente_detalle);
if(!aprobado($clase_precedente['CALIFICACION'])){
$errores[$clase] = "Requisito no cumplido: $materia ".$clase_precedente['CALIFICACION']." no aprobada.";
}
}
}
$query_clase = "SELECT M.ID_MATERIA, M.CLAVE, M.NOMBRE, M.H_TEORIA, M.H_PRACTICA, M.CREDITOS, (SELECT G.NOMBRE FROM GRUPO AS G WHERE G.ID_GRUPO = C.ID_GRUPO) AS NOMBRE_GRUPO, (SELECT CONCAT(P.TITULO, ' ', P.NOMBRE, ' ', P.P_APELLIDO, ' ', P.S_APELLIDO) FROM PROFESOR AS P WHERE P.ID_PROFESOR = C.ID_PROFESOR) AS NOMBRE_PROFESOR FROM MATERIA M, CLASE C WHERE M.ID_MATERIA = C.ID_MATERIA AND C.ID_CLASE = $q_clase";
$result_clase = @mysql_query($query_clase, $conexion) or die(mysql_error());
$filas = mysql_num_rows($result_clase);
if($filas != 0){#Algo va realmente mal si las filas son 0
$clase = mysql_fetch_array($result_clase);
$creditos_totales = $creditos_totales + $clase['CREDITOS'];
$horas_teoria_totales = $horas_teoria_totales + $clase['H_TEORIA'];
$horas_practica_totales = $horas_practica_totales + $clase['H_PRACTICA'];
echo "<tr>
<td>".$clase['CLAVE']."</td>
<td>".$clase['NOMBRE_PROFESOR']."<br>".$clase['NOMBRE']."</td>
<td>".$clase['NOMBRE_GRUPO']."</td>
<td>".$clase['H_TEORIA']."</td>
<td>".$clase['H_PRACTICA']."</td>
<td>".$clase['CREDITOS']."</td>
</tr>";
}else{
echo "<tr><td colspan=6>No seleccionó materias</td></td></tr>";
}
}
#Totales
echo "<tr>
<td></td>
<td></td>
<td>Totales</td>
<td>".$horas_teoria_totales."</td>
<td>".$horas_practica_totales."</td>
<td>".$creditos_totales."</td>
</tr>";
#Ofrecer inscripción o corregir
foreach($errores as $clase_clave => $error){
echo "<tr>
<td>$clase_clave</td>
<td colspan=5>$error</td>
</tr>";
}
if(count($errores) == 0){ #No hay errores
$_SESSION['carga_autorizada'] = $clases; #Enviando por session
$_SESSION['carga_total_teoria'] = $horas_teoria_totales; #Enviando por session
$_SESSION['carga_total_practica'] = $horas_practica_totales; #Enviando por session
$_SESSION['carga_total_creditos'] = $creditos_totales; #Enviando por session
echo "<tr><td colspan=6><form name=\"operacion\" method=\"post\" action=\"registrar_carga.php\">";
#Si quisiese enviarlos por post, tendria que hacer este truco
foreach($clases as $clase){
echo "<input type=\"hidden\" value=\"$clase\" name=\"clases[]\">";
}
echo "<input type=\"hidden\" value=\"$horas_teoria_totales\" name=\"total_teoria\">
<input type=\"hidden\" value=\"$horas_practica_totales\" name=\"total_practica\">
<input type=\"hidden\" value=\"$creditos_totales\" name=\"total_practica\">";
echo "<input type=\"submit\" value=\"Inscribir\"></form></td></tr>";
}else{
#Deprecated No se pueden enviar un arreglo.
echo "<tr><td colspan=6><form name=\"operacion\" method=\"post\" action=\"show_oferta_academica.php\">
<input type=\"hidden\" value=\"$errores\" name=\"errores\">
<input type=\"submit\" value=\"Corregir\"></form></td></tr>";
}
echo "";
#Fin de tabla
echo "</table>";
piePagina();
?>