Crear datatable con JQuery, cargando una tabla MySQL con PHP

Bienvenidos a VerTutoriales.com, en esta ocasión vamos a ver como cargar la información en nuestra datatable utilizando los datos de una tabla de MySQL, para ello realizaremos como puente PHP, el cual hará la lectura de la tabla y por otro lado la devolverá a la función de llamada Ajax que se realiza con JQuery dentro de nuestra DataTable.

Este tutorial es la segunda parte del artículo Crear datatable con JQuery, y viendo que la gran mayoría realizaba la inserción a mano utilizando la función append de Jquery, me decidí a realizarlo de una forma algo más elegante, es por eso que la estructura que devuelvo con PHP la tuve que realizar a mano hasta que devolví exactamente lo que tomaba el plugin de datatable.

Vamos a ver el código como tal, el cambio que hacemos dentro de nuestro javascript es el siguiente:

«ajax»: «funciones.php»,
«columns»: [
{ «data»: «idImagen» },
{ «data»: «idUsuario» },
{ «data»: «nombre» },
{ «data»: «extension» },
{ «data»: «escala» },
{ «data»: «categoria» }
]
});

Esta función se incluye dentro del método datatable de nuestro objeto. Si os fijáis, estamos llamando al fichero «funciones.php» que tiene la lógica para conectar a la base de datos MySQL, traer la información y parsearla de manera que luego pueda entenderla. Los campos «data» son las columnas que va a traer nuestro AJAX.

Os pego también el código del fichero funciones.PHP:

<?php

define(«cServidor», «localhost»);
define(«cUsuario», «root»);
define(«cPass»,»»);
define(«cBd»,»rdpgestor»);

$conexion = mysqli_connect(cServidor, cUsuario, cPass, cBd);
$consulta = «SELECT idImagen, idUsuario, nombre, extension, escala, categoria FROM imagenes»;
$registro = mysqli_query($conexion, $consulta);

//guardamos en un array multidimensional todos los datos de la consulta
$i=0;
$tabla = «»;

while($row = mysqli_fetch_array($registro))
{
$tabla.='{«idImagen»:»‘.$row[‘idImagen’].'»,»idUsuario»:»‘.$row[‘idUsuario’].'»,»nombre»:»‘.$row[‘nombre’].'»,»extension»:»‘.$row[‘extension’].'»,»escala»:»‘.$row[‘escala’].'»,»categoria»:»‘.$row[‘categoria’].'»},’;
$i++;
}
$tabla = substr($tabla,0, strlen($tabla) – 1);

echo ‘{«data»:[‘.$tabla.’]}’;

?>

Bueno, este fichero no tiene tampoco mucho que explicar, lo que hago es abrir una conexión con la base de datos «rdpgestor» realizo la consulta y recorro la tabla devuelta. Luego lo que hago es guardar en la variable string $tabla una estructura en forma de json, y finalmente añado una etiqueta data con la estructura que había montado previamente.

He de decir que tuve que montar la estructura de esta manera y no directamente parseando con encode json por que los valores que retornaba no iban exactamente como necesitaba el datatable, así que finalmente me decidí por montarlo a mano. Si queréis ver un ejemplo os recomiendo este de como utilizar json con jquery php y mysql 

Está funcional como se puede ver en el vídeo. Además os dejo el link de descarga de ambos ficheros, el que contiene el javascript con el contenido html y el de funciones.php, podéis descargar el ejemplo de datatable con jquery leyendo mysql con php aquí

Si tenéis cualquier duda, podéis formularla e intentaré daros solución. Por otro lado agradezco los me gusta y las suscripciones en youtube! Que dan ánimos para seguir realizando tutoriales! Salud!

 


Carlos Dk

Apasionado por la enseñanza y el SEO

64 comentarios sobre “Crear datatable con JQuery, cargando una tabla MySQL con PHP

  • el 26 septiembre, 2014 a las 6:30 pm
    Permalink

    Soy nuevo en esto y mi pregunta es la siguiente. Este metodo sirve para ver rápidamente cientos de miles de registros?
    Gracias.

    Respuesta
    • el 27 septiembre, 2014 a las 4:19 pm
      Permalink

      Buenas Israel

      Ver rápidamente cientos de miles de registros no se lo recomendaría a nadie, es decir, ¿Cuanta información vas a querer mostrar a tu usuario? ¿Te imaginas el tiempo de respuesta de tu servidor y el tiempo de carga en el cliente?

      Normalmente se suelen utilizar otros filtros para que se muestre menos cantidad de información, además, para ello otro «filtro» sería utilizar el paginado para mostrar solamente una parte de esos cientos de miles de registros, de manera que aunque en realidad estés «seleccionando cientos de miles» en realidad solo estás trayendo 30 o 40 registros cada vez. Para ello se utiliza dentro de la select el comando LIMIT que «limita» la cantidad de registros a seleccionar desde un punto de inicio.

      Espero que te respondiera a la pregunta, sino, estoy por aquí para ayudarte en lo que necesites 😉

      Salud!

      Respuesta
      • el 26 agosto, 2015 a las 8:57 pm
        Permalink

        buenas tardes me ha interesado lo que has dicho, tienes videotutoriales de como usar el datatables para muchos registro justo lo que le decias Israel, me ha interesado y pues quiero ponerlo en practica en un proyecto. tienes videotutoriales de como hacerlo.

        saludos, espero que me puedas ayudar

        Respuesta
        • el 2 septiembre, 2015 a las 12:48 pm
          Permalink

          Claro que sí, cualquier cosa que necesites pregunta y te ayudamos como buenamente pueda 🙂

          Respuesta
  • el 19 diciembre, 2014 a las 7:02 pm
    Permalink

    Muchas Gracias por el video tutorial, me ha resultado muy util

    Respuesta
    • el 20 diciembre, 2014 a las 10:12 am
      Permalink

      Nada 🙂 Estoy preparando un par de tutoriales más donde explico más sobre las datatables 😉

      Te invito a suscríbirte en Youtube a Vertutoriales o a seguirme en Facebook para no perderte nada 😉

      Respuesta
  • el 20 diciembre, 2014 a las 6:54 pm
    Permalink

    Vale genial, ya me suscribí., oye me esta dando este error—>DataTables warning: table id=example – Invalid JSON response. For more information about this error, please see http://datatables.net/tn/1—>Sabes como resolverlo?

    Respuesta
  • el 22 diciembre, 2014 a las 8:54 am
    Permalink

    El error es por como estás montando el JSon devuelto por tu PHP, si estás utilizando PHP.

    Si utilizas el depurador del navegador puedes ver en network la respuesta que te da esa llamada Ajax que realiza el datatable para traer la información.

    Justo hoy tengo preparado un tutorial de como traducir el datatable, pero puedo hablar de resolver ese problema, si me da tiempo para esta tarde lo preparo 😉

    Respuesta
  • el 25 diciembre, 2014 a las 8:21 pm
    Permalink

    Vale muchas gracias, por tu ayuda 😀 y por tus tutoriales, ya resolvi warning, saludos desde Venezuela

    Respuesta
  • el 26 diciembre, 2014 a las 3:43 am
    Permalink

    hola buenas noches, me da el mismo error que ha evelyn, estor utilizando el gestor postgres. puedes ayudarme con eso?. Este es mi codigo:

    —prueba2.php

    $(document).ready(function() {
    $(‘#example’).DataTable({
    «ajax»: «consultar.php»,
    «columns»: [
    { «data»: «Usuario» },
    { «data»: «Correo» },
    { «data»: «Tipo» }
    ]
    });
    } );

    Usuario
    Correo
    Tipo

    Tiger Nixon
    Edinburgh
    A

    — consultar.php

    Cursor($sql);
    $i=0;
    $tabla=»»;
    if (pg_num_rows($pg)>0)
    {
    while ($row=pg_fetch_array($pg))
    {
    $tabla.='{«Usuario»:»‘.$row[1].'»,
    «Correo «:»‘.$row[2].'»,
    «Tipo» :»‘ .$row[4].'»},’;
    $i++;

    }
    }
    //echo json_encode($tabla);
    $tabla = substr($tabla,0, strlen($tabla) – 1);
    echo ‘{«data»:[‘.$tabla.’]}’;
    ?>

    — class_conexion.php

    host = $host;
    $this->user = $user;
    $this->password = $password;
    $this->db = $db;
    $this->port = $port;
    $this->con = pg_connect(«host=».$this->host.» port=».$this->port.» dbname=».$this->db.» user=».$this->user.» password=».$this->password);
    if (!$this->con) die(«Ocurrio un error al intentar la conexion….»);
    }

    public function getConexion()
    {
    return $this->con;
    }

    function Cursor($sql)
    {
    $rs=pg_query($this->con,$sql);
    if ($rs)
    return $rs;
    else
    return false;
    }

    function Ejecutar($sql)
    { $rs=pg_query($this->con,$sql);
    if ($rs)
    return true;
    else
    return false;
    }

    }

    ?>

    —> De verdad espero tu ayuda.
    Gracias de ante mano.

    Respuesta
    • el 26 diciembre, 2014 a las 10:13 am
      Permalink

      Buenos días!

      En principio tal y como estás montando el resultado del JSon parece correcto, pero quizás no está dando el error al montar el datatable en ese sitio, sino en la consulta. Te recomendaría lo mismo que a Evelyn, prueba a depurar el resultado viendolo en la inspección de elementos, en la pestaña de «Network» y así podrás ver la cadena JSon que devuelve tu llamada al PHP. Si te devuelve la información que esperas o está mal formado el array json.

      Lo mejor es que vayas trazando cada trocito de código.

      Respuesta
  • el 26 diciembre, 2014 a las 3:49 am
    Permalink

    hola de nuevo, cuando envie el codigo no se envio correcto. Podrias enviarme un correo en donde pueda enviarte mi codigo?, gracias!!

    Respuesta
  • el 26 diciembre, 2014 a las 5:38 pm
    Permalink

    hola, buenas tardes, si eso ya lo hice y efectivamente muestra el json como es. pero no se me esta mostrando en la data table o en el navegador como tal. Puedes ayudame en eso?

    Respuesta
    • el 27 diciembre, 2014 a las 6:18 pm
      Permalink

      Claro que sí.

      Si el JSon viene como debe lo único que puede estar fallando es que no tienes las columnas ni los campos exactamente iguales.

      Pégame el JSon para comprobar que está todo correcto, normalmente la Datatable suele ser bastante «delicada» y se le ha de dar exactamente lo que pide.

      Respuesta
  • el 13 enero, 2015 a las 3:54 pm
    Permalink

    ¿puedes volver a subir el archivo? esta mala la descarga

    Respuesta
  • el 13 enero, 2015 a las 4:00 pm
    Permalink

    Buenas Bowser

    ¿La descarga te la hace correcta?

    En principio no me da error, vuelve a probar y me cuentas.

    Salud!

    Respuesta
  • el 14 enero, 2015 a las 6:06 pm
    Permalink

    Hola.

    Buena tardes, tengo un problema con el ejemplo que planteas, que de hecho está bueno y eso es lo que estaba buscando, pero te comento que no me carga los datos en la página index. php, pero al cargar la página funciones si me devuelve los datos en la etiqueta «data». …que me falta?????

    Respuesta
    • el 14 enero, 2015 a las 8:55 pm
      Permalink

      Es posible que tu datatable no esté recibiendo ningún dato tal y como indicas.
      ¿Tienes datos en la base de datos y la consulta está correcta?

      Está claro según comentas que el problema viene en la información que has de tomar de MySQL y que no estás trayendo.

      Si no te funciona, coméntalo y seguimos probando cosas 😉
      Un saludo!

      Respuesta
  • el 14 enero, 2015 a las 9:49 pm
    Permalink

    Hola amigo. Gracias por contestar.

    Te comento un poco mas sobre las herramientas con las cuales que estoy probando tu ejemplo:
    – Windows7: (64 bits).
    – Servidor Web: AppServ – 2.5.9 (Windows)
    -Apache Web Server Version 2.2.4
    -PHP Script Language Version 5.2.3
    -MySQL Database: 5.0.45.

    He bajado tu ejemplo y solo he cambiado los datos de la conexión y de mi tabla de la base de datos, pero nada. Al parecer el datatable del index.php no recibe la data, porque me muestra un mensaje que dice «No hay Datos disponibles en la Tabla», pero como te comentaba anteriormente, al correr el archivo funciones.php, ahí se me muestra los datos de la consulta.
    Que podría ser, … quizás falta configurar algo más para el json.

    Espero tus comentarios y ayuda al respecto.

    Saludos cordiales.

    Respuesta
  • el 15 enero, 2015 a las 4:44 pm
    Permalink

    De maravilla…

    Gracias amigo, solo descargue la ultima versión de las librerías del datatable y funcionó.

    Lo estoy probando con una conexión ODBC porque necesito consultar datos desde sql, voy a ver como me va.

    Gracias por tu gran aporte….

    suerte.

    Atte.;
    Miguel Núñez.

    Respuesta
  • el 22 enero, 2015 a las 11:51 pm
    Permalink

    Hola mi estimado amigo.

    Tienes algún ejemplo de mostrar resultados de una consulta con parámetros en un datatable, porque estoy probando tu ejemplo con parámetros y no me muestra nada. Me sale: «Invalid JSON responde».

    Alguna idea me lo haces saber por favor.

    Atte;

    Miguel Nuñez.

    Respuesta
    • el 23 enero, 2015 a las 9:06 am
      Permalink

      Buenas, en principio el ejemplo que muestro debería de funcionar si tienes los parámetros de la tabla correctamente, si me pasas tu estructura de base de datos podría ayudarte a montar al consulta. De todas maneras para solucionar el Invalid JSon, te recomiendo revisar este artículo que es precisamente para valorar donde puede estar dando problema:
      http://vertutoriales.com/json-invalid-en-datatable-como-solucionarlo/

      El Invalid JSon suele ser por una malformación en la información devuelta por tu llamada AJAX y que la Datatable no entiende.
      Para cualquier duda por aquí estoy.
      Un saludo!

      Respuesta
  • el 23 enero, 2015 a las 5:06 pm
    Permalink

    Hola mi estimado. Te estoy copiando todos mis archivos a ver si me ayudas con esto. Te explico un poco lo que trato de hacer con esto:
    1- En el formulario del ordenes2.php selecciono el año y luego se carga el segundo combo (B y S), y según esta selección en el archivo consultas_o_1.php se ejecuta la consulta de acuerdo a los parámetros seleccionados anteriormente y ese resultado quiero que me muestre en el datatable.
    ***************************************
    Esta es la estructura de mi tabla (ordenes1):

    ***************************************************
    –ESTRUCTURA DE LA TABLA ORDENES1
    ***************************************************

    DROP TABLE IF EXISTS `ordenes1`;

    CREATE TABLE `ordenes1` (
    `id` mediumint(8) NOT NULL,
    `ano_eje` char(4) collate utf8_unicode_ci NOT NULL,
    `nro_orden` int(7) NOT NULL,
    `tipo_bien` varchar(1) collate utf8_unicode_ci NOT NULL,
    `exp_siaf` varchar(10) collate utf8_unicode_ci default NULL,
    `fecha_orden` date NOT NULL,
    `concepto` varchar(350) collate utf8_unicode_ci default NULL,
    UNIQUE KEY `id` (`id`),
    KEY `nro_orden` (`nro_orden`)
    )
    ENGINE=MyISAM DEFAULT
    CHARSET=utf8 COLLATE=utf8_unicode_ci;

    ***************************************************
    — DATOS PARA LA TABLA `ORDENES1`
    ***************************************************

    INSERT INTO `ordenes1` VALUES (1, ‘2013’, 855, ‘B’, ‘4664’, ‘2013-09-17’, ‘COMPRA DE VESTUARIO PARA IMPLEMENTACION DE LAS BRIGADAS ASISTENCIALES Y HOSPITALARIAS’);

    INSERT INTO `ordenes1` VALUES (2, ‘2013’, 855, ‘B’, ‘4664’, ‘2013-09-17’, ‘COMPRA DE VESTUARIO PARA IMPLEMENTACION DE LAS BRIGADAS ASISTENCIALES Y HOSPITALARIAS’);

    INSERT INTO `ordenes1` VALUES (3, ‘2013’, 739, ‘B’, ‘4797’, ‘2013-09-24’, ‘PAGO POR INSTALACIONES ELECTRICAS DE LOS AMBIENTES Y OFICINAS DEL CUARTO NIVEL DE LA INFRAESTRUCTURA’);

    INSERT INTO `ordenes1` VALUES (4, ‘2013’, 793, ‘S’, ‘5096’, ‘2013-10-10’, ‘(10) Talonarios de Boletas de Venta P.S. Corazón de María- El Socorro’);

    INSERT INTO `ordenes1` VALUES (5, ‘2013’, 792, ‘S’, ‘5099’, ‘2013-10-10’, ‘impresiones para el desarrollo de reunión técnica de implementación del esquema nacional de vacunación’);

    INSERT INTO `ordenes1` VALUES (6, ‘2013’, 791, ‘S’, ‘5100’, ‘2013-10-10’, ‘SERVICIO DE ALOJAMIENTO PARA EL PERSONAL DE SALUD QUE PARTICIPA EN TALLER DE ACTUALIZACION EN METODO’);

    INSERT INTO `ordenes1` VALUES (47, ‘2014’, 1044, ‘B’, ‘5797’, ‘2014-10-22’, ‘COMPRA DE MATERIAL PARA EL SERVICIO DE ADMISION Y ESTADISTICA’);

    INSERT INTO `ordenes1` VALUES (48, ‘2014’, 1044, ‘B’, ‘5797’, ‘2014-10-22’, ‘COMPRA DE MATERIAL PARA EL SERVICIO DE ADMISION Y ESTADISTICA’);

    INSERT INTO `ordenes1` VALUES (49, ‘2014’, 1044, ‘B’, ‘5797’, ‘2014-10-22’, ‘COMPRA DE MATERIAL PARA EL SERVICIO DE ADMISION Y ESTADISTICA’);

    INSERT INTO `ordenes1` VALUES (50, ‘2014’, 795, ‘S’, ‘5098’, ‘2014-10-10’, ‘PAGO POR FOTOCOPIAS DE EXPEDIENTES JUDICIALES’);
    INSERT INTO `ordenes1` VALUES (51, ‘2014’, 835, ‘S’, ‘5253’, ‘2014-10-17’, ‘PAGO POR PREPARACION DE REFRIGERIOS Y ALMUERZOS PARA LA REALIZACION DE ACTIVIDADES DE LA ETAPA DE VI’);

    INSERT INTO `ordenes1` VALUES (52, ‘2014’, 835, ‘S’, ‘5253’, ‘2014-10-17’, ‘PAGO POR PREPARACION DE REFRIGERIOS Y ALMUERZOS PARA LA REALIZACION DE ACTIVIDADES DE LA ETAPA DE VI’);

    ***********************************************
    archivo ordenes2.php (formulario)
    *********************************************
    =’2013′ group by ano_eje order by 1″;
    $registro = mysqli_query($conexion, $consulta);
    /********************************************************************************************/
    ?>

    Consulta de Ordenes de Compra y Servicio

    $(document).ready(function(){
    // Parametros para el cboanio
    $(«#cboanio»).change(function () {
    $(«#cboanio option:selected»).each(function () {
    elegido1=$(this).val();
    $.post(«consultas_o_1.php», { elegido1: elegido1 }, function(data){
    $(«#cbotipo»).html(data);
    $(«#cbotipo»).focus();
    });
    });
    });
    // Parametros para el cbotipo
    $(«#cbotipo»).change(function () {
    $(«#cbotipo option:selected»).each(function () {
    elegido2=$(this).val();
    $.post(«consultas_o_1.php», { elegido1: elegido1, elegido2: elegido2 }, function(data){
    $(‘#example’).dataTable( {
    «ajax»: «consultas_o_1.php»,
    «columns»:
    [
    { «data»: «nro_orden» },
    { «data»: «fecha_orden» },
    { «data»: «concepto» },
    { «data»: «tipo_bien» },
    { «data»: «exp_siaf» },
    { «data»: «nombre_prov» }
    ]
    });
    });
    });
    });
    });

    Parámetros de Consulta:

      Año
    :  

    <?php
    while($row = mysqli_fetch_array($registro)) {
    echo'’.$row[0].»;
    }
    mysqli_free_result($registro);
    ?>
        

      Tipo-Bien
    :  

    document.form1.cboanio.focus();

    Orden
    Fecha
    Concepto
    Tipo
    Exp-Siaf
    Proveedor

    ************************************************
    archivo: consultas_o_1.php
    ************************************************
    <?php

    define("cServidor", "localhost");
    define("cUsuario", "root");
    define("cPass","manco80");
    define("cBd","bddocs");

    $conexion = mysqli_connect(cServidor, cUsuario, cPass, cBd);

    /*****************************************************************************************************************************************************/
    $anio = $_POST[elegido1];
    $tipo = $_POST[elegido2];
    /*****************************************************************************************************************************************************/

    if ($anio != "" & $tipo == "") {
    $sql = "select distinct(tipo_bien) from ordenes1 where ano_eje='$anio' group by tipo_bien order by tipo_bien asc";
    $rst = mysqli_query($conexion, $sql);

    echo ("»);
    while($row = mysqli_fetch_array($rst))
    {
    echo».$row[0].»;
    }
    mysqli_free_result($rst);
    }
    /*****************************************************************************************************************************************************/
    /*****************************************************************************************************************************************************/

    if ($tipo != «»){
    $sql=»select nro_orden, fecha_orden, concepto, tipo_bien, exp_siaf, nombre_prov From ordenes1 Where ano_eje=’$anio’ and tipo_bien=’$tipo’ group by nro_orden, fecha_orden, concepto, tipo_bien, exp_siaf, nombre_prov Order By nro_orden Asc»;

    echo $sql;
    $rst = mysqli_query($conexion, $sql);
    $i = 0;
    $tabla = «»;
    while($row = mysqli_fetch_array($rst))
    {
    $tabla.='{«nro_orden»:»‘.$row[‘nro_orden’].'»,»fecha_orden»:»‘.$row[‘fecha_orden’].'»,»concepto»:»‘.$row[‘concepto’].'»,»tipo_bien»:»‘.$row[‘tipo_bien’].'»,»exp_siaf»:»‘.$row[‘exp_siaf’].'»,»nombre_prov»:»‘.$row[‘nombre_prov’].'»},’;
    $i++;
    }
    $tabla = substr($tabla,0, strlen($tabla) – 1);
    echo ‘{«data»:[‘.$tabla.’]}’;
    }
    ?>

    Respuesta
  • el 23 enero, 2015 a las 5:12 pm
    Permalink

    Te copio nuevamente el archivo ordenes2.php, porque el anterior se copio mal..

    ***********************************************
    ordenes2.php
    ***********************************************
    =’2013′ group by ano_eje order by 1″;
    $registro = mysqli_query($conexion, $consulta);
    /********************************************************************************************/
    ?>

    Consulta de Ordenes de Compra y Servicio

    $(document).ready(function(){
    // Parametros para el cboanio
    $(«#cboanio»).change(function () {
    $(«#cboanio option:selected»).each(function () {
    elegido1=$(this).val();
    $.post(«consultas_o_1.php», { elegido1: elegido1 }, function(data){
    $(«#cbotipo»).html(data);
    $(«#cbotipo»).focus();
    });
    });
    });
    // Parametros para el cbotipo
    $(«#cbotipo»).change(function () {
    $(«#cbotipo option:selected»).each(function () {
    elegido2=$(this).val();
    $.post(«consultas_o_1.php», { elegido1: elegido1, elegido2: elegido2 }, function(data){
    $(‘#example’).dataTable( {
    «ajax»: «consultas_o_1.php»,
    «columns»:
    [
    { «data»: «nro_orden» },
    { «data»: «fecha_orden» },
    { «data»: «concepto» },
    { «data»: «tipo_bien» },
    { «data»: «exp_siaf» },
    { «data»: «nombre_prov» }
    ]
    });
    });
    });
    });
    });

    Parámetros de Consulta:

      Año
    :  

    <?php
    while($row = mysqli_fetch_array($registro)) {
    echo'’.$row[0].»;
    }
    mysqli_free_result($registro);
    ?>
        

      Tipo-Bien
    :  

    document.form1.cboanio.focus();

    Orden
    Fecha
    Concepto
    Tipo
    Exp-Siaf
    Proveedor

    Respuesta
  • el 23 enero, 2015 a las 5:17 pm
    Permalink

    Mi estimado se copia mal el texto, pero prueba con la estructura de la tabla que te envié, al pasarle los 2 parámetros (año y tipo), me muestre los resultados de la consulta en el databable.

    Respuesta
    • el 23 enero, 2015 a las 9:49 pm
      Permalink

      Aparentemente está correcto, tanto el número de columnas, el como montas el array del json y el propio Datatable, ¿has revisado el JSon que devuelve tu llamada AJAX como se explica en el enlace que te puse anteriormente?

      Es posible que el código como tal esté todo correcto pero haya algún otro error que esté inyectando PHP y se malforme ese JSon.

      Prueba y me cuentas.
      Un saludo!

      Respuesta
  • el 23 enero, 2015 a las 11:40 pm
    Permalink

    Contestando nuevamente.

    El JSon si me devuelve la data de la consulta.
    pero luego me da la siguiente llamada:
    consultas_o_1.php?_=1422052583859

    … y acá no se ve nada, no hay alguna advertencia o algo parecido…..

    Respuesta
  • el 25 enero, 2015 a las 7:17 pm
    Permalink

    ¿Puedes copiar el JSon que devuelve? Si te da un invalid JSon tiene que ser por malformación de la estructura.

    Si estás haciendo, otra segunda llamada es lo que tendrías que revisar para ver exactamente por qué y si está devolviendo vacío ese Data.

    Respuesta
  • el 26 enero, 2015 a las 6:10 pm
    Permalink

    buen dia amigo descargue una datatable API y la implemente, pero requiero que la tabla se adapte a la ventana es decir que no salga el scroll inferior sino que se haga pequeña según el tamaño de pantalla que uno quiera, espero respuesta gracias por tu ayuda y buenos vídeos

    Respuesta
    • el 26 enero, 2015 a las 8:55 pm
      Permalink

      En ese caso tendrás que utilizar CSS y añadirle el ancho máximo de la tabla al 100%. Algo como width = 100%

      A ver si te soluciona el problema de ancho con la Datatable 😉
      Salud y gracias por el cumplido 😉

      Respuesta
  • el 29 enero, 2015 a las 6:39 pm
    Permalink

    Hola todo me carga perfecto, solo tengo una duda yo realizo actividades en los botones de mi tabla cuando realizo el proceso de dar una baja quisiera saber como poder actualizar el datatable todo lo trabajo con ajax pero aun no logro refrescar el datatable tienes alguna tutorial parecido ? o simplemente como refrescar el datatable de una consulta!

    Respuesta
    • el 2 febrero, 2015 a las 8:33 pm
      Permalink

      Disculpa la demora en responder, sí, tengo un código para eliminar exactamente la fila o registro de la datatable de manera que puedas borrar al hacer clic sobre la acción de borrado.

      Cuando esté en mi PC lo comparto 😉

      Un saludo!

      Respuesta
  • el 18 febrero, 2015 a las 2:35 am
    Permalink

    Excelente video, me ayudo bastante pero me gustaría saber si puedo obtener el total de registro? Es para colocarlo en el tfooter estuve probando pero no sé como hacerlo, si pudiera guiarme te lo agradecería.

    Respuesta
  • el 17 marzo, 2015 a las 7:42 pm
    Permalink

    Buenas yo ya tenía echa mi datatable de otra forma distinta a la tuya y me funciona pero, quiero que un resultado por ejemplo si tengo un apartado enlaces y la base de datos en ese campo devuelve una dirección web. Como hago para que ya me devuelva el resultado como si fuera un enlace?? Gracias y no se sí me explique bien

    Respuesta
    • el 18 marzo, 2015 a las 9:42 pm
      Permalink

      Te explicaste perfectamente.

      Lo que tendrás que realizar es a la hora de devolver el enlace, formatearlo como una etiqueta a, es decir, en vez de enviar el campo tal y como lo tomas de la bbdd, tendrás que modificarlo de manera que pase la url con enlace completo. Ejemplo:

      $url = "http://www.vertutoriales.com";
      $url = "a href=".$url." rel="nofollow">click para ver

      Ese valor de $url, será el que tienes que pasar luego en la cadena json devuelta para el datatable.

      Espero que te ayude.
      Salud!

      Respuesta
      • el 25 marzo, 2015 a las 10:21 pm
        Permalink

        Eso si lo se pero lo que quiero es que toda la columna aparezca como un enlace. Ahora lo tengo asi y asi funciona,

        AHora lo que quiero es la columna de $row[‘enlace’] quiero que todo los resultados los muestre como enlace y probe asi:
        <?php

        $con=mysql_connect ("localhost","root","root");
        mysql_select_db("EnlacesAvIsitar",$con);

        $sql="select * FROM Enlaces";
        // $sql="select id, enlace, categoria, subcategoria FROM Enlaces";

        $datos=mysql_query($sql,$con);

        $titulo = "«.($row[‘enlace’]) ,»«;

        $first = 0;
        $json = ‘{«aaData»:[‘;

        while ($row=mysql_fetch_array($datos)) {

        if ($first++)
        $json .=’,’;
        $json .= ‘[«‘.$row[‘id’].'»,’;
        $json .= $titulo;
        $json .= ‘»‘.$row[‘categoria’].'»,’;
        $json .= ‘»‘.$row[‘subcategoria’].'»]’;
        }
        $json .= ‘]}’;
        print $json;
        ?>
        y me da error de :
        DataTables warning: table id=tablaEnlaces – Ajax error. For more information about this error, please see http://datatables.net/tn/7

        Alguna sugerencia????
        Gracias

        Respuesta
    • el 25 marzo, 2015 a las 10:24 pm
      Permalink

      php

      $con=mysql_connect («localhost»,»root»,»root»);
      mysql_select_db(«EnlacesAvIsitar»,$con);

      $sql=»select * FROM Enlaces»;

      $datos=mysql_query($sql,$con);

      $first = 0;
      $json = ‘{«aaData»:[‘;

      while ($row=mysql_fetch_array($datos)) {

      if ($first++)
      $json .=’,’;
      $json .= ‘[«‘.$row[‘id’].'»,’;
      $json .= ‘»‘.$row[‘enlace’].'»,’;
      $json .= ‘»‘.$row[‘categoria’].'»,’;
      $json .= ‘»‘.$row[‘subcategoria’].'»]’;
      }
      $json .= ‘]}’;
      print $json;
      ?>

      Respuesta
      • el 29 marzo, 2015 a las 8:56 pm
        Permalink

        Creo que el problema viene en la estructura que estás devolviendo o en su caso la forma de recepcionarlo en la llamada AJAX.

        De hecho, si miras en la URL de error que te devuelve la propia datatable te muestra el qué debes realizar para solucionarlo. En mi caso tengo también un vídeo que muestra como ver (para dar solución) el depurador de llamadas para la datatable.
        https://www.youtube.com/watch?v=TnAxCCXv_7A

        Utilizo Google Chrome, pero igualmente desde mozilla firefox puedes verlo, (sí, también desde iexplorer).

        Revisa la cadena devuelta y si está correctamente se tendrá que mirar en otro lado.

        Respuesta
  • el 27 marzo, 2015 a las 3:46 am
    Permalink

    Hola como estas. estoy en un proyecto de un sitio hecho en opencart, uno de los modulos instalados usa datatable de jquery, la tabla funciona correctamente. lo que quisiera que me ayudaras es a agregar un boton y que este filtrara por lo que haya colocado en las cajas de texto , espero haberme explicado bien

    Respuesta
    • el 29 marzo, 2015 a las 8:49 pm
      Permalink

      ¿Lo que quieres es añadir un grupo de filtros añadidos además del que viene por defecto en la DataTable?

      Si es así, tendrás que pasar en la llamada JSon de la datatable los diferentes valores de los objetos con JQuery (por ejemplo) y luego tratarlos donde gestiones la lógica del programa a nivel de servidor.

      Si necesitas que te explique más en profundidad, simplemente coméntalo y lo vemos!
      Salud!

      Respuesta
  • el 15 junio, 2015 a las 12:36 am
    Permalink

    Hola buen dia , en que parte se guarda el archivo funciones ?

    Respuesta
    • el 15 junio, 2015 a las 7:40 am
      Permalink

      El archivo funciones lo puedes guardar donde quieras, mientras en la llamada AJAX de la función datatable le pongas la ruta correctamente, ya que es de donde traerá la información devuelta en JSON.

      Espero que te ayude.

      Un saludo!

      Respuesta
  • el 15 septiembre, 2015 a las 8:32 am
    Permalink

    Buenas están geniales tus tutoriales, no se si puedas ayudarme con algo que no puedo resolver x.x
    Al checar en el navegador (mirando el código) me dice Parse error: in C:\wamp\www\data\funciones.php on line 20

    este es el codigo:

    ——————————————–
    Mi base se llama invetario Tabla-estados
    Campos: idequipos-Nombre-Modelo-Numero-Service-Disco-Ram-Provedor.

    Respuesta
    • el 6 octubre, 2015 a las 8:20 am
      Permalink

      Buenas Luis, disculpa la tardanza, parece que mi WP no me está enviando mails y tengo algunos comentarios (bastantes)

      Con respecto al tema que comentas, el código no lo puedo visualizar, pero si te dice error en la linea 20, ahí estarás realizando alguna operación incorrecta, pega solamente esa parte sin los < ? ?>

      Respuesta
  • el 24 noviembre, 2015 a las 12:22 am
    Permalink

    Hola Carlos, en primer lugar agradecer la buena voluntad de compartir tus conocimientos, la verdad eso se agradece mucho de parte de novatos como yo. Te cuento que reproduci tu ejemplo y me funciona espectacular, solo tengo las siguientes dudas a ver si me puedes ayudar :
    en mi bd mysql tengo algunos campos numéricos que me gustaría mostrar formateados (con separador de miles básicamente), como podría hacer esto?
    Muchas Gracias
    Sldos

    Respuesta
    • el 24 noviembre, 2015 a las 9:00 am
      Permalink

      Buenos días,

      Tendrás que pasar el formateo antes de enviarlo al datatable, es decir, enviarlo desde PHP, para ello PHP utiliza para formatear números la función format, tal que así:
      string number_format (float $number [, int $decimals = 0 ])

      Espero que te sirva.
      P.D. Gracias a ti por comentar 🙂

      Respuesta
  • el 25 noviembre, 2015 a las 12:45 am
    Permalink

    Carlos, muchas gracias, me funciono lo del formato nùmerico que me sugeriste. Tengo otra duda para consultarle: Resulta que mi bd tiene varios campos y para que se puedan mostrarse dentro del ancho de una pagina, necesito achicar el font que por defecto viene muy grande, estuve mirado dentro del archivo datatable.css pero no pude descubrir donde tocar. Es posible hacer esto ?
    Sldos

    Respuesta
  • el 26 noviembre, 2015 a las 6:23 am
    Permalink

    Amigo, gracias por el aporte, soy muy nuevo en esto, solo de ser posible ayudame, como podrias usar esto o cualquier otro ?? para tener una o dos cajas de texto y un boton consultar y que me muestre el resultado agregando una fila cada vez que le doy en BOTONCONSULTAR ?? segun tu ejemplo te muestra todo lo que tengas, pero solo necesito una fila por cada CLIC, como podria hacerlo ?

    Respuesta
    • el 26 noviembre, 2015 a las 7:06 am
      Permalink

      Pues simplemente añade en la llamada AJAX de ese botón, que la consulta SQL que se haces en PHP tenga un limit de X registros, en este caso, X será en cada llamada x = x + 1, la consulta quedaría algo como:
      Select * from tutabla limit x

      Espero que te sirva!
      Salud!

      Respuesta
  • el 14 diciembre, 2015 a las 11:14 pm
    Permalink

    Yo tengo el siguiente error:

    Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in C:\wamp\wiouououoiuounciones.php on line 16

    A ver si algún alma caritativa me ilustra! Grazie mille de antemano!

    Respuesta
    • el 15 diciembre, 2015 a las 10:35 pm
      Permalink

      Si pegas lo que tienes escrito en la línea 16 mejor, pero el error lo que está diciendo es que está esperándo algún parámetro, de hecho «1» parameter 🙂

      Respuesta
  • el 27 junio, 2017 a las 10:53 pm
    Permalink

    Hola, aunque este este post ya lleva un tiempo, espero que todavía se pueda hacer una consulta: He seguido paso a paso el tutorial y me da el comun error de «invalid Json», el cual a revisar el depurador me encuentro con lo siguiente : Parse error: syntax error, unexpected ‘–’ (T_STRING) in C:\Apache24\htdocs\Reportes.php on line 74

    la linea 74 a la que se hace referencia es la siguiente:
    $tabla = substr($tabla,0, strlen($tabla) – 1);

    Se agradece cualquier sugerencia al respecto
    Muchas Gracias !
    Sldos

    Respuesta
    • el 13 julio, 2017 a las 7:03 am
      Permalink

      Revisa el signo «-«, parece que has copiado pegado y ese código será un caracter ascii, no el signo de restar 1 🙂

      Respuesta
  • el 5 junio, 2018 a las 7:41 pm
    Permalink

    buen día, como manejo la excepción cuando la tabla aún no tiene registros? Ya que el Json me devuelve null y me responde con el error «Invalid JSon en Datatable»

    Respuesta
    • el 6 junio, 2018 a las 11:15 am
      Permalink

      Lo más sencillo es que devuelvas la estructura vacía, pero no un null:
      echo ‘{“data”:[]}’;
      A ver si esto te funciona 😉

      Respuesta

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.