Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Ajustar codigo

Estas en el tema de Ajustar codigo en el foro de PHP en Foros del Web. 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 ...

  #1 (permalink)  
Antiguo 07/01/2014, 19:16
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 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();
?>
  #2 (permalink)  
Antiguo 07/01/2014, 19:30
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ajustar codigo

No sé tú, pero creo que lo lógico es aprobar el curso requisito para poder llevar el siguiente.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 07/01/2014, 19:34
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Cita:
Iniciado por Alexis88 Ver Mensaje
No sé tú, pero creo que lo lógico es aprobar el curso requisito para poder llevar el siguiente.
Si pero necesito hacerlo así.... checar si la materia y su precedente estan seleccionados se pueda inscribir.... el punto es que no sé como "saber" que las materias seleccionadas ... son la materia y su requisito...
  #4 (permalink)  
Antiguo 07/01/2014, 20:08
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ajustar codigo

Aunque es algo ineficiente, podrías armar arrays por cada curso en donde cada array contendrá los cursos requisito de cada uno de ellos, para lo cual tendrías que hacer un ciclo de búsquedas y al final, buscas en esos arrays si existe alguno de los cursos que fueron seleccionados por el usuario, si coinciden, es porque es requisito de dicho curso.

Por ejemplo:

Código PHP:
Ver original
  1. $materias_elegidas = array("0343", "9563", "0435", "0394");
  2. $requisitos = array();
  3.  
  4. foreach ($materias_elegidas as $curso) {
  5.     $consulta = mysqli_query($conexion, sprintf("SELECT requisito FROM materias WHERE requisito = '%s'", $curso));
  6.     if (mysqli_num_rows($consulta)) {
  7.         $resultado = mysqli_fetch_array($consulta);
  8.         $requisitos[] = $resultado["requisito"];
  9.         mysqli_free_result($resultado);
  10.     }        
  11. }
  12.  
  13. for ($i = 0, $limite = count($materias_elegidas); $i < $limite; $i++) {
  14.     $clave = array_search($materias_elegidas[$i], $requisitos)
  15.     if ($clave !== FALSE)
  16.         echo $requisitos[$clave] . " es un curso requisito de " . $materias_elegidas[$i];
  17. }

Repito, es un tanto ineficiente hacerlo así, pero sigo creyendo que solamente debe llevarse un curso sí y sólo sí se ha aprobado el curso requisito.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 08/01/2014, 11:48
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Cita:
Iniciado por Alexis88 Ver Mensaje
Aunque es algo ineficiente, podrías armar arrays por cada curso en donde cada array contendrá los cursos requisito de cada uno de ellos, para lo cual tendrías que hacer un ciclo de búsquedas y al final, buscas en esos arrays si existe alguno de los cursos que fueron seleccionados por el usuario, si coinciden, es porque es requisito de dicho curso.

Por ejemplo:

Código PHP:
Ver original
  1. $materias_elegidas = array("0343", "9563", "0435", "0394");
  2. $requisitos = array();
  3.  
  4. foreach ($materias_elegidas as $curso) {
  5.     $consulta = mysqli_query($conexion, sprintf("SELECT requisito FROM materias WHERE requisito = '%s'", $curso));
  6.     if (mysqli_num_rows($consulta)) {
  7.         $resultado = mysqli_fetch_array($consulta);
  8.         $requisitos[] = $resultado["requisito"];
  9.         mysqli_free_result($resultado);
  10.     }        
  11. }
  12.  
  13. for ($i = 0, $limite = count($materias_elegidas); $i < $limite; $i++) {
  14.     $clave = array_search($materias_elegidas[$i], $requisitos)
  15.     if ($clave !== FALSE)
  16.         echo $requisitos[$clave] . " es un curso requisito de " . $materias_elegidas[$i];
  17. }

Repito, es un tanto ineficiente hacerlo así, pero sigo creyendo que solamente debe llevarse un curso sí y sólo sí se ha aprobado el curso requisito.

Saludos
Gracias por lo que indicas... tengo una duda en el primer codigo marco mis checkbox
<td><input type=\"checkbox\" name=\"clases[]\" value=\"".$materia_ofertada['ID_CLASE']."\"></td>

aqui tengo una duda como obtengo los valores seleccionados en clases....

tú me pones algo asi....
$materias_elegidas = array("0343", "9563", "0435", "0394");

pero como armo mi array con los datos seleccionados....????
  #6 (permalink)  
Antiguo 08/01/2014, 12:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ajustar codigo

Bueno, ya tienes un array con los valores de los checkbox, así que solamente tendrías que recorrerlo.

Código PHP:
Ver original
  1. foreach ($_POST["clases"] as $materia) {
  2.     //Aquí evalúas a cada materia seleccionada
  3. }

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 08/01/2014, 12:44
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Okas gracias por tu tiempo voy a empezar a hacer pruebas y comento cualquier detalle
  #8 (permalink)  
Antiguo 08/01/2014, 15:55
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Ajustar codigo

Cita:
Iniciado por Alexis88 Ver Mensaje
Repito, es un tanto ineficiente hacerlo así
Las queries dentro de bucles siempre hacen daño..

Código PHP:
Ver original
  1. $materias_elegidas = array("0343", "9563", "0435", "0394");
  2. $listaMaterias="('".implode("','",$materias_elegidas)."')";
  3. $consulta = mysqli_query($conexion, "SELECT requisito FROM materias WHERE materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)");
Si esa consulta devuelve filas, es que hay un error.Modificar la query para que de los nombres de las asignaturas es sencillo, si es necesario.
  #9 (permalink)  
Antiguo 09/01/2014, 13:56
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Cita:
Iniciado por Alexis88 Ver Mensaje
Bueno, ya tienes un array con los valores de los checkbox, así que solamente tendrías que recorrerlo.

Código PHP:
Ver original
  1. foreach ($_POST["clases"] as $materia) {
  2.     //Aquí evalúas a cada materia seleccionada
  3. }

Saludos
Agregue esto...
foreach($clases as $clase){
$q_clase = quoted($clase);

{
$consulta = "SELECT requisito FROM materia WHERE requisito =$q_clase";

if (mysql_num_rows($consulta)) {
$resultado =mysql_query($consulta, $conexion) or die(mysql_error());
$requisitos[] = $resultado["requisito"];
mysql_free_result($resultado);
}
}
pero me arrojo este error Warning: mysql_num_rows(): supplied argument is not a valid MySQL
  #10 (permalink)  
Antiguo 09/01/2014, 13:57
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Cita:
Iniciado por dashtrash Ver Mensaje
Las queries dentro de bucles siempre hacen daño..

Código PHP:
Ver original
  1. $materias_elegidas = array("0343", "9563", "0435", "0394");
  2. $listaMaterias="('".implode("','",$materias_elegidas)."')";
  3. $consulta = mysqli_query($conexion, "SELECT requisito FROM materias WHERE materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)");
Si esa consulta devuelve filas, es que hay un error.Modificar la query para que de los nombres de las asignaturas es sencillo, si es necesario.
hola ....Porque dices que los bucles siempre hacen daño...?????
voy a intentar hacerlo como indicas también a ver que logro
  #11 (permalink)  
Antiguo 09/01/2014, 14:00
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Cita:
Iniciado por dashtrash Ver Mensaje
Las queries dentro de bucles siempre hacen daño..

Código PHP:
Ver original
  1. $materias_elegidas = array("0343", "9563", "0435", "0394");
  2. $listaMaterias="('".implode("','",$materias_elegidas)."')";
  3. $consulta = mysqli_query($conexion, "SELECT requisito FROM materias WHERE materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)");
Si esa consulta devuelve filas, es que hay un error.Modificar la query para que de los nombres de las asignaturas es sencillo, si es necesario.
agregue asi el codigo

foreach($clases as $clase){
$q_clase = quoted($clase);

{

$listaMaterias="('".implode("','",$q_clase)."')";
$consulta = mysql_query($conexion, "SELECT requisito FROM materias WHERE materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)");

}

y me marco esto Warning: implode() [function.implode]: Invalid arguments passed
  #12 (permalink)  
Antiguo 09/01/2014, 14:02
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

creo q me faltaba declarar el arreglo $q_clase = array ();
  #13 (permalink)  
Antiguo 09/01/2014, 14:05
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

lo tengo asi

foreach($clases as $clase){
$q_clase = quoted($clase);
$q_clase = array();

{

$listaMaterias="('".implode("','",$q_clase)."')";
$consulta = mysql_query($conexion, "SELECT requisito FROM materias WHERE materia in $q_clase and (requisito IS NOT NULL and requisito NOT IN $q_clase)");

}


pero no consigo que quede me arroja esto Warning: mysql_query(): supplied argument is not a valid MySQL
  #14 (permalink)  
Antiguo 09/01/2014, 14:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ajustar codigo

Cita:
Iniciado por Briss Ver Mensaje
Agregue esto...
foreach($clases as $clase){
$q_clase = quoted($clase);

{
$consulta = "SELECT requisito FROM materia WHERE requisito =$q_clase";

if (mysql_num_rows($consulta)) {
$resultado =mysql_query($consulta, $conexion) or die(mysql_error());
$requisitos[] = $resultado["requisito"];
mysql_free_result($resultado);
}
}
pero me arrojo este error Warning: mysql_num_rows(): supplied argument is not a valid MySQL
Eso sucede porque primero quieres averiguar cuántos registros te da la consulta y DESPUÉS la ejecutas. ¿No debería ser al revés?.

Por otro lado, esto no tiene sentido:

Código PHP:
Ver original
  1. foreach($clases as $clase){
  2. $q_clase = quoted($clase);
  3. $q_clase = array();
  4.  
  5. {
  6.  
  7. $listaMaterias="('".implode("','",$q_clase)."')";
  8. $consulta = mysql_query($conexion, "SELECT requisito FROM materias WHERE materia in $q_clase and (requisito IS NOT NULL and requisito NOT IN $q_clase)");
  9.  
  10. }

Primero, asignas un valor a $q_clase pero luego lo conviertes en array ¿?, luego, no sé de dónde vendrán esas llaves de apertura y cerrado que, al menos en lo que muestras de código, no van. Además, con quoted, colocas el dato entrecomillas, pero luego le vuelves a poner comillas en el implode.

Debería ser así:

Código PHP:
Ver original
  1. $listaMaterias="('".implode("','", $clases)."')";
  2. $consulta = mysqli_query($conexion, "SELECT requisito FROM materias WHERE materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)");

Y con eso nos olvidamos de los bucles, que pueden ser muy útiles, pero como dije, no son eficientes (utilización de recursos).

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 09/01/2014 a las 14:42
  #15 (permalink)  
Antiguo 09/01/2014, 17:20
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Cita:
Iniciado por Alexis88 Ver Mensaje
Eso sucede porque primero quieres averiguar cuántos registros te da la consulta y DESPUÉS la ejecutas. ¿No debería ser al revés?.

Por otro lado, esto no tiene sentido:

Código PHP:
Ver original
  1. foreach($clases as $clase){
  2. $q_clase = quoted($clase);
  3. $q_clase = array();
  4.  
  5. {
  6.  
  7. $listaMaterias="('".implode("','",$q_clase)."')";
  8. $consulta = mysql_query($conexion, "SELECT requisito FROM materias WHERE materia in $q_clase and (requisito IS NOT NULL and requisito NOT IN $q_clase)");
  9.  
  10. }

Primero, asignas un valor a $q_clase pero luego lo conviertes en array ¿?, luego, no sé de dónde vendrán esas llaves de apertura y cerrado que, al menos en lo que muestras de código, no van. Además, con quoted, colocas el dato entrecomillas, pero luego le vuelves a poner comillas en el implode.

Debería ser así:

Código PHP:
Ver original
  1. $listaMaterias="('".implode("','", $clases)."')";
  2. $consulta = mysqli_query($conexion, "SELECT requisito FROM materias WHERE materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)");

Y con eso nos olvidamos de los bucles, que pueden ser muy útiles, pero como dije, no son eficientes (utilización de recursos).

Saludos

Gracias por lo que indicas...
tengo mi código así
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: show_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);
        
$listaMaterias="('".implode("','"$clases)."')";
$consulta =  "SELECT requisito FROM materia WHERE id_materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)";
        
$resultado = @mysql_query($consulta$conexion) or die(mysql_error());
        
                if (
mysql_num_rows($resultado)) {
            
$resultado mysql_fetch_array($consulta);
            
$requisitos[] = $resultado["requisito"];
            
mysql_free_result($resultado);
        }        
    }
     
    
    for (
$i 0$limite count($listaMaterias); $i $limite$i++) {
    
$clave array_search($listaMaterias[$i], $requisitos)
    if (
$clave !== FALSE
        echo 
$requisitos[$clave] . " es un curso requisito de " $materias_elegidas[$i];
}
    
    
#Fin de tabla
    
echo "</table>";
    
    
piePagina();
?>


pero me arroja el siguiente error
Parse error: syntax error, unexpected T_IF

que es en este if
if ($clave !== FALSE)
echo $requisitos[$clave] . " es un curso requisito de " . $materias_elegidas[$i];
}
  #16 (permalink)  
Antiguo 09/01/2014, 17:27
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Bueno ya me enrede un poco con las variables...
  #17 (permalink)  
Antiguo 09/01/2014, 17:55
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

faltaba un ; antes del if

quedo asi...
Código PHP:
foreach($clases as $clase){
        
$q_clase quoted($clase);
        
$listaMaterias="('".implode("','"$clases)."')";
$consulta =  "SELECT requisito FROM materia WHERE id_materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)";
        
$resultado = @mysql_query($consulta$conexion) or die(mysql_error());
        
                if (
mysql_num_rows($resultado)) {
            
$resultado mysql_fetch_array($consulta);
            
$requisitos[] = $resultado["requisito"];
            
mysql_free_result($resultado);
        }        
    }
     
    
    for (
$i 0$limite count($listasMaterias); $i $limite$i++) {
    
$clave array_search($listasMaterias[$i], $requisitos);

    if (
$clave !== FALSE
     echo 
$requisitos[$clave] . " es un curso requisito de " $materias_elegidas[$i];


 
        
}
    
    
#Fin de tabla
    
echo "</table>";
    
    
piePagina();
?> 
Pero no se muestra ningún registro...

este es el codigo anterior
Código PHP:
foreach($clases as $clase){
        
$q_clase quoted($clase);
        
        
$query_precedente "SELECT M.ID_MATERIA, M.CLAVE, M.NOMBRE FROM MATERIA AS M 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)";
        
        
$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_requisito_detalles);
                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();
?> 
  #18 (permalink)  
Antiguo 09/01/2014, 18:06
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Agregue la parte del codigo original...
Código PHP:
    foreach($clases as $clase){
        
$q_clase quoted($clase);
        
$listaMaterias="('".implode("','"$clases)."')";
$consulta =  "SELECT requisito FROM materia WHERE id_materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)";
        
$resultado = @mysql_query($consulta$conexion) or die(mysql_error());
        
                if (
mysql_num_rows($resultado)) {
            
$resultado mysql_fetch_array($consulta);
            
$requisitos[] = $resultado["requisito"];
            
mysql_free_result($resultado);
        }        
    }
     
    
    for (
$i 0$limite count($listasMaterias); $i $limite$i++) {
    
$clave array_search($listasMaterias[$i], $requisitos);

    if (
$clave !== FALSE
     echo 
$requisitos[$clave] . " es un curso requisito de " $materias_elegidas[$i];
        
}

        
$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();
    
?> 
Pero solo muestra un registro osea si selecciono 2 o 3 solo muestra uno... el ultimo en seleccionarse :/
  #19 (permalink)  
Antiguo 09/01/2014, 18:42
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Cita:
Iniciado por dashtrash Ver Mensaje
Las queries dentro de bucles siempre hacen daño..

Código PHP:
Ver original
  1. $materias_elegidas = array("0343", "9563", "0435", "0394");
  2. $listaMaterias="('".implode("','",$materias_elegidas)."')";
  3. $consulta = mysqli_query($conexion, "SELECT requisito FROM materias WHERE materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)");
Si esa consulta devuelve filas, es que hay un error.Modificar la query para que de los nombres de las asignaturas es sencillo, si es necesario.
Saludos!!!! Que tengo que modificar para que visualice el nomnre de las asignaturas... mi codigo esta asi pero no arroja nada aun seleccionando antes
:) desde ya gracias

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: show_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);
        
$listaMaterias="('".implode("','"$clases)."')";
$consulta =  "SELECT requisito, NOMBRE FROM materia WHERE id_materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)";
        
$resultado = @mysql_query($consulta$conexion) or die(mysql_error());
        
                if (
mysql_num_rows($resultado)) {
            
$resultado mysql_fetch_array($consulta);
            
$requisitos[] = $resultado["requisito"];
            
mysql_free_result($resultado);
        }        
    }
     
    
    for (
$i 0$limite count($listasMaterias); $i $limite$i++) {
    
$clave array_search($listasMaterias[$i], $requisitos);

    if (
$clave !== FALSE
     echo 
$requisitos[$clave] . " es un curso requisito de " $materias_elegidas[$i];
        
}
$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($resultado);
            
            echo 
"<tr>
                    <td>"
.$clase['CLAVE']."</td>
                    <td>"
.$clase['NOMBRE']."<br>".$clase['NOMBRE']."</td>
                    
                </tr>"
;
        }else{
            echo 
"<tr><td colspan=6>No seleccionó materias</td></td></tr>";
        }

    echo 
"";
    
    
#Fin de tabla
    
echo "</table>";
    
    
piePagina();
    
?>
  #20 (permalink)  
Antiguo 09/01/2014, 19:09
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ajustar codigo

Al hacerlo así:

Código PHP:
Ver original
  1. $listaMaterias="('".implode("','", $clases)."')";
  2. $consulta = mysqli_query($conexion, "SELECT requisito FROM materias WHERE materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)");

Ya no hay necesidad de utilizar un bucle para recorrer el array $clases y verificar el tema de la existencias de cursos requisito. Eso es si quieres trabajar eficientemente, sin embargo, puedes utilizar la primera forma que te indiqué.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #21 (permalink)  
Antiguo 09/01/2014, 19:14
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Ajustar codigo

Código SQL:
Ver original
  1. SELECT r.nombre,r.id_materia,m.nombre,m.id_materia  FROM materias m LEFT JOIN materias r ON m.requisito=r.id_materia WHERE m.id_materia IN $listaMaterias AND (r.id_materia IS NOT NULL AND r.id_materia NOT IN $listaMaterias)

Qué significa que "no arroja nada aun seleccionando antes"?
  #22 (permalink)  
Antiguo 09/01/2014, 19:15
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Cita:
Iniciado por Alexis88 Ver Mensaje
Al hacerlo así:

Código PHP:
Ver original
  1. $listaMaterias="('".implode("','", $clases)."')";
  2. $consulta = mysqli_query($conexion, "SELECT requisito FROM materias WHERE materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)");

Ya no hay necesidad de utilizar un bucle para recorrer el array $clases y verificar el tema de la existencias de cursos requisito. Eso es si quieres trabajar eficientemente, sin embargo, puedes utilizar la primera forma que te indiqué.

Saludos
Gracias Alexis si quito mi bucle seria asi pero aun asi despues de seleccionar y pasar a este archivo no muestra nada ... (deberia mostrar las materias seleccionadas previamente)
Código 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);
        
$listaMaterias="('".implode("','"$clases)."')";
        
$consulta =  "SELECT requisito, NOMBRE FROM materia WHERE id_materia in $listaMaterias and (requisito IS NOT NULL and requisito NOT IN $listaMaterias)";
        
$resultado = @mysql_query($consulta$conexion) or die(mysql_error());
        
    }

$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($resultado);
            
            echo 
"<tr>
                    <td>"
.$clase['CLAVE']."</td>
                    <td>"
.$clase['NOMBRE']."<br>".$clase['NOMBRE']."</td>
                    
                </tr>"
;
        }else{
            echo 
"<tr><td colspan=6>No seleccionó materias</td></td></tr>";
        }

    echo 
"";
    
    
#Fin de tabla
    
echo "</table>";
    
    
piePagina();
    
?> 
  #23 (permalink)  
Antiguo 09/01/2014, 19:17
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Cita:
Iniciado por dashtrash Ver Mensaje
Código SQL:
Ver original
  1. SELECT r.nombre,r.id_materia,m.nombre,m.id_materia  FROM materias m LEFT JOIN materias r ON m.requisito=r.id_materia WHERE m.id_materia IN $listaMaterias AND (r.id_materia IS NOT NULL AND r.id_materia NOT IN $listaMaterias)

Qué significa que "no arroja nada aun seleccionando antes"?
amm que despues de eligir mis materias ... (archivo 1) y ejecutar este archivo.... no muestra nada de lo que seleccione
  #24 (permalink)  
Antiguo 09/01/2014, 19:29
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Ajustar codigo

Has ejecutado esa query en un cliente mysql , poniendo id's de materias con requisitos, y has visto si el resultado es el correcto?
Ejecuta esto en mysql:
Código SQL:
Ver original
  1. SELECT r.nombre,r.id_materia,m.nombre,m.id_materia  FROM materias m LEFT JOIN materias r ON m.requisito=r.id_materia WHERE m.id_materia IN ('0343', '9563', '0435', '0394') AND (r.id_materia IS NOT NULL AND r.id_materia NOT IN ('0343', '9563', '0435', '0394'))
Da un resultado correcto?
  #25 (permalink)  
Antiguo 09/01/2014, 20:02
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Cita:
Iniciado por dashtrash Ver Mensaje
Has ejecutado esa query en un cliente mysql , poniendo id's de materias con requisitos, y has visto si el resultado es el correcto?
Ejecuta esto en mysql:
Código SQL:
Ver original
  1. SELECT r.nombre,r.id_materia,m.nombre,m.id_materia  FROM materias m LEFT JOIN materias r ON m.requisito=r.id_materia WHERE m.id_materia IN ('0343', '9563', '0435', '0394') AND (r.id_materia IS NOT NULL AND r.id_materia NOT IN ('0343', '9563', '0435', '0394'))
Da un resultado correcto?
Ya hice la prueba no hay error en la consulta pero no arroja ningun resultado
  #26 (permalink)  
Antiguo 09/01/2014, 20:30
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ajustar codigo

Cita:
Iniciado por Briss Ver Mensaje
Ya hice la prueba no hay error en la consulta pero no arroja ningun resultado
Intenta hacerla con datos que tengas en la BD, porque las cifras que puso dashtrash, son las que te puse como ejemplo.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #27 (permalink)  
Antiguo 10/01/2014, 15:41
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Cita:
Iniciado por Alexis88 Ver Mensaje
Intenta hacerla con datos que tengas en la BD, porque las cifras que puso dashtrash, son las que te puse como ejemplo.

Si lo hice con datos reales de mi tabla y nada
  #28 (permalink)  
Antiguo 10/01/2014, 18:52
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ajustar codigo

Sería bueno ver la consulta que hiciste y el resultado que obtuviste en phpMyadmin y, si fuera posible, que nos muestres algunos datos reales de tu tabla.

Solo por curiosidad, ¿probaste con la forma inicial que te sugerí (la que dije que es ineficiente)?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #29 (permalink)  
Antiguo 13/01/2014, 12:55
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Ajustar codigo

Mira volvi a checar mi consulta la ejecute desde phpmyadmid

SELECT r.NOMBRE, r.ID_MATERIA, m.NOMBRE, m.ID_MATERIA
FROM materia m
LEFT JOIN materia r ON m.REQUISITO = r.ID_MATERIA
WHERE m.ID_MATERIA
IN (
'abc', 'dfe'
)
AND (
r.ID_MATERIA IS NOT NULL
AND r.ID_MATERIA NOT
IN (
'abc', 'dfe'
)
)


y ya obtengo el resultado
NOMBRE ID_MATERIA NOMBRE ID_MATERIA
Matematicas abc Cálculo Integral dfe


Osea me muestra bien los resultados... pero en mi form... muestra dos veces
Calculo integral.... osea no muestra matematicas...

dejo mi código

Código PHP:
    foreach($clases as $clase)
        
$q_clase quoted($clase);
        
$listaMaterias="('".implode("','"$clases)."')";
        echo 
$listaMaterias;{
        
$consulta =  "SELECT r.nombre,r.id_materia,m.nombre,m.id_materia  FROM materia m LEFT JOIN materia r ON m.requisito=r.id_materia WHERE m.id_materia IN $listaMaterias AND (r.id_materia IS NOT NULL AND r.id_materia NOT IN $listaMaterias)";
        
$resultado = @mysql_query($consulta$conexion) or die(mysql_error());
        
    }
/*fin foreach*/

$query_clase "SELECT r.NOMBRE,r.ID_MATERIA,m.NOMBRE,m.ID_MATERIA  FROM materia m LEFT JOIN materia r ON m.REQUISITO=r.ID_MATERIA WHERE m.ID_MATERIA IN ('abc', 'dfe') AND (r.ID_MATERIA IS NOT NULL AND r.ID_MATERIA NOT IN ('abc', 'dfe'))";

$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);
            
            echo 
"<tr>
                    <td>"
.$clase['CLAVE']."</td>
                    <td>"
.$clase['NOMBRE']."<br>".$clase['NOMBRE']."</td>
                    
                </tr>"
;
        }else{
            echo 
"<tr><td colspan=6>No seleccionó materias</td></td></tr>";
        }

    echo 
"";
    
    
#Fin de tabla
    
echo "</table>";
    
    
piePagina();
    
?> 
  #30 (permalink)  
Antiguo 13/01/2014, 13:54
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ajustar codigo

Se muestra dos veces el mismo nombre porque estás imprimiendo dos veces $clase["NOMBRE"] y al no iterar $clase (obtener sus datos con ayuda de un bucle), estás tomando al último elemento de la selección.

Deberías iterar:

Código PHP:
Ver original
  1. <?php
  2. while ($clase = mysql_fetch_array($result_clase)) {
  3. ?>
  4.     <tr>
  5.         <td><?=$clase["CLAVE"]?></td>
  6.         <td><?=$clase["NOMBRE"]?></td>
  7.     </tr>
  8. <?php
  9. }  
  10. ?>

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: formulario, mysql, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:44.