Exportar datos a CSV con PHP y MySQL

Hace cosa de poco publicamos un artículo en el que te hablábamos sobre cómo exportar datos a Excel con PHP y MySQL, el cual se compartió por redes sociales a un ritmo trepidante. Muchos de vosotros, tras dicho tutorial, nos animastéis a escribir otro sobre cómo exportar datos a CSV mediante PHP y MySQL. El formato CSV (archivo en el que los valores se separan con un carácter concreto) es uno de los formatos de archivo más utilizados para exportar e importar información. Exportar datos en CSV es muy util debido a que permite a los usuarios guardar información para que puedan utilizarla de manera offline. En este tutorial te mostraremos cómo exportar datos en CSV con PHP y MySQL.

Una vez explicado esto, esta será la estructura de nuestro proyecto:

  • index.php
  • export.php

Crear tabla de la base de datos

Para abordar este tutorial necesitaremos un lugar desde donde extraer la información. Nosotros crearemos una tabla de ejemplo llamada developers, cuyo objetivo será exportarla a un fichero CSV.

CREATE TABLE `developers` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`skills` varchar(255) NOT NULL,
`address` varchar(255) NOT NULL,
`gender` varchar(255) NOT NULL,
`designation` varchar(255) NOT NULL,
`age` int(11) NOT NULL,
`image` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Logicamente, también insertaremos algunos registros para luego exportarlos...

INSERT INTO `developers` (`id`, `name`, `skills`, `address`, `gender`, `designation`, `age`, `image`) VALUES
(1, 'Smith', '', 'Newyork', 'Male', 'Software Engineer', 34, ''),
(2, 'Steve', '', 'London', 'Female', 'Web Developer', 28, ''),
(3, 'Jhon', '', 'Delhi, India', 'Male', 'Web Developer', 30, '');

Obtener los registros de la base de datos

Obtendremos los registros de la tabla developers de nuestra base de datos MySQL con PHP y los almacenaremos dentro de un array para mostrarlos y exportarlos a un fichero CSV.

$query = "SELECT name, gender, address, designation, age FROM developers LIMIT 10";
$result = mysqli_query($conn, $query) or die("database error:". mysqli_error($conn));
$records = array();
while( $rows = mysqli_fetch_assoc($result) ) {
$records[] = $rows;
}

Mostrar registros con el botón Export

Ahora en el fichero index.php, mostraremos los registros de la tabla developers con el botón export.

<div class="well-sm col-sm-12">
<div class="btn-group pull-right">
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<button type="submit" id="export_csv_data" name='export_csv_data' value="Export to CSV" class="btn btn-info">Export to CSV</button>
</form>
</div>
</div>
<table id="" class="table table-striped table-bordered">
<tr>
<th>Name</th>
<th>Gender</th>
<th>Age</th>
<th>Designation</th>
<th>Address</th>
</tr>
<tbody>
<?php foreach($records as $record) { ?>
<tr>
<td><?php echo $record ['name']; ?></td>
<td><?php echo $record ['gender']; ?></td>
<td><?php echo $record ['age']; ?></td>
<td><?php echo $record ['designation']; ?></td>
<td><?php echo $record ['address']; ?></td>
</tr>
<?php } ?>
</tbody>
</table>

Exportar datos a CSV con PHP

Finalmente en el fichero export.php, gestionaremos la funcionalidad de exportar los registros a un fichero CSV utilizando PHP.

if(isset($_POST["export_csv_data"])) {
$csv_file = "phpzag_csv_export_".date('Ymd') . ".csv";
header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename="$csv_file"");
$fh = fopen( 'php://output', 'w' );
$is_coloumn = true;
if(!empty($records)) {
foreach($records as $record) {
if($is_coloumn) {
fputcsv($fh, array_keys($record));
$is_coloumn = false;
}
fputcsv($fh, array_values($record));
}
fclose($fh);
}
exit;
}

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP