Tabla de contenidos
Preparamos la consulta SQL
SELECT dni,nombre,apellidos,telefono,email FROM clientes;
Preparamos nuestro fichero PHP
Paso 1: Nos conectamos a la Base de Datos
<?php
//Función para conectarnos con la BBDD
function conectar(){
// Rellenamos todos los datos para conectarnos a la BBDD
$x=new mysqli(
"", // URL
"", // Usuario
"", // Clave
"" // Nombre
);
//En caso de haber un error de conexión a la BBDD...
if ($x->connect_errno){
//Salimos de la conexión con el error
die ("Error: ".$x->mysqli_connect_errno().$x->mysqli_connect_error());
exit();
}
return $x;
}
?>
Paso 2: Añadimos la consulta SQL que hemos preparado
//Nos conectamos a SQL $c=conectar(); // Creamos la consulta que tenemos arriba para verla en PHP y en CSV $consulta=$c->query("SELECT dni,nombre,apellidos,telefono,email FROM clientes");
Paso 3: Preparamos el formulario de Exportar SQL a CSV (Excel) y la tabla para mostrar los registros.
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="<?php echo $_SERVER[“PHP_SELF”]; ?>" method="post">
<button type="submit" id="export_data" name="exportarCSV" value="Export to excel" class="btn btn-info">Exportar a Excel (CSV)</button>
</form>
<table>
<thead>
<tr>
<th>DNI</th>
<th>Nombre</th>
<th>Apellidos</th>
<th>Teléfono</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php
while($cliente=$consulta->fetch_array()){
echo '<tr>';
echo '<td>'.$cliente['idtienda'].'</td>';
echo '<td>'.$cliente['nombre'].'</td>';
echo '<td>'.$cliente['direccion'].'</td>';
echo '<td></td>';
echo '<td></td>';
echo '</tr>';
}
?>
</tbody>
</table>
</body>
</html>
Paso 4: Llega la magia de exportar SQL a CSV.
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=".$ficheroExcel);
\n
:
echo "idtienda;nombre;direccion\n";
exit;
//Si hemos pulsado al botón de Exportar a Excel (CSV)...
if(isset($_POST["exportarCSV"])) {
if(!empty($consulta)) {
//El nombre del fichero tendrá el nombre de "usuarios_dia-mes-anio hora_minutos_segundos.csv"
$ficheroExcel="usuarios ".date("d-m-Y H_i_s").".csv";
//Indicamos que vamos a tratar con un fichero CSV
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=".$ficheroExcel);
// Vamos a mostrar en las celdas las columnas que queremos que aparezcan en la primera fila, separadas por ;
echo "idtienda;nombre;direccion\n";
// Recorremos la consulta SQL y lo mostramos
while($cliente=$consulta->fetch_array()){
echo $cliente['idtienda'].";";
echo $cliente['nombre'].";";
echo $cliente['direccion']."\n";
}
}else{
echo "No hay datos a exportar";
}
//Para que se cree el Excel correctamente, hay que añadir la sentencia exit;
exit;
}
Y así quedaría nuestro fichero CSV
<?php
//Función para conectarnos con la BBDD
function conectar(){
// Rellenamos todos los datos para conectarnos a la BBDD
$x=new mysqli(
"", // URL
"", // Usuario
"", // Clave
"" // Nombre
);
//En caso de haber un error de conexión a la BBDD...
if ($x->connect_errno){
//Salimos de la conexión con el error
die ("Error: ".$x->mysqli_connect_errno().$x->mysqli_connect_error());
exit();
}
return $x;
}
//Nos conectamos a SQL
$c=conectar();
// Creamos la consulta que va a compartir la visualización en PHP y en CSV
$consulta=$c->query("SELECT idtienda,nombre,direccion FROM tiendas order by idtienda desc limit 3 ");
//Si hemos pulsado al botón de Exportar a Excel (CSV)...
if(isset($_POST["exportarCSV"])) {
if(!empty($consulta)) {
//El nombre del fichero tendrá el nombre de "usuarios_dia-mes-anio hora_minutos_segundos.csv"
$ficheroExcel="usuarios ".date("d-m-Y H_i_s").".csv";
//Indicamos que vamos a tratar con un fichero CSV
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=".$ficheroExcel);
// Vamos a mostrar en las celdas las columnas que queremos que aparezcan en la primera fila, separadas por ;
echo "idtienda;nombre;direccion\n";
// Recorremos la consulta SQL y lo mostramos
while($cliente=$consulta->fetch_array()){
echo $cliente['idtienda'].";";
echo $cliente['nombre'].";";
echo $cliente['direccion']."\n";
}
}else{
echo "No hay datos a exportar";
}
//Para que se cree el Excel correctamente, hay que añadir la sentencia exit;
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="<?php echo $_SERVER[“PHP_SELF”]; ?>" method="post">
<button type="submit" id="export_data" name="exportarCSV" value="Export to excel" class="btn btn-info">Exportar a Excel (CSV)</button>
</form>
<table>
<thead>
<tr>
<th>DNI</th>
<th>Nombre</th>
<th>Apellidos</th>
<th>Teléfono</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php
while($cliente=$consulta->fetch_array()){
echo '<tr>';
echo '<td>'.$cliente['idtienda'].'</td>';
echo '<td>'.$cliente['nombre'].'</td>';
echo '<td>'.$cliente['direccion'].'</td>';
echo '<td></td>';
echo '<td></td>';
echo '</tr>';
}
?>
</tbody>
</table>
</body>
</html>
¿Te ha gustado el artículo?
Te recomendamos que eches un vistazo a los siguientes artículos relacionados con PHP , te podrán servir de gran ayuda 😉
4 comentarios en “Exportar SQL a CSV (Excel) en PHP”
Por qué puede ser que no funcione? esta todo perfecto, pero al momento de exportar me lleva a una pagina que dice que la pagina no existe, no se por qué puede ser. tampoco me descarga el archivo excel. Todo raro. que problema puedo tener? la pagina tiene que estar necesariamente subida para que se descargue el archivo? gracias!
Hola Natacha,
Si, al ser un fichero PHP, tiene que subirse a un hosting o a un servidor local (por ejemplo XAMPP).
Un saludo.
Hola, gracias por tu aporte, me funcionó, sólo hay un detalle que no entiendo, revisé el FTP y se generó un error_log que dice lo siguiente:
PHP Warning: Use of undefined constant “PHP_SELF” – assumed ‘“PHP_SELF”’ (this will throw an Error in a future version of PHP) in line 58
Y la línea 58 es donde está el form action:
<form action="» method=»post»>
Espero que puedas aclarar mi duda, gracias!!
Buenos días Isabel,
Tienes un error en las dobles comillas del action y del method, hay que poner las dobles comillas sin la cursiva.
Espero haberte resuelto el error.
Un saludo.