Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/01/2014, 19:16
Avatar de Briss
Briss
 
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Ajustar codigo

Hola a todos ya había planteado algo semejante para pagos... pero antes necesito aplicar un precedente a esto.... dejo mi código espero me puedan ayudar ... de verdad que no sé como podría resolver mi duda... De antemano GRACIAS

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();
?>