Foros del Web » Programando para Internet » PHP »

Reportes Graficos con PHP

Estas en el tema de Reportes Graficos con PHP en el foro de PHP en Foros del Web. Bueno en una empresa me pidieron un pequeño sistema en php donde pueda conectarme a la base que esta en sql server 2012, y generar ...
  #1 (permalink)  
Antiguo 26/03/2014, 15:15
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Reportes Graficos con PHP

Bueno en una empresa me pidieron un pequeño sistema en php donde pueda conectarme a la base que esta en sql server 2012, y generar reportes. Despues de buscar y leer hice lo necesario para poder hacer los reportes.
Lo logre usando php 5.3 y las librerias php_mssql.dll y ntwlib.dll

La cuestion es que hoy quieren que el sistema tenga antes que nada reportes gráficos, que en el index del sitio aparezca algo como los reportes de scriptcase

Entonces baje Highcharts y procedi a crear primero en MySQL una prueba, la cuestion es que a la hora de hacer que aparescan mis datos solo me aparece el ultimo dato de mi consulta.

Pondria codigo pero cada vez que quiero poner codigo php o html (aunq sea un poco) me pasa a un captcha y de ahi no pasa.

Ya intente meter los datos por medio de un for, de un while y con asignacion de variables y nada

En el archivo adjunto presento todas las formas en las que he intentado, por favor ayudenme, ya logro sacar un dato (el ultimo solo me hacen falta los otros)

Archivo php con las formas de querer presentar los datos

PD: que hago con eso que no me permite escribir codigo ???

PD2: Saben de alguna herramienta mas facil para crear dichos graficos ???
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #2 (permalink)  
Antiguo 26/03/2014, 15:38
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 11 años, 3 meses
Puntos: 55
Respuesta: Reportes Graficos con PHP

Hola, yo he usado jpgraph del lado del servidor. Saludos.
  #3 (permalink)  
Antiguo 26/03/2014, 16:13
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Reportes Graficos con PHP

Pero que tan dificil podria ser en comparacion con highchart ???
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #4 (permalink)  
Antiguo 27/03/2014, 05:47
Avatar de evolutionrgm  
Fecha de Ingreso: mayo-2011
Mensajes: 108
Antigüedad: 13 años, 6 meses
Puntos: 5
Respuesta: Reportes Graficos con PHP

Yo utilice unos graficos de google API
te dejare un ejemplo

Código PHP:
Ver original
  1. <?php
  2. $con=mysql_connect("localhost","root","pass") or die("Failed to connect with database!!!!");
  3. mysql_select_db("BD", $con);
  4. mysql_query("SET NAMES 'utf8'");
  5. // The Chart table contains two fields: weekly_task and percentage
  6. // This example will display a pie chart. If you need other charts such as a Bar chart, you will need to modify the code a little to make it work with bar chart and other charts
  7. $sth = mysql_query("SELECT  alta.ccosto,producto.nombre,COUNT(alta.producto)as cantidad
  8.     from alta
  9. INNER JOIN producto
  10. ON alta.producto=producto.cod_producto
  11. INNER JOIN
  12. centro_costo
  13. on
  14. alta.ccosto=centro_costo.idccosto GROUP BY alta.producto;");
  15.  
  16.  
  17.  
  18. $rows = array();
  19. //flag is not needed
  20. $flag = true;
  21. $table = array();
  22. $table['cols'] = array(
  23.  
  24.     // Labels for your chart, these represent the column titles
  25.     // Note that one column is in "string" format and another one is in "number" format as pie chart only required "numbers" for calculating percentage and string will be used for column title
  26.     array('label' => 'nombre', 'type' => 'string'),
  27.     array('label' => 'cantidad', 'type' => 'number')
  28.  
  29. );
  30.  
  31. $rows = array();
  32. while($r = mysql_fetch_assoc($sth)) {
  33.     $temp = array();
  34.     // the following line will be used to slice the Pie chart
  35.     $temp[] = array('v' => (string) $r['nombre']);
  36.  
  37.     // Values of each slice
  38.     $temp[] = array('v' => (int) $r['cantidad']);
  39.     $rows[] = array('c' => $temp);
  40. }
  41.  
  42. $table['rows'] = $rows;
  43. $jsonTable = json_encode($table);
  44. //echo $jsonTable;
  45. ?>
  46.  
  47. <html>
  48.   <head>
  49.     <!--Load the Ajax API-->
  50.     <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  51.     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
  52.     <script type="text/javascript">
  53.  
  54.     // Load the Visualization API and the piechart package.
  55.     google.load('visualization', '1', {'packages':['corechart']});
  56.  
  57.     // Set a callback to run when the Google Visualization API is loaded.
  58.     google.setOnLoadCallback(drawChart);
  59.  
  60.     function drawChart() {
  61.  
  62.       // Create our data table out of JSON data loaded from server.
  63.       var data = new google.visualization.DataTable(<?=$jsonTable?>);
  64.       var options = {
  65.            title: 'Cantidad x Productos',
  66.           is3D: 'true',
  67.           width: 800,
  68.           height: 600
  69.         };
  70.       // Instantiate and draw our chart, passing in some options.
  71.       // Do not forget to check your div ID
  72.       var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
  73.       chart.draw(data, options);
  74.     }
  75.     </script>
  76.   </head>
  77.  
  78.   <body>
  79.     <!--this is the div that will hold the pie chart-->
  80.     <div id="chart_div"></div>
  81.   </body>
  82. </html>
  #5 (permalink)  
Antiguo 27/03/2014, 10:34
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Reportes Graficos con PHP

Pero si no hay internet no funcionan jejej
En mi caso con highcharts lo estoy haciendo offline

Yo logro hacer que me muestre el ultimo dato, creo una query, hago un while, e imprimo esos datos en la grafica, lo malo es que solo me muestra el ultimo dato, asi puedo imprimir mis datos de consulta:

Código PHP:
Ver original
  1. while($row = $sql->fetch_array(MYSQLI_NUM))
  2.  {
  3.    $nombre = $row[0];
  4.    $venta = $row[1];
  5.    echo $nombre, $venta.'<br>';
  6.  }

Asi aparece en navegador
Código:
Telefonia18
Computadoras25
Accesorios56
En la grafica lo que hago es imprimir $nombre y $venta en su respectivo lugar y me toma accesorios nada mas con el 100%
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #6 (permalink)  
Antiguo 27/03/2014, 11:16
 
Fecha de Ingreso: noviembre-2012
Mensajes: 74
Antigüedad: 12 años
Puntos: 3
Respuesta: Reportes Graficos con PHP

¿Como le pasas los datos a Highcharts?
Segun entiendo le debes pasar un array que por lo general es por medio de JSON (Ajax).
No entiendo cuando dices que imprimes las variables en la grafica (uno por uno), porque como dije lo que se le pasa es un array no variables por variable.
  #7 (permalink)  
Antiguo 27/03/2014, 11:52
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Reportes Graficos con PHP

Que no se supone que
Código PHP:
Ver original
  1. while($row = $sql->fetch_array(MYSQLI_NUM))
Crea un array asociativo o numerico como lo tengo yo ahorita ???

Pues en le mostrare como lo tengo ahorita:

Aca esta sorry no me dejo poner todo el codigo PHP en las Hihglight

Necesito mucha ayuda creo
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #8 (permalink)  
Antiguo 27/03/2014, 12:13
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Reportes Graficos con PHP

Realiza la consulta e imprime en pantalla los datos uno por uno para verificar que tu consulta te devuelve todo, y descartar que el problema esté en la consulta
  #9 (permalink)  
Antiguo 27/03/2014, 12:18
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Reportes Graficos con PHP

Ya lo hace, lastima que no les pueda poner el codigo, pero hago la consulta, luego un
Código PHP:
Ver original
  1. while($row = $sql->fetch_array(MYSQLI_NUM))
  2. {
  3.   $nombre = $row[0];
  4.   $venta = $row[1];
  5.  echo $nombre, $venta.'<br>';
  6. }
Donde $sql es la variable de mi query; Y eso imprime asi:

Código:
Telefonia18
Computadoras25
Accesorios56
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #10 (permalink)  
Antiguo 27/03/2014, 12:32
 
Fecha de Ingreso: noviembre-2012
Mensajes: 74
Antigüedad: 12 años
Puntos: 3
Respuesta: Reportes Graficos con PHP

En el codigo veo que recorres un ciclo while y dentro hay un codigo javscript que crea la grafica por eso solamente se mostraba el ultimo dato ya que no estabas agregando datos a la grafica si no que creabas varias graficas con un solo dato y cada nueva grafica reemplazaba a la anterior.

Al javascript debes pasarle un array como ya te habia dicho antes, te pongo el codigo
Código PHP:
<?php
    $mysqli 
= new mysqli("localhost","root","","kosys");

    
//Esta es la query
    
$sql $mysqli->query("SELECT rubros.nombre as nombre, sum(productos.ventas) AS venta_rubro FROM productos INNER JOIN rubros ON productos.rubro = rubros.id GROUP BY productos.rubro");
    
$datos=array();//Nueva Linea
    
while($row $sql->fetch_array(MYSQLI_NUM))
    {                    
        
$nombre $row[0];
        
$venta $row[1];
        
$datos[]=array($nombre,$venta);//Nueva Linea
    
}
?>
<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <script type="text/javascript" src="jquery-ui-1.8.20\jquery-1.7.2.js"></script>
        <script type="text/javascript">
            $(function () {
                $('#container').highcharts({
                    chart: {
                        plotBackgroundColor: null,
                        plotBorderWidth: null,
                        plotShadow: false
                    },
                    title: {
                        text: 'Venta por Rubros'
                    },
                    tooltip: {
                        pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
                    },
                    plotOptions: {
                        pie: {
                            allowPointSelect: true,
                            cursor: 'pointer',
                            dataLabels: {
                                enabled: true,
                                color: '#000000',
                                connectorColor: '#000000',
                                format: '<b>{point.name}</b>: {point.percentage:.1f} %'
                            }
                        }
                    },
                    series: [{
                        type: 'pie',
                        name: 'Venta por Rubros',
                        data: <?php json_encode($datos?>//Genera algo como [["Telefonia",18]["Computadoras",25]["Accesorios",56]]
                    }]
                });
            });
        </script>
    </head>
    <body>
        <script src="Highcharts\Highcharts-3.0.10\js\highcharts.js"></script>
        <script src="Highcharts\Highcharts-3.0.10\js\modules\exporting.js"></script>
        <div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
    </body>
</html>
  #11 (permalink)  
Antiguo 27/03/2014, 12:49
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Reportes Graficos con PHP

Muchas gracias, segui al pie de la letra sus instrucciones y no imprime la grafica, no hace nada, y si en el codigo que usted me arreglo dentro del while pongo
Código PHP:
Ver original
  1. printf ("%s (%s)\n", $row[0], $row[1]); //o si pongo
  2. printf ("%s (%s)\n", $nombre, $venta);

Entonces imprime esto:
Código:
Telefonia (39) Computadoras (18) Accesorios (56)
Ojo y para json_encode($datos) no necesito alguna libreria de json ??? como puedo ver la forma en la que json_encode termina organizando los datos ??
porq creo que los organiza asi
Código:
[["Telefonia",18]["Computadoras",25]["Accesorios",56]]
y highcharts los necesitaria separados, cada rubro con su venta y separados por comas...
Código:
[["Telefonia",18],
["Computadoras",25],
["Accesorios",56]]
Sorry es que no comprendo, en serio

PD: una duda, realmente estoy bien lejos de lo que deseo hacer o ando algo cerca
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #12 (permalink)  
Antiguo 27/03/2014, 13:03
 
Fecha de Ingreso: noviembre-2012
Mensajes: 74
Antigüedad: 12 años
Puntos: 3
Respuesta: Reportes Graficos con PHP

Se puede pasar el array de php a un array de javascript y pasar el array de javascript a la grafica
Código PHP:
Ver original
  1. <?php
  2.     $mysqli = new mysqli("localhost","root","","kosys");
  3.  
  4.     //Esta es la query
  5.     $sql = $mysqli->query("SELECT rubros.nombre as nombre, sum(productos.ventas) AS venta_rubro FROM productos INNER JOIN rubros ON productos.rubro = rubros.id GROUP BY productos.rubro");
  6.     $datos=array();//Nueva Linea
  7.     while($row = $sql->fetch_array(MYSQLI_NUM))
  8.     {                  
  9.         $nombre = $row[0];
  10.         $venta = $row[1];
  11.         $datos[]=array($nombre,$venta);//Nueva Linea
  12.     }
  13. ?>
  14. <!DOCTYPE HTML>
  15. <html>
  16.     <head>
  17.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  18.         <script type="text/javascript" src="jquery-ui-1.8.20\jquery-1.7.2.js"></script>
  19.         <script type="text/javascript">
  20.             $(function () {
  21.                 var datos=$.parseJSON(<?php echo json_encode($datos); ?>);
  22.                 $('#container').highcharts({
  23.                     chart: {
  24.                         plotBackgroundColor: null,
  25.                         plotBorderWidth: null,
  26.                         plotShadow: false
  27.                     },
  28.                     title: {
  29.                         text: 'Venta por Rubros'
  30.                     },
  31.                     tooltip: {
  32.                         pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
  33.                     },
  34.                     plotOptions: {
  35.                         pie: {
  36.                             allowPointSelect: true,
  37.                             cursor: 'pointer',
  38.                             dataLabels: {
  39.                                 enabled: true,
  40.                                 color: '#000000',
  41.                                 connectorColor: '#000000',
  42.                                 format: '<b>{point.name}</b>: {point.percentage:.1f} %'
  43.                             }
  44.                         }
  45.                     },
  46.                     series: [{
  47.                         type: 'pie',
  48.                         name: 'Venta por Rubros',
  49.                         data: datos,
  50.                     }]
  51.                 });
  52.             });
  53.         </script>
  54.     </head>
  55.     <body>
  56.         <script src="Highcharts\Highcharts-3.0.10\js\highcharts.js"></script>
  57.         <script src="Highcharts\Highcharts-3.0.10\js\modules\exporting.js"></script>
  58.         <div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
  59.     </body>
  60. </html>

json_encode no necesita de librerias, ya viene con php.
Lo que genera json_encode es un string que representa un array de php, en javascript se toma ese string y se convierte de nuevo a un array con la funcion parseJSON(que es una función de jquery) y ese array se le pasa a la grafica.

Última edición por a18327; 27/03/2014 a las 13:19
  #13 (permalink)  
Antiguo 27/03/2014, 14:09
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Reportes Graficos con PHP

Según veo no andaba tan mal, lo malo es que la grafica aun no sale

La cosa es que ni error muestra que sera ?? la query esta bien, las librerias igual, cabe mencionar que baje jquery 1.8.2 para hacer todo offline
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #14 (permalink)  
Antiguo 27/03/2014, 14:23
 
Fecha de Ingreso: noviembre-2012
Mensajes: 74
Antigüedad: 12 años
Puntos: 3
Respuesta: Reportes Graficos con PHP

Si no te muestra error es porque no hay error al menos en php, entonces el error debe estar en el javascript, revisa si te marca error en el navegador con clic derecho y opcion Inspeccionar elemento.

Otra cosa veo que la libreria e highcharts la tienes en el body, pero deberia ir antes del script de la grafica y despues de la libreria jquery, el script de la grafica debe ejecutarse despues de que la pagina este cargada, con esos cambios quedaria asi
Código PHP:
Ver original
  1. <?php
  2.     $mysqli = new mysqli("localhost","root","","kosys");
  3.  
  4.     //Esta es la query
  5.     $sql = $mysqli->query("SELECT rubros.nombre as nombre, sum(productos.ventas) AS venta_rubro FROM productos INNER JOIN rubros ON productos.rubro = rubros.id GROUP BY productos.rubro");
  6.     $datos=array();//Nueva Linea
  7.     while($row = $sql->fetch_array(MYSQLI_NUM))
  8.     {                  
  9.         $nombre = $row[0];
  10.         $venta = $row[1];
  11.         $datos[]=array($nombre,$venta);//Nueva Linea
  12.     }
  13. ?>
  14. <!DOCTYPE HTML>
  15. <html>
  16.     <head>
  17.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  18.         <script type="text/javascript" src="jquery-ui-1.8.20\jquery-1.7.2.js"></script>
  19.         <script src="Highcharts\Highcharts-3.0.10\js\highcharts.js"></script>
  20.         <script src="Highcharts\Highcharts-3.0.10\js\modules\exporting.js"></script>
  21.         <script type="text/javascript">
  22.             $(document).ready(function() {
  23.                 var datos=$.parseJSON(<?php echo json_encode($datos); ?>);//Nueva linea
  24.                 $('#container').highcharts({
  25.                     chart: {
  26.                         plotBackgroundColor: null,
  27.                         plotBorderWidth: null,
  28.                         plotShadow: false
  29.                     },
  30.                     title: {
  31.                         text: 'Venta por Rubros'
  32.                     },
  33.                     tooltip: {
  34.                         pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
  35.                     },
  36.                     plotOptions: {
  37.                         pie: {
  38.                             allowPointSelect: true,
  39.                             cursor: 'pointer',
  40.                             dataLabels: {
  41.                                 enabled: true,
  42.                                 color: '#000000',
  43.                                 connectorColor: '#000000',
  44.                                 format: '<b>{point.name}</b>: {point.percentage:.1f} %'
  45.                             }
  46.                         }
  47.                     },
  48.                     series: [{
  49.                         type: 'pie',
  50.                         name: 'Venta por Rubros',
  51.                         data: datos,
  52.                     }]
  53.                 });
  54.             });        
  55.         </script>
  56.     </head>
  57.     <body>     
  58.         <div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
  59.     </body>
  60. </html>
  #15 (permalink)  
Antiguo 27/03/2014, 14:53
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Reportes Graficos con PHP

Pues no hay diferencia, aunq no creia hubiese porq tal como se ve el codigo es como viene en los ejemplos, yo tome los ejemplos y a eso le he metido php

Mire y en este ejemplo como podria pasarlo a programacion estructurada ?? si se fija ahi crean objetos y yo estoy haciendo consultas y el while, pero la forma de como le pasan el array a la data me parece, cree que se pueda adecuar ell ejemplo del link a mi codigo

Bien y sabe de otra libreria que me ayude ?? ya intente con SSRS, y ahorita con highcharts, pero si no funciona otra que he visto es JPGraph
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #16 (permalink)  
Antiguo 27/03/2014, 15:29
 
Fecha de Ingreso: noviembre-2012
Mensajes: 74
Antigüedad: 12 años
Puntos: 3
Respuesta: Reportes Graficos con PHP

Ya vi cual es el error, el error es que json_encode crea un array como [["Telefonia","18"],["Computadoras","25"],["Accesorios","56"]], pero highcharts espera un array como [["Telefonia",18]["Computadoras",25]["Accesorios",56]], es decir numeros sin comillas (si tienen comillas lo reconoce como texto).
Entonces solo cambia la linea
Código PHP:
Ver original
  1. var datos=$.parseJSON(<?php echo json_encode($datos); ?>);//Nueva linea
por
Código PHP:
Ver original
  1. var datos=<?php echo preg_replace( "/\"(\d+)\"/", '$1', json_encode($datos)); ?>;//Nueva linea

la funcion preg_replace de php hace el trabajo de eliminar las comillas en los numeros.
  #17 (permalink)  
Antiguo 27/03/2014, 15:45
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Reportes Graficos con PHP

Perfecto simplemente perfecto !!!!!

Muchas Gracias, en efecto eso era, con este borrador espero replicar el sistema que me piden para las otras graficas y con conexion a SQL Server, la conexion ya esta y la query igual solo faltaria integrar las grafica.

Espero si tengo dudas poder contar con su valiosa ayuda.

Mil gracias otra vez
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #18 (permalink)  
Antiguo 01/04/2014, 13:41
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Reportes Graficos con PHP

Solo para aportar al tema, les dejo esta útil librería con la que elaboro gráficos estadísticos en base a datos que se encuentran en una BD. Funciona con o sin conexión a internet y su implementación es realmente sencilla.

Libchart

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
  #19 (permalink)  
Antiguo 01/04/2014, 14:06
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Reportes Graficos con PHP

Seria de probar !!!

Y si usted la maneja ya se a quien consultar
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.

Etiquetas: graficos, html, mysql, reportes, sql, variable
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 21:25.