Importar datos CSV a la base de datos Mysql en Codeigniter

La importación masiva de datos csv a través de un archivo CSV es una de las características esenciales de cualquier aplicación web y reducirá el tiempo necesario para insertar datos uno por uno. Aquí queremos importar datos del archivo CSV a la base de datos Mysql en el marco Codeigniter. No hay una biblioteca para un archivo CSV …

Importar datos CSV a la base de datos Mysql en Codeigniter Leer más »

codeigniter logo

La importación masiva de datos csv a través de un archivo CSV es una de las características esenciales de cualquier aplicación web y reducirá el tiempo necesario para insertar datos uno por uno. Aquí queremos importar datos del archivo CSV a la base de datos Mysql en el marco Codeigniter. No hay una biblioteca para un archivo CSV en Codeigniter, pero revisamos Internet y encontramos una biblioteca llamada ‘csvimport’ que está diseñada para importar datos CSV a la aplicación Codeigniter. Así que hemos usado la biblioteca ‘csvimport’ para importar datos del archivo CSV a la base de datos Mysql en la aplicación Codeigniter.

Cuando importa datos masivos desde un archivo CSV y usa el marco Codeigniter para el desarrollo de aplicaciones web, puede usar el método insert_batch() de la biblioteca de Codeigniter Database. Al usar este enfoque en la ejecución de una sola consulta, podemos ejecutar múltiples consultas de datos de inserción. Entonces, al usar este método, podemos importar una gran cantidad de datos en muy poco tiempo, ya que al usar la biblioteca ‘csvimport’ , tenemos una matriz de datos de archivos CSV, y luego usamos insert_batch() para importar directamente todos datos en una sola consulta. Entonces, este es uno de los beneficios del marco Codeigniter si importa grandes datos.

En el código del artículo, usaremos la biblioteca ‘csvimport’ de CodeIgniter  para importar datos de usuario desde un archivo CSV a la base de datos. Para explicar la funcionalidad de CodeIgniter CSV Import, se implementará el siguiente proceso.

  • Obtener todos los datos del usuario de la base de datos y enumerados en la página web.
  • Formulario de carga de archivos CSV.
  • Analizar e importar datos CSV en la base de datos.

Eche un vistazo a la estructura de archivos antes de comenzar a implementar la importación de datos CSV en la base de datos en el marco CodeIgniter.

codeigniter_import_csv/

codeigniter_csv_import/
├── uploads/
├── application/
│  ├── config/
│  │   └── autoload.php
│  ├── controllers/
│  │   └── Users.php
│  ├── libraries/
│  │   └── csvimport.php
│  ├── models/
│  │   └── User.php
│  └── views/
│      └── users/
│          └── index.php
└── assets/
    ├── css/
    └── js/

Paso 1: formato de archivo CSV

El archivo CSV tendrá 4 campos: Nombre, Correo electrónico, Teléfono, Estado, según la estructura de su tabla de base de datos.

codeigniter-import-sample-csv-file-format

Paso 2: Crear tabla de base de datos

Copie y ejecute la siguiente consulta de la base de datos MySql para crear la tabla de «usuarios» para almacenar datos del archivo CSV.

CREATE TABLE `users` (

 `id` int(11) NOT NULL AUTO_INCREMENT,

 `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,

 `email` varchar(50) COLLATE utf8_unicode_ci NOT NULL,

 `phone` varchar(15) COLLATE utf8_unicode_ci NOT NULL,

 `created` datetime NOT NULL,

 `modified` datetime NOT NULL,

 `status` enum('Active','Inactive') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Active',

 PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Paso 3: config/ autoload.php

Defina la biblioteca y el asistente de uso común en el archivo config/autoload.php para que se cargue automáticamente en cada solicitud.

$autoload['libraries'] = array('database', 'session');

$autoload['helper'] = array('url');

Paso 4: bibliotecas/ csvimport.php

La biblioteca le permite leer un archivo CSV en la aplicación CodeIgniter y convertir datos CSV en una matriz. Puede importar datos del archivo CSV de CodeIgniter utilizando esta clase «csvimport» .

<?php

if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
* CodeIgniter CSV Import Class
*
* This library will help import a CSV file into
* an associative array.
*
* This library treats the first row of a CSV file
* as a column header row.
*
*
* @package         CodeIgniter
* @subpackage      Libraries
* @category        Libraries
* @author          Brad Stinson
*/

class Csvimport {

    var $fields;/** columns names retrieved after parsing */
    var $separator = ';';/** separator used to explode each line */
    var $enclosure = '"';/** enclosure used to decorate each field */
    var $max_row_size = 120400;/** maximum row size to be used for decoding */

    function parse_file($p_Filepath) {
        $file = fopen($p_Filepath, 'r');
        $this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure);
        $keys_values = explode(',', $this->fields[0]);
        $content = array();
        $keys = $this->escape_string($keys_values);
        $i = 1;
        while (($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false) {
            if ($row != null) { // skip empty lines
                $values = explode(',', $row[0]);
                if (count($keys) == count($values)) {
                    $arr = array();
                    $new_values = array();
                    $new_values = $this->escape_string($values);
                    for ($j = 0; $j < count($keys); $j++) {
                        if ($keys[$j] != "") {
                            $arr[$keys[$j]] = $new_values[$j];
                        }
                    }
                    $content[$i] = $arr;
                    $i++;
                }
            }
        }
        fclose($file);
        return $content;
    }

    function escape_string($data) {
        $result = array();
        foreach ($data as $row) {
            $result[] = str_replace('"', '', $row);
        }
        return $result;
    }
}

Paso 5: controladores/ Usuarios.php

El controlador de Usuarios maneja el proceso de importación de datos CSV.

__construct()  : carga la biblioteca requerida (csvimport), ayudante (archivo) y modelo (usuario).

index()  : enumera los datos de los usuarios.

import ()  : importa datos de archivos CSV o Excel a la base de datos.

<?php

class Users extends CI_Controller {

    var $mycsv;

    public function __construct() {
        parent::__construct();
        $this->load->model('user');
        $this->mycsv = $this->load->library('csvimport');
        $this->load->helper('file');
    }

    public function index(){
        $data = array();
        // Get rows
        $data['users'] = $this->user->getAllUsers();
        // Load the list page view
        $this->load->view('users/index', $data);
    }

    public function import() {
            $path = FCPATH . "uploads/";
            $config['upload_path'] = $path;
            $config['allowed_types'] = 'csv';
            $config['max_size'] = 1024000;
            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            if (!$this->upload->do_upload('file')) {
                $error = $this->upload->display_errors();
                $this->session->set_flashdata('error', $this->upload->display_errors());
                redirect("users");
                //echo $error['error'];
            } else {
               $file_data = $this->upload->data();
                $file_path = base_url() . "uploads/" . $file_data['file_name'];
                $csv_data = $this->mycsv->parse_file($file_path);
              // Add created and modified date if not include
                $date = date("Y-m-d H:i:s");
                if ($csv_data) {
                    foreach ($csv_data as $row) {
                        $insert_data[] = array(
                            'name' => $row['Name'],
                                'email' => $row['Email'],
                                'phone' => $row['Phone'],
                                'status' => $row['Status'],
                                'created' => $date,
                                'modified' => $date,
                        );
                    }
              $this->user->insert_user($insert_data);
              $this->session->set_flashdata('success', "Csv imported successfully");
                    redirect("users");
                } else {
                    $data['error'] = "Error occured";
                    $this->session->set_flashdata('error', $data['error']);
                    redirect("users");
                }
            }
        }
}

Paso 6: modelos/Usuario.php

El modelo de Usuario maneja los trabajos relacionados con la base de datos (Buscar e Insertar).

<?php

class User extends CI_Model {

    public function __construct() {
        $this->load->database();
    }

    /*
     * Insert users data into the database
     * @param $data data to be insert based on the passed parameters
     */
 
   function insert_user($data) {
        $this->db->insert_batch('users', $data);
    }

   function getAllUsers() {
          $result = $this->db->get('users');
        return $result->result_array();
    }

Paso 7: Ver/ usuarios/index.php

Aquí, todos los datos del usuario existente se obtienen de la base de datos y se enumeran en la página web.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>CodeIgniter CSV Import</title>
    <!-- Bootstrap library -->
    <link rel="stylesheet" href="<?php echo base_url('assets/css/bootstrap.min.css'); ?>">
    <!-- Stylesheet file -->
    <link rel="stylesheet" href="<?php echo base_url('assets/css/style.css'); ?>">
</head>
<body>
<div class="container">
    <h2>Users List</h2>
    <!-- Display status message -->
<?php if ($this->session->flashdata('success')) { ?>
    <div class="alert alert-success">
        <a href="#" class="close" data-dismiss="alert">&times;</a>
        <strong>Success!</strong> <?php echo $this->session->flashdata('success'); ?>
    </div>
<?php } elseif ($this->session->flashdata('error')) { ?>
    <div class="alert alert-danger">
        <a href="#" class="close" data-dismiss="alert">&times;</a>
        <strong>Error!</strong> <?php echo $this->session->flashdata('error'); ?>
    </div>
<?php }
?>
    <div class="row">
        <!-- File upload form -->
        <div class="col-md-12" id="importFrm">
            <form action="<?php echo base_url('users/import'); ?>" method="post" enctype="multipart/form-data">
                <input type="file" name="file" />
                <input type="submit" class="btn btn-primary" name="importSubmit" value="IMPORT">
            </form>
        </div>
        <!-- Data list table -->
        <table class="table table-striped table-bordered">
            <thead class="thead-dark">
                <tr>
                    <th>#ID</th>
                    <th>Name</th>
                    <th>Email</th>
                    <th>Phone</th>
                    <th>Status</th>
                </tr>
            </thead>
            <tbody>
                <?php if(!empty($users)){ foreach($users as $row){ ?>
                <tr>
                    <td><?php echo $row['id']; ?></td>
                    <td><?php echo $row['name']; ?></td>
                    <td><?php echo $row['email']; ?></td>
                    <td><?php echo $row['phone']; ?></td>
                    <td><?php echo $row['status']; ?></td>
                </tr>
                <?php } }else{ ?>
                <tr><td colspan="5">No member(s) found...</td></tr>
                <?php } ?>
            </tbody>
        </table>
    </div>
</div>
</body>
</html>

Conclusión:

Sabemos cómo importar datos CSV en la tabla Mysql usando un script PHP si no lo sabe, siga el enlace anterior. Ahora, en esta publicación, hemos discutido este tema en Codeigniter Framework.

¿Desea obtener ayuda para la implementación, modificación o ampliar la funcionalidad de como Importar datos CSV a la base de datos MySQL en CodeIgniter 3? Enviar una solicitud de servicio pagado

Compartir

Sobre el autor

Scroll al inicio