Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/06/2010, 10:33
Avatar de Lobito14
Lobito14
 
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 14 años, 1 mes
Puntos: 17
Mal funcionamiento de While's anidados

Bueno, os cuento, estoy haciendo una web en PHP + MySQL, y algun lenguaje mas, para el proyecto de final del ciclo formativo.

La pagina seria algo asi como una especie de portal donde el usuario se registra, y una vez registrado, puede introducir informacion sobre autores de discos, nombres de discos, y canciones referentes a esos discos en si... para al final crear una gran base de datos con toda la informacion posible sobre Autores (cantantes) con sus discos y canciones dentro de cada disco... espero que se entienda mas o menos de que va la web.

Bien, una vez puestos en antecedentes, tengo un problema al mostrar los registros de la base de datos, por lo siguiente: yo muestro un autor, dentro de ese autor, se muestra el disco o DISCOS que tiene, y dentro de cada disco, las canciones relacionadas con ese disco. Pongo discos en mayuscula, porque ahi esta el problema. Cuando un autor posee mas de un disco, las canciones referentes no se muestran bien.

Podeis ver lo que digo en la web, que la tengo subida, la direccion seria: [URL="http://proyectointegrad.webcindario.com"]Esta[/URL], para no registraros, podeis entrar con user: lobo y pass: lobo, y en la pestañita de "Mostrar Datos", primero muestro todos los autores de la base de datos, despues los discos y despues las canciones (esto es como prueba para ver lo que hay dentro, terminare quitandolo) y despues abajo muestro lo que seria las relaciones, y ahi podeis ver, como el autor "Prueba Prueba" tiene dos discos, "Disco de prueba" y "Disco de prueba 2", pero como podeis ver, primero le asocia a los dos discos las canciones de uno, y despues los muestra otra vez, asociandole de nuevo a los dos discos las canciones del otro...

Ya no se donde puede estar el fallo, si en las consultas, en que no utilizo bien los while's uno dentro del otro o que...

Aqui les pongo el codigo de esa parte de la web, solo desde "Relaciones" hacia abajo, que es lo que interesa:

Código PHP:
Ver original
  1. $Consulta4= conexion("SELECT DISTINCT autores.id_autor, adc.id_disco, autores.nombre_autor, autores.apellidos_autor FROM autores INNER JOIN adc ON autores.id_autor = adc.id_autor");
  2.    
  3.     print("Relaciones");
  4.     echo "<br/>";
  5.     echo "<table width='auto' cellspacing='1' cellpadding='3' border='0'> ";
  6.  
  7. while($Fila4 = mysql_fetch_array($Consulta4)) { //Ciclo Repetitivo mientras no sea fin de Archivo
  8.  
  9.     echo "<tr>";
  10.     echo "<td align='left' font-weight: bold; bgcolor='#000000' colspan='3'><font color='#FFFFFF' face='arial, verdana, helvetica'> <u>Autor</u> </font></td>";
  11.     echo "</tr>";
  12.          
  13.     echo "<tr>";
  14.     echo "<td align='left' font-weight: bold; bgcolor='#D8D8D8'><font face='arial, verdana, helvetica'>  ".$Fila4["nombre_autor"]." " .$Fila4["apellidos_autor"]. "</font></td>";
  15.     echo "</tr>";
  16.    
  17.     echo "<tr>";
  18.     echo "<td>&nbsp;</td>";
  19.     echo "<td>&nbsp;</td>";
  20.     echo "<td>&nbsp;</td>";
  21.     echo "</tr>";  
  22.    
  23.    
  24.     $idAutor = $Fila4["id_autor"];
  25.    
  26.     $Consulta6 = conexion("SELECT DISTINCT nombre_disco FROM discos INNER JOIN adc ON discos.id_disco = adc.id_disco INNER JOIN autores ON autores.id_autor = adc.id_autor WHERE autores.id_autor = '$idAutor'");
  27.    
  28.     while($Fila6 = mysql_fetch_array($Consulta6)) {
  29.        
  30.         echo "<tr>";
  31.         echo "<td>&nbsp;</td>";
  32.         echo "<td align='left' font-weight: bold; bgcolor='#000000' colspan='2'><font color='#FFFFFF' face='arial, verdana, helvetica'> <u>Disco</u> </font></td>";
  33.         echo "</tr>";
  34.    
  35.         echo "<tr>";
  36.         echo "<td>&nbsp;</td>";  
  37.         echo "<td align='left' font-weight: bold; bgcolor='#D8D8D8'>".$Fila6["nombre_disco"]."</td>";
  38.         echo "<td>&nbsp;</td>";
  39.         echo "</tr>";
  40.    
  41.         echo "<tr>";
  42.         echo "<td>&nbsp;</td>";
  43.         echo "<td>&nbsp;</td>";
  44.         echo "<td>&nbsp;</td>";
  45.         echo "</tr>";
  46.  
  47.         echo "<tr>";
  48.         echo "<td>&nbsp;</td>";
  49.         echo "<td>&nbsp;</td>";
  50.         echo "<td align='left' font-weight: bold; bgcolor='#000000'><font color='#FFFFFF' face='arial, verdana, helvetica'> <u>Canciones</u> </font></td>";
  51.         echo "</tr>";
  52.    
  53.         $idDisco = $Fila4["id_disco"];
  54.         //print("<br>" .$idDisco. "<br>");
  55.         $Consulta5 = conexion("SELECT DISTINCT titulo_cancion, duracion FROM canciones INNER JOIN adc ON canciones.id_cancion = adc.id_cancion INNER JOIN discos ON discos.id_disco = adc.id_disco WHERE discos.id_disco = '$idDisco'");
  56.  
  57.         while($Fila5 = mysql_fetch_array($Consulta5)) {
  58.    
  59.             echo "<tr>";
  60.             echo "<td>&nbsp;</td>";  
  61.             echo "<td>&nbsp;</td>";
  62.             echo "<td align='left' font-weight: bold; bgcolor='#D8D8D8'>".$Fila5["titulo_cancion"]." - " .$Fila5["duracion"]. "</td>";
  63.             echo "</tr>";
  64.            
  65.    
  66.             $Contador5++;
  67.  
  68.         }
  69.        
  70.         $Contador6++;
  71.     }      
  72.    
  73.     $Contador4++;
  74. }  
  75.     echo "</table>";

Espero haberme explicado bien, y que alguien pueda intentar ayudarme, un saludo y gracias de antemano!! ;)

Última edición por Lobito14; 04/06/2010 a las 12:12