sql >> Base de Datos >  >> RDS >> Mysql

Cómo importar y exportar archivos CSV usando PHP y MySQL

PHP se usa ampliamente para crear una amplia gama de productos que van desde aplicaciones web hasta aplicaciones de nivel empresarial. La clave para un código PHP eficiente es seguir los flujos de trabajo adecuados y automatizar los procesos. El resultado es un código de alta calidad y libre de errores.

En casi todas las aplicaciones PHP, los datos se almacenan, acceden e intercambian entre varios componentes de la aplicación. Para asegurarse de que este intercambio y acceso a los datos se realice sin problemas y sin problemas, el equipo de desarrollo debe asegurarse de que las bases de datos y los volcados de datos estén en el formato adecuado.

La importación y exportación de datos hacia y desde bases de datos es un procedimiento bastante común en el desarrollo de PHP. Otra actividad importante es la copia de seguridad y transferencia de bases de datos.

En este artículo, explicaré cómo guardar tablas de archivos CSV en MySQL y viceversa. Debe registrarse en Cloudways para iniciar un servidor y una aplicación PHPstack. Antes de registrarse, ver todas las opciones de precios de los proveedores de alojamiento de clase mundial como AWS, DigitalOcean, Linode, Vultr y GCP es una buena idea para que pueda encontrar la que mejor se adapte a sus necesidades.

Alojamiento PHP:el mejor alojamiento web PHP 7 y PHP 5.6

Crear una base de datos en MySQL

El primer paso en este tutorial es la creación de una base de datos MySQL. Dado que Cloudways proporciona el administrador mysql personalizado en la plataforma que contiene una base de datos para la aplicación. puede crear tablas ejecutando consultas SQL. Crear una tabla `infompleado` en la base de datos usando la siguiente consulta SQL.

CREATE TABLE employeeinfo(
emp_id VARCHAR(50) UNSIGNED PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date VARCHAR(50)
)

Esto creará una nueva tabla `employeeinfo` en la base de datos Usaré esta tabla para insertar datos del archivo CSV.


Deje de perder el tiempo en los servidores

Cloudways maneja la administración del servidor por usted para que pueda concentrarse en crear excelentes aplicaciones y mantener contentos a sus clientes.

Empezar gratis

Crear conexión MySql en PHP

Para importar y exportar la base de datos en MySql, creará un archivo separado `config.php`. Agregue el siguiente código y reemplace las credenciales de la base de datos con las suyas. Puede encontrar sus credenciales de base de datos en Detalles de acceso a la aplicación:

<?php
function getdb(){
$servername = "localhost";
$username = "huscqxzwaw";
$password = "2WWKxxxxHr";
$db = "huscqxzwaw";

try {
   
    $conn = mysqli_connect($servername, $username, $password, $db);
     //echo "Connected successfully"; 
    }
catch(exception $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
    return $conn;
}
?>

Relacionado: Cómo conectar una base de datos MySQL con sitios web PHP

Importar CSV a MySQL en PHP

Una vez creada la base de datos, necesito un archivo HTML que pueda cargar un archivo CSV. Para este archivo HTML, usaré el cargador de archivos HTML en un formulario de arranque simple.

Cree un archivo y asígnele el nombre `index.php`  . Este es un formulario simple para cargar un archivo CSV. Este archivo también mostrará los resultados en una tabla simple en la misma página. Cuando el usuario envía el formulario, todos los registros se guardarán en la base de datos.

Primero, agregaré Bootstrap CDN a index.php .

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script>

A continuación, en el `cuerpo` etiqueta,  agregue el siguiente código HTML para el formulario de Bootstrap.

<!DOCTYPE html>
<html lang="en">

<head>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" crossorigin="anonymous">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" crossorigin="anonymous">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script>

</head>

<body>
    <div id="wrap">
        <div class="container">
            <div class="row">

                <form class="form-horizontal" action="functions.php" method="post" name="upload_excel" enctype="multipart/form-data">
                    <fieldset>

                        <!-- Form Name -->
                        <legend>Form Name</legend>

                        <!-- File Button -->
                        <div class="form-group">
                            <label class="col-md-4 control-label" for="filebutton">Select File</label>
                            <div class="col-md-4">
                                <input type="file" name="file" id="file" class="input-large">
                            </div>
                        </div>

                        <!-- Button -->
                        <div class="form-group">
                            <label class="col-md-4 control-label" for="singlebutton">Import data</label>
                            <div class="col-md-4">
                                <button type="submit" id="submit" name="Import" class="btn btn-primary button-loading" data-loading-text="Loading...">Import</button>
                            </div>
                        </div>

                    </fieldset>
                </form>

            </div>
            <?php
               get_all_records();
            ?>
        </div>
    </div>
</body>

</html>

Puede notar que he establecido una acción en `functions.php` expediente. En el siguiente paso, crearé este archivo y le agregaré código. También incluí un método `get_all_records()` cerca del final del archivo. Este método obtiene todos los registros de la base de datos y los muestra en la tabla de la página de índice.

A continuación, crearé `functions.php` archivo y agregue el siguiente código en él.

<?php


 if(isset($_POST["Import"])){
		
		$filename=$_FILES["file"]["tmp_name"];		


		 if($_FILES["file"]["size"] > 0)
		 {
		  	$file = fopen($filename, "r");
	        while (($getData = fgetcsv($file, 10000, ",")) !== FALSE)
	         {


	           $sql = "INSERT into employeeinfo (emp_id,firstname,lastname,email,reg_date) 
                   values ('".$getData[0]."','".$getData[1]."','".$getData[2]."','".$getData[3]."','".$getData[4]."')";
                   $result = mysqli_query($con, $sql);
				if(!isset($result))
				{
					echo "<script type=\"text/javascript\">
							alert(\"Invalid File:Please Upload CSV File.\");
							window.location = \"index.php\"
						  </script>";		
				}
				else {
					  echo "<script type=\"text/javascript\">
						alert(\"CSV File has been successfully Imported.\");
						window.location = \"index.php\"
					</script>";
				}
	         }
			
	         fclose($file);	
		 }
	}	 


 ?>

Cuando la subida se hace clic en el botón, el nombre del archivo temporal se almacenará en la memoria y se usará `while` loop los datos se guardan en $getData variable. Una vez que se ha completado el proceso, los datos se ordenan por columnas y finalmente se insertan en `employeeinfo` mesa.

Tenga en cuenta que `fgetcsv()` analiza líneas del archivo abierto, buscando campos CSV y `fopen()` abre un archivo o una URL. Este código podría probarse importando un archivo CSV con datos de prueba.

Mostrar los registros guardados

Una vez que se haya importado el archivo CSV, mostraré los datos a través de una función simple, `get_all_records()`, inicializado en `index.php`. Copie esta función en `function.php` .

function get_all_records(){
    $con = getdb();
    $Sql = "SELECT * FROM employeeinfo";
    $result = mysqli_query($con, $Sql);  


    if (mysqli_num_rows($result) > 0) {
     echo "<div class='table-responsive'><table id='myTable' class='table table-striped table-bordered'>
             <thead><tr><th>EMP ID</th>
                          <th>First Name</th>
                          <th>Last Name</th>
                          <th>Email</th>
                          <th>Registration Date</th>
                        </tr></thead><tbody>";


     while($row = mysqli_fetch_assoc($result)) {

         echo "<tr><td>" . $row['emp_id']."</td>
                   <td>" . $row['firstname']."</td>
                   <td>" . $row['lastname']."</td>
                   <td>" . $row['email']."</td>
                   <td>" . $row['reg_date']."</td></tr>";        
     }
    
     echo "</tbody></table></div>";
     
} else {
     echo "you have no records";
}
}

En este método realmente simple, simplemente seleccioné todos los registros y los mostré en la página de índice a través del método. Siempre que el usuario cargue un archivo CSV, los registros se guardarán en la tabla y luego se mostrarán en la página de índice.

Exportar MySQL a CSV con PHP

Exportar datos de la base de datos MySQL a un archivo CSV es igualmente muy fácil. Para demostrar esto, usaré el index.php que creé antes.

Agregue el siguiente código al archivo.

 <div>
            <form class="form-horizontal" action="functions.php" method="post" name="upload_excel"   
                      enctype="multipart/form-data">
                  <div class="form-group">
                            <div class="col-md-4 col-md-offset-4">
                                <input type="submit" name="Export" class="btn btn-success" value="export to excel"/>
                            </div>
                   </div>                    
            </form>           
 </div>

Después de agregar este marcado HTML, el Exportar  El botón aparecerá debajo de la tabla. Ahora agregue la siguiente condición en functions.php.

 if(isset($_POST["Export"])){
		 
      header('Content-Type: text/csv; charset=utf-8');  
      header('Content-Disposition: attachment; filename=data.csv');  
      $output = fopen("php://output", "w");  
      fputcsv($output, array('ID', 'First Name', 'Last Name', 'Email', 'Joining Date'));  
      $query = "SELECT * from employeeinfo ORDER BY emp_id DESC";  
      $result = mysqli_query($con, $query);  
      while($row = mysqli_fetch_assoc($result))  
      {  
           fputcsv($output, $row);  
      }  
      fclose($output);  
 }  

Cuando `Exportar`  se hace clic en el botón, los encabezados `Content-Type:text/csv` con un archivo adjunto `data.csv` se ha enviado.

Desde `php://salida` es un flujo de solo escritura que permite el acceso de escritura al mecanismo de búfer de salida, seleccioné todos los datos de la tabla en la siguiente línea y los pasé a `fputcsv()`  método. Este método formatea una línea (pasada como una matriz de campos) como CSV y la escribe (terminada por una nueva línea) en el archivo especificado. Finalmente, se descarga el archivo con todos los datos deseados.

Finalmente, después de integrar todo el código, verá la siguiente forma final de aplicación.

También te puede interesar: CRUD simple en PHP y MySQL

Conclusión

En este artículo, discutí cómo podría exportar datos desde y hacia archivos CSV usando PHP y MySQL. Este es un ejemplo simple en el que puede agregar una lógica y validaciones más complejas según sus requisitos. También puede crear casos de prueba para verificar el código e integrarlo con GitHub utilizando las herramientas de integración continua de PHP. Si desea participar en la discusión o le gustaría hacer una pregunta, deje un comentario a continuación.

Preguntas frecuentes

¿Cómo importo y exporto CSV usando php y MySQL?

  • Aprobar el registro enviado, ya sea un archivo CSV sustancial.
  • Inspeccione el estado de transferencia del archivo CSV utilizando la función PHP is_uploaded_file().
  • Acceda al archivo CSV utilizando la función PHP fopen().
  • Analice los datos del registro CSV utilizando la función PHP fgetcsv().
  • Insertar o actualizar datos en la base de datos según el correo electrónico del miembro.