Foros del Web » Programando para Internet » PHP »

Reto de ezpdf para progamadores avanzados

Estas en el tema de Reto de ezpdf para progamadores avanzados en el foro de PHP en Foros del Web. Ok, trataré de explicar lo mejor posible. ¿De que se trata? Tengo una boleta virtual donde alumnos, maestros y padres pueden ver sus calificaciones online. ...
  #1 (permalink)  
Antiguo 08/06/2011, 12:08
 
Fecha de Ingreso: junio-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Información Reto de ezpdf para progamadores avanzados

Ok, trataré de explicar lo mejor posible.

¿De que se trata?
Tengo una boleta virtual donde alumnos, maestros y padres pueden ver sus calificaciones online. Pero la prepa actual donde la voy a implementar necesita que este sistema les genere en pdf las boletas para poder imprimirlas.

Un comentario
Ya tengo casi todo listo, solo tengo una pequeña falla.

Información técnica
Estoy usando php, mysql y la clase ezpdf. Las boletas las muestro mediante dos ciclos while. Utilizao arreglos para la creación de las tablas de las boletas.

¿Cual es el problema?
Me pone en cada boleta filas de datos que no van ahí, que no están en la base de datos.

Muchas gracias por su interés y su ayuda incondicional colegas ;)

Este es el link donde estoy probando:
http://prepa4001.com/boletavirtual/grupos/boletas.php?idg=1

Este es mi código:
<?php

require_once('class.ezpdf.php');
$pdf =& new Cezpdf('a4');
$pdf->selectFont('fonts/courier.afm');
$pdf->ezSetCmMargins(1,1,1.5,1.5);

//query para traer los id de los alumnos
$query = "SELECT i.id_alumno, a.nombres, a.apellido_paterno, a.apellido_materno
FROM alumnos a, inscripciones i
WHERE i.id_grupo = ".$_GET['idg']."
AND a.id_alumno = i.id_alumno
ORDER BY a.apellido_paterno";
$query = mysql_query($query);
if(!$query) die("Error al traer los id de los alumnos... ".mysql_error());
$num_calificaciones = mysql_num_rows($query);

//query para traer el numero de clases que tiene un grupo
$query3 = "SELECT h.*
FROM horarios h, materias m
WHERE m.id_grupo = ".$_GET[idg]."
AND m.id_horario = h.id_horario";
$query3 = mysql_query($query3);
if(!$query3) die("Error al traer el numero de clases de este grupo... ".mysql_error());
$num_1 = mysql_num_rows($query3); //num_1 es el numero de clases que tiene un grupo

//query para saber cuantas materias tiene un grupo
$query4 = "SELECT id_materia
FROM materias
WHERE id_grupo = ".$_GET[idg];
$query4 = mysql_query($query4);
if(!$query4) die("Error al buscar el numero de materias de un grupo... ".mysql_error());
$data4 = mysql_num_rows($query4);

//este codigo cicla a cada alumno para imprimir su boleta
while($data = mysql_fetch_array($query))
{

//query para traer la boleta del alumno
$query2 = "SELECT m.nombre, m.id_materia, c.*, ma.nombres maestro, ma.apellido_paterno ap
FROM calificaciones c, materias m, maestros ma
WHERE c.id_alumno = ".$data['id_alumno']."
AND c.id_materia = m.id_materia
AND m.id_maestro = ma.id_maestro
ORDER BY c.id_materia";
$query2 = mysql_query($query2);
if(!$query2) die("Error al buscar la boleta... ".mysql_error());
$num_calificaciones = mysql_num_rows($query2);



while($datatmp = mysql_fetch_assoc($query2)) {
$data[] = array_merge($datatmp);
}
$titles = array(
'nombre'=>'<b>Materia</b>',
'parcial_1'=>'<b>Primer parcial</b>',
'parcial_2'=>'<b>Segundo parcial</b>',
'parcial_3'=>'<b>Tercer parcial</b>',
'examen_f'=>'<b>Examen Semestral</b>',
'promedio'=>'<b>promedio</b>'
);
$options = array(
'shadeCol'=>array(0.9,0.9,0.9),
'xOrientation'=>'center',
'width'=>500
);
$txttit = "<b>Preparatoria Maria Comaduran Chavez No. 4001</b>\n";
$txttit.= "Boleta de Calificaciones \n";

$pdf->ezText($txttit, 12);
$pdf->ezTable($data, $titles, '', $options);
$pdf->ezText("\n\n\n", 10);

}
$pdf->ezStream();
?>
  #2 (permalink)  
Antiguo 08/06/2011, 12:12
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: Reto de ezpdf para progamadores avanzados

¿Cual es el problema?
Me pone en cada boleta filas de datos que no van ahí, que no están en la base de datos.

y de donde los saca entonces ????
  #3 (permalink)  
Antiguo 08/06/2011, 12:13
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 3 meses
Puntos: 128
Respuesta: Reto de ezpdf para progamadores avanzados

joelcontreras Creo que el titulo no va de acorde con lo que solicitas, no es por desmerecer pero ..... si son PROGRAMADORES AVANZADOS por que solicitas ayudas, veo que estas mal, estas desmereciendo a otros que si te pudiesen ayudar .... en fin te ayudaria pero no se si serè avanzado para lo que requieres, que de paso es bien simple
__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #4 (permalink)  
Antiguo 08/06/2011, 12:17
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: Reto de ezpdf para progamadores avanzados

bUllan9ebrio tienes razón, pensé en ponerle algo parecido a lo tuyo, pero al final me compadecí.. al final solo tiene un post y no sabe que acá no se desprecia a nadie, cualquier ayuda, esa es la grandeza de este foro...

joelcontreras no te portes mal, que los dioses del foro no te ayudran asi
  #5 (permalink)  
Antiguo 08/06/2011, 14:22
 
Fecha de Ingreso: junio-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Reto de ezpdf para progamadores avanzados

Perdón, no quise ofender a nadie. Pues yo pensé que la cosa si era muy avanzada. En serio perdón. Mi afán no era de hacer un lado a nadie en serio.

bUllan9ebrio te agradecería si me puedes ayudar. Gracias!
  #6 (permalink)  
Antiguo 08/06/2011, 14:26
 
Fecha de Ingreso: junio-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Sonrisa Respuesta: Reto de ezpdf para progamadores avanzados

Cita:
Iniciado por iviamontes Ver Mensaje
¿Cual es el problema?
Me pone en cada boleta filas de datos que no van ahí, que no están en la base de datos.

y de donde los saca entonces ????
Creo que los arrays ponen esos datos. Los únicos datos correctos son las últimas dos filas ;)
  #7 (permalink)  
Antiguo 09/06/2011, 06:56
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 3 meses
Puntos: 128
Respuesta: Reto de ezpdf para progamadores avanzados

Primero que todo, cuánto sabes? , creo que te haría bien una lectura del manual, para aprender como funcionan ciertas "cosas" en programación, segundo si tú no entiendes el código que creo que escribistes tú estamos mal
__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #8 (permalink)  
Antiguo 09/06/2011, 07:00
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: Reto de ezpdf para progamadores avanzados

creo que es mejor separar tus gran duda en otras más pequeñas...
empecemos, cual es la primera ?
  #9 (permalink)  
Antiguo 09/06/2011, 09:17
 
Fecha de Ingreso: junio-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Reto de ezpdf para progamadores avanzados

Lo que pasa es que es la primera vez que uso ezpdf. Anoche, estuve buscando por diferentes lados el problema, y creo que el problema está al ciclar esto:

while($datatmp = mysql_fetch_assoc($query2)) {
$data[] = array_merge($datatmp);
}

Osea, al meter estas tres líneas dentro del otro while, porque cuando saco del ciclo este codigo no tengo problema pero solo podría mostrar la última boleta.

bUllan9ebrio, entiendo todo el código, excepto que en estas líneas tengo duda, lo copie de un tuto para generar pdf, yo soy autor de todo el resto del código.

Iviamontes, no se si checaste el link que puse, sino, revisalo porfa y encontrarás que en cada boleta me pone 8 filas con datos que nada que ver. Ese sería el único problema ;)

bUllan9ebrio, leí el manual antes de suscribirme a este foro, pero no logré hacer esto funcionar. Yo se que tuvimos un mal comienzo, di a entender algo que definitivamente no quería. Ya pedí disculpas y son sinceras, ahora un poco de amabilidad no estaría mal no crees?

Muchas gracias!
  #10 (permalink)  
Antiguo 09/06/2011, 09:40
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 3 meses
Puntos: 155
Respuesta: Reto de ezpdf para progamadores avanzados

pues de hecho si carnal no capeo bien tu logica aqui
Código PHP:
Ver original
  1. while($datatmp = mysql_fetch_assoc($query2)) {
  2.     $data[] = array_merge($datatmp);
  3. }
segun yo array_merge usa dos parametros y solo le pasas uno

http://mx2.php.net/manual/es/function.array-merge.php

me late que para lo que quieres hacer el ejemplo 3 del manual te puede dar una mejor idea en la parte de union de arrays
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #11 (permalink)  
Antiguo 09/06/2011, 09:58
 
Fecha de Ingreso: junio-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Reto de ezpdf para progamadores avanzados

Tienes razón, necesita dos parámetros. Lo que pasa es que antes se añadía una columna al inicio con un contador de filas.

Pero estuve probando de esta manera y pasa exactamente lo mismo:

while($data[] = mysql_fetch_assoc($query2)) {
}

En lugar de:

while($datatmp = mysql_fetch_assoc($query2)) {
$data[] = array_merge($datatmp);
}

Ahora lo tengo como el primer código, te digo pasa lo mismo. El merge en mi caso no es necesario por eso lo quité, pero sigue el mismo problema.

No entiendo que le pasa cuando este ciclo

while($data[] = mysql_fetch_assoc($query2)) {
}

esta anidado al otro while. Cuando desanido este ciclo del otro while si funciona, pero solo podría ver la última boleta.

En serio muchas gracias a todos por su ayuda
  #12 (permalink)  
Antiguo 09/06/2011, 10:06
 
Fecha de Ingreso: junio-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Reto de ezpdf para progamadores avanzados

En el siguiente link se ve como funciona cuando des anido el while, aparentemente funciona, pero solo puedo ver la última boleta:

http://prepa4001.com/boletavirtual/grupos/boletas3.php?idg=1
  #13 (permalink)  
Antiguo 09/06/2011, 10:24
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 3 meses
Puntos: 155
Respuesta: Reto de ezpdf para progamadores avanzados

Lo que se necesita es planetar bien la forma del arreglo que quieres formar en el segundo while para entonces plantear una logica de como crearlo, aqui tengo una idea pero si debes plantearnos la forma del array y escibirla aqui para poder avanzar

analiza la idea , no es que asi vaya a funcionar
Código PHP:
Ver original
  1. <?php
  2.  
  3. require_once('class.ezpdf.php');
  4. $pdf =& new Cezpdf('a4');
  5. $pdf->selectFont('fonts/courier.afm');
  6. $pdf->ezSetCmMargins(1,1,1.5,1.5);
  7.  
  8. //query para traer los id de los alumnos
  9. $query = "SELECT i.id_alumno, a.nombres, a.apellido_paterno, a.apellido_materno
  10. FROM alumnos a, inscripciones i
  11. WHERE i.id_grupo = ".$_GET['idg']."
  12. AND a.id_alumno = i.id_alumno
  13. ORDER BY a.apellido_paterno";
  14. $query = mysql_query($query);
  15. if(!$query) die("Error al traer los id de los alumnos... ".mysql_error());
  16. $num_calificaciones = mysql_num_rows($query);
  17.  
  18. //query para traer el numero de clases que tiene un grupo
  19. $query3 = "SELECT h.*
  20. FROM horarios h, materias m
  21. WHERE m.id_grupo = ".$_GET[idg]."
  22. AND m.id_horario = h.id_horario";
  23. $query3 = mysql_query($query3);
  24. if(!$query3) die("Error al traer el numero de clases de este grupo... ".mysql_error());
  25. $num_1 = mysql_num_rows($query3); //num_1 es el numero de clases que tiene un grupo
  26.  
  27. //query para saber cuantas materias tiene un grupo
  28. $query4 = "SELECT id_materia
  29. FROM materias
  30. WHERE id_grupo = ".$_GET[idg];
  31. $query4 = mysql_query($query4);
  32. if(!$query4) die("Error al buscar el numero de materias de un grupo... ".mysql_error());
  33. $data4 = mysql_num_rows($query4);
  34.  
  35. //este codigo cicla a cada alumno para imprimir su boleta
  36. while($data = mysql_fetch_array($query))
  37. {
  38.  
  39.     //query para traer la boleta del alumno
  40.     $query2 = "SELECT m.nombre, m.id_materia, c.*, ma.nombres maestro, ma.apellido_paterno ap
  41.     FROM calificaciones c, materias m, maestros ma
  42.     WHERE c.id_alumno = ".$data['id_alumno']."
  43.     AND c.id_materia = m.id_materia
  44.     AND m.id_maestro = ma.id_maestro
  45.     ORDER BY c.id_materia";
  46.     $query2 = mysql_query($query2);
  47.     if(!$query2) die("Error al buscar la boleta... ".mysql_error());
  48.     $num_calificaciones = mysql_num_rows($query2);
  49.    
  50.    
  51.     $data2 = array();#el arreglo que quieres para las calificaciones debe llamarse distinto de el cursor del primer while para que no se reescriba
  52.     while($datatmp = mysql_fetch_assoc($query2)) {
  53.         #$data[] = array_merge($datatmp); esto deplano nomas no me late
  54.         array_push($data2, $row);
  55.     }
  56.     $titles = array(
  57.     'nombre'=>'<b>Materia</b>',
  58.     'parcial_1'=>'<b>Primer parcial</b>',
  59.     'parcial_2'=>'<b>Segundo parcial</b>',
  60.     'parcial_3'=>'<b>Tercer parcial</b>',
  61.     'examen_f'=>'<b>Examen Semestral</b>',
  62.     'promedio'=>'<b>promedio</b>'
  63.     );
  64.     $options = array(
  65.     'shadeCol'=>array(0.9,0.9,0.9),
  66.     'xOrientation'=>'center',
  67.     'width'=>500
  68.     );
  69.     $txttit = "<b>Preparatoria Maria Comaduran Chavez No. 4001</b>\n";
  70.     $txttit.= "Boleta de Calificaciones \n";
  71.    
  72.     $pdf->ezText($txttit, 12);
  73.     $pdf->ezTable($data2, $titles, '', $options);
  74.     $pdf->ezText("\n\n\n", 10);
  75.     unset($data2);#deshacer el arreglo para las siguientes calificaciones del alumno
  76. }
  77. $pdf->ezStream();
  78. ?>


echale una ojeada a

http://mx2.php.net/manual/es/function.array-push.php

para ver si es lo que podria servir
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo

Última edición por mogurbon; 09/06/2011 a las 10:31 Razón: le pasaba $data en lugar de $data2 a $pdf->ezTable();
  #14 (permalink)  
Antiguo 09/06/2011, 10:56
 
Fecha de Ingreso: junio-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Reto de ezpdf para progamadores avanzados

Hey muchas gracias mogurbon. Ahorita en un ratito libre lo resolví dame unos minutos (estoy dando una clase) y les publico el error o solución.

Muchisimas gracias a todos!!!
  #15 (permalink)  
Antiguo 09/06/2011, 11:10
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 3 meses
Puntos: 155
Respuesta: Reto de ezpdf para progamadores avanzados

Cita:
Iniciado por joelcontreras Ver Mensaje
Hey muchas gracias mogurbon. Ahorita en un ratito libre lo resolví dame unos minutos (estoy dando una clase) y les publico el error o solución.

Muchisimas gracias a todos!!!

vieeentos we y si, la mejor forma de agradecer es que cuando se da con la respuesta la publiques aqui para que cuando alguien mas tenga un pdo parecido sepa por donde entrarle
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #16 (permalink)  
Antiguo 09/06/2011, 11:40
 
Fecha de Ingreso: junio-2011
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Reto de ezpdf para progamadores avanzados

Les pongo solo el trozo de texto involucrado en el error. Lo que sucedió fue que nombre dos arreglos con el mismo nombre: "$data" el primero aparece en la segunda línea de código, y el segundo en la línea 19. Entonces se combinaban los dos y me cargaban el arreglo con datos de los dos. Saludos a todos!

Código PHP:
Ver original
  1. //este codigo cicla a cada alumno para imprimir su boleta
  2. while($data = mysql_fetch_array($query))
  3. {
  4.  
  5. //query para traer la boleta del alumno
  6. $query2 = "SELECT m.nombre, m.id_materia, c.*, ma.nombres maestro, ma.apellido_paterno ap
  7. FROM calificaciones c, materias m, maestros ma
  8. WHERE c.id_alumno = ".$data['id_alumno']."
  9. AND c.id_materia = m.id_materia
  10. AND m.id_maestro = ma.id_maestro
  11. ORDER BY c.id_materia";
  12. $query2 = mysql_query($query2);
  13. if(!$query2) die("Error al buscar la boleta... ".mysql_error());
  14. $num_calificaciones = mysql_num_rows($query2);
  15.  
  16.  
  17.  
  18. while($datatmp = mysql_fetch_assoc($query2)) {
  19. $data[] = array_merge($datatmp);
  20. }
  21. $titles = array(
  22. 'nombre'=>'<b>Materia</b>',
  23. 'parcial_1'=>'<b>Primer parcial</b>',
  24. 'parcial_2'=>'<b>Segundo parcial</b>',
  25. 'parcial_3'=>'<b>Tercer parcial</b>',
  26. 'examen_f'=>'<b>Examen Semestral</b>',
  27. 'promedio'=>'<b>promedio</b>'
  28. );
  29. $options = array(
  30. 'shadeCol'=>array(0.9,0.9,0.9),
  31. 'xOrientation'=>'center',
  32. 'width'=>500
  33. );
  34. $txttit = "<b>Preparatoria Maria Comaduran Chavez No. 4001</b>\n";
  35. $txttit.= "Boleta de Calificaciones \n";
  36.  
  37. $pdf->ezText($txttit, 12);
  38. $pdf->ezTable($data, $titles, '', $options);
  39. $pdf->ezText("\n\n\n", 10);
  40.  
  41. }

Etiquetas: ezpdf, reto
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 03:09.