Import CSV file to Mysql

Asked

Viewed 523 times

1

I have a database with these two tables:

TABELA CONTRATO
id
contrato
pessoa_id

TABELA TITULO
id
titulo
valor
vencimento
contrato_id

I need to import the column contrato, retrieve the ID of the inserted contract and then import the columns título, valor and vencimento, which will be related to the contract.

Code:

public function upload_file()
{
    $csv_mimes = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv');
    if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'],$csv_mimes))
    {
        if(is_uploaded_file($_FILES['file']['tmp_name']))
        {               
            // abrir arquivo csv no modo somente leitura
            $csv_file = fopen($_FILES['file']['tmp_name'], 'r');                
            // pula a primeira linha
            // se o seu arquivo csv não tiver título, apenas comente a próxima linha
            fgetcsv($csv_file);             
            // analisa dados do arquivo csv linha por linha
            // separado por virgula
            // while(($line = fgetcsv($csv_file)) !== FALSE){
            // separado por ponto e virgula 
            while(($line = fgetcsv($csv_file,null,';')) !== FALSE)
            {
                //print_r($line);
                // verifique se a pessoa já existe no banco de dados com o mesmo cpf_cnpj
                $result = $this->db->get_where("pessoa", array("cpf_cnpj"=>$line[0]))->result();

                if(count($result) > 0)
                {
                    foreach ($result as $r)
                    {
                        $pessoa_id = $r->id;
                        $cpf_cnpj  =  $line[0];
                        $update = [
                            'cpf_cnpj' => $line[0],
                            'nome'     => $line[1],
                        ];
                        $this->db->update('pessoa', $update, array('cpf_cnpj' => $line[0]));

                        $update_phone = [
                            'telefone'   => $line[3]
                        ];

                        $update_email = [
                            'email'   => $line[2]
                        ];

                        $this->db->update('telefone', $update_phone, array('pessoa_id' => $pessoa_id));
                        $this->db->update('email', $update_email, array('pessoa_id' => $pessoa_id));
                    }
                }
                else
                {
                    // pessoa -> desenvolvido
                    $pessoa = [
                            'cpf_cnpj' => $line[0],
                            'nome'     => $line[1]
                    ];
                    $this->db->insert('pessoa', $pessoa);
                    $pessoa_id = $this->db->insert_id();

                    // pessoa -> desenvolvido
                    $email = [
                            'email'     => $line[2],
                            'pessoa_id' => $pessoa_id
                    ];
                    $this->db->insert('email', $email);

                    // pessoa -> desenvolvido               
                    $telefone = [
                            'telefone'  => $line[3],
                            'pessoa_id' => $pessoa_id
                    ];
                    $this->db->insert('telefone', $telefone);

                    // contrato -> em desenvolvimento
                    $contrato = [
                            'contrato'  => $line[4],
                            'pessoa_id' => $pessoa_id
                    ];
                    $this->db->insert('contrato', $contrato);
                    $contrato_id = $this->db->insert_id();

                    // titulo -> em desenvolvimento
                    $titulo = [
                            'titulo'      => $line[5],
                            'valor'       => $line[6],
                            'vencimento'  => $line[7],
                            'contrato_id' => $contrato_id
                    ];
                    $this->db->insert('titulo', $titulo);
                }
            }

            // feche o arquivo csv aberto
            fclose($csv_file);
            $qstring["status"] = 'Sucesso';
        }
        else
        {
            $qstring["status"] = 'Erro';
        }
    }
    else
    {
        $qstring["status"] = 'Arquivo Inválido';
    }
    $this->load->view('csvToMySQL',$qstring);
}

CSV:

inserir a descrição da imagem aqui

1 answer

0


Maybe there’s an easier way, I believe there is, but I got it this way:

public $contrato_id = 0;
public function upload_file()
{       
    $csv_mimes = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv');
    if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'],$csv_mimes))
    {
        if(is_uploaded_file($_FILES['file']['tmp_name']))
        {               
            // abrir arquivo csv no modo somente leitura
            $csv_file = fopen($_FILES['file']['tmp_name'], 'r');                
            // pula a primeira linha
            // se o seu arquivo csv não tiver título, apenas comente a próxima linha
            fgetcsv($csv_file);             
            // analisa dados do arquivo csv linha por linha
            // separado por virgula
            // while(($line = fgetcsv($csv_file)) !== FALSE){
            // separado por ponto e virgula 
            while(($line = fgetcsv($csv_file,null,';')) !== FALSE)
            {
                //print_r($line);
                // verifique se a pessoa já existe no banco de dados com o mesmo cpf_cnpj
                $result = $this->db->get_where("pessoa", array("cpf_cnpj"=>$line[0]))->result();

                if(count($result) > 0)
                {
                    foreach ($result as $r)
                    {
                        $pessoa_id = $r->id;
                        $cpf_cnpj  =  $line[0];
                        $update = [
                            'cpf_cnpj' => $line[0],
                            'nome'     => $line[1],
                        ];
                        $this->db->update('pessoa', $update, array('cpf_cnpj' => $line[0]));

                        $update_phone = [
                            'telefone'   => $line[3]
                        ];

                        $update_email = [
                            'email'   => $line[2]
                        ];

                        $this->db->update('telefone', $update_phone, array('pessoa_id' => $pessoa_id));
                        $this->db->update('email', $update_email, array('pessoa_id' => $pessoa_id));
                    }
                }
                else
                {
                    // pessoa -> desenvolvido
                    $pessoa = [
                            'cpf_cnpj' => $line[0],
                            'nome'     => $line[1]
                    ];
                    $this->db->insert('pessoa', $pessoa);
                    $pessoa_id = $this->db->insert_id();

                    // pessoa -> desenvolvido
                    $email = [
                            'email'     => $line[2],
                            'pessoa_id' => $pessoa_id
                    ];
                    $this->db->insert('email', $email);

                    // pessoa -> desenvolvido               
                    $telefone = [
                            'telefone'  => $line[3],
                            'pessoa_id' => $pessoa_id
                    ];
                    $this->db->insert('telefone', $telefone);                       

                    $contrato = [
                        'contrato'  => $line[4],
                        'pessoa_id' => $pessoa_id
                    ];
                    $this->db->insert('contrato', $contrato);
                    $this->contrato_id = $this->db->insert_id();
                }                       

                // contrato->titulo -> desenvolvido
                $result_ctt = $this->db->get_where('contrato', array('contrato'=>$line[4], 'pessoa_id'=>$pessoa_id))->result();

                if(count($result_ctt) > 0)
                {
                    foreach ($result_ctt as $ctt)
                    {
                        $result_tit = $this->db->get_where('titulo', array('titulo'=>$line[5], 'contrato_id'=>$ctt->id))->result();
                        if (count($result_tit) == 0) {
                            $titulo = [
                                'titulo'      => $line[5],
                                'valor'       => $line[6],
                                'vencimento'  => $line[7],
                                'contrato_id' => $ctt->id
                            ];
                            $this->db->insert('titulo', $titulo);
                        }
                    }
                }
            }

            // feche o arquivo csv aberto
            fclose($csv_file);
            $qstring["status"] = 'Sucesso';
        }
        else
        {
            $qstring["status"] = 'Erro';
        }
    }
    else
    {
        $qstring["status"] = 'Arquivo Inválido';
    }
    $this->load->view('csvToMySQL',$qstring);
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.