Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: bgnumis en 10 Abril 2016, 20:03 pm



Título: Tabla con ficheros para descargar
Publicado por: bgnumis en 10 Abril 2016, 20:03 pm
Hola quisiera hacer una tabla para mostrar en una página listado.PHP que acudiera a mi base de datos de MySQL donde habría por cada archivo idreg, fecha, nombre corto, nombre largo, descripción y el propio archivo.

Lo que quiero es que al acceder a listado.PHP me saqué todos los registros para poder descargar el que sea.

He visto que el link a los archivos que estén en una carpeta se hace con el href. Pero ¿los ficheros no están en la base de datos no? Están en una carpeta que si la habré subido al servidor pero no se no veo claro como podría hacerlo.

¿Alguien podría ayudarme un poco a un vídeo o manual o código ejemplo para iniciarlo?

Gracias por adelantado


Título: Re: Tabla con ficheros para descargar
Publicado por: gAb1 en 10 Abril 2016, 22:34 pm
¿Tienes dudas con todo en general? ¿O solo es para crear el link al archivo? Especifica mejor lo que quieres.

Para tablas lo mejor que hay ahora mismo es el plugin de jquery datatables (https://datatables.net/). Creas una función que coja las columnas y con ajax recoges los datos. Datatables se encarga de todo lo demás.

Ahora bien, lo del link, no sé que dudas tienes respecto a esto pero lo normal es subir los archivos a un dominio o subdominio de tu web que sea estatico (con php, perl, etc desactivado) y de ahí se descargan, el link sería algo así: http://static.tuweb.com/archivos/archivo1.pdf

En la base de datos se suele subir el link del archivo, no el archivo en sí (que se puede).

En el script php, imprimes el link dentro del href.

Como la documentación de datatables es un poco liosa (muchas cosas innecesarias) te dejo como lo haría yo:

Código
  1. public function get_files_table() {
  2.    $mysqli = $this->aet->getAetSql();
  3.  
  4.    $query = 'SELECT * FROM files';
  5.  
  6.    if ($stmt = $mysqli->prepare($query)) {
  7.        $stmt->execute();
  8.  
  9.        $stmt->bind_result($idreg, $fecha, $nombre_corto, $nombre_largo, $description, $link);
  10.  
  11.        $data = [];
  12.        while ($stmt->fetch()) {
  13.            $nestedData                 = [];
  14.            $nestedData['idreg']        = $idreg;
  15.            $nestedData['fecha']        = $fecha;
  16.            $nestedData['nombre_corto'] = $nombre_corto;
  17.            $nestedData['nombre_largo'] = $nombre_largo;
  18.            $nestedData['description']  = $description;
  19.            $nestedData['link']         = '<a href="' . $link . '">Descargar</a>';
  20.            $data[]                     = $nestedData;
  21.        }
  22.    }
  23.  
  24.    return $data;
  25. }

Ahora el get para el ajax:

Código
  1. $op = isset( $_GET['op'] ) ? (int) $_GET['op'] : 0;
  2.  
  3. if ($op === 1) {
  4.    $result = $functions->get_prop_table();
  5.  
  6.    header('Content-type: text/json');
  7.    header('Content-type: application/json');
  8.    echo json_encode($result);
  9. }

Si necesitas hacer más cosas mediante ajax, puedes crear más ifs con distintos números para cada función que tengas.

Código
  1. $('#example').DataTable( {
  2.    processing: true,
  3.    lengthChange: false,
  4.    ajax: {
  5.        url: '/get',  // la url donde tienes el archivo que gestiona los get
  6.        dataSrc: '',
  7.        data: function(d) {
  8.            d.op = 1;  // la opción, en este caso 1
  9.        }
  10.    },
  11.    language: {
  12.        "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  13.    },
  14.    columns: [
  15.        { data: 'idreg' },
  16.        { data: 'fecha' },
  17.        { data: 'nombre_corto' },
  18.        { data: 'nombre_largo' },
  19.        { data: 'description' },
  20.        { data: 'link' }
  21.    ]
  22. });


Título: Re: Tabla con ficheros para descargar
Publicado por: bgnumis en 11 Abril 2016, 22:15 pm
Hola gaB1

Muchas Gracias de verdad. Una duda chorra jeje. Como ves, aprendo muy poco a poco.

El primer código más o menos lo tengo claro. El segundo no, pero entiendo que también es necesario para que Ajax muestre los ficheros? Ya el tercero ejeje no sé muy bien que diferencia hay con el primero ¿que numera?

La duda principal: El código 1 y 2 los pondo en el mismo archivo listado.php ? O van en archivos diferentes=? Hasta ahora nunca había utilizado Ajax.

Muchas Gracias por adelantado y disculpas si lo que pregunto es una tontada.


Título: Re: Tabla con ficheros para descargar
Publicado por: gAb1 en 12 Abril 2016, 02:24 am
No, tienen que ir en archivos distintos. El primero código es el script que coge los datos de la base de datos y crea las filas de la tabla. El segundo código es el get donde el ajax hace la petición de los datos a mostrar en la tabla.

El tercer código inicializa el plugin datatables en la tabla con id example, es javascript. Tienes que crear el html de la tabla, entra en la web de datatables y en los ejemplos tienes el código html. También tienes que descargarte el plugin (js y css) o puedes usar más facil el link del CDN así no tienes que descargarte nada.

Ahora bien, para montarlo todo, el primer código es una función; deberías de tener un archivo que recoja las funciones que usas en tu web, puedes crear una clase functions así llamas facilmente tus funciones desde cualquier parte de tu web. El segundo código va en un archivo a parte, crea un archivo llamado get.php y ahí vás poniendo los distintos get que necesites:

Código
  1. $op = isset( $_GET['op'] ) ? (int) $_GET['op'] : 0;
  2.  
  3. if ($op === 1) {
  4.    // primer get
  5. }
  6.  
  7. if ($op === 2) {
  8.    // segundo get
  9. }
  10.  
  11. // etc...

Basicamente lo que hacen los get es llamar a una función que devuelve datos, por ejemplo si necesitas llenar una lista de paises, ciudades, etc pues creas la funcion y haces un get con ajax jquery a la url (/get.php?op=1 o 2 o 3...) y así llenas las listas de manera dinamica, en este caso la tabla que necesitas.