Jump to content
WagnerFilho

Importar csv para duas tabelas MYSQL - Codeigniter

Recommended Posts

Olá, com a simples função abaixo, consigo importar dados para uma tabela do mysql.

A questão é que a coluna telefone ficará em outra tabela e da forma que está hoje, só consigo importar para a mesma tabela.

Como posso fazer para importar as colunas de um arquivo csv para uma tabela e a coluna telefone importar para outra tabela ?

 

public function upload_file(){
    $tipo = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv');
    if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'],$tipo)){
        if(is_uploaded_file($_FILES['file']['tmp_name'])){

            // abre o arquivo csv carregado com o modo somente leitura
            $arquivo = fopen($_FILES['file']['tmp_name'], 'r');

            // pula a primeira linha
            // se o arquivo csv não tiver cabeçalho, apenas comente a próxima linha
            fgetcsv($arquivo);

            // analisar dados do arquivo csv linha por linha
            while(($coluna = fgetcsv($arquivo)) !== FALSE){
                // verifica se o membro já existe no banco de dados com o mesmo email
                $result = $this->db->get_where("tb_pessoa", array("email"=>$coluna[1]))->result();
                if(count($result) > 0){
                    // atualiza os dados da pessoa
                    $this->db->update("tb_pessoa", array("nome"=>$coluna[0], "telefone"=>$coluna[2], "dt_inclusao"=>$coluna[3], "status"=>$coluna[4]), array("email"=>$coluna[1]));
                }else{
                    // inserir dados da pessoa no banco de dados
                    $this->db->insert("tb_pessoa", array("nome"=>$coluna[0], "email"=>$coluna[1], "telefone"=>$coluna[2], "dt_inclusao"=>$coluna[3], "status"=>$coluna[4]));
                }
            }

            //close opened csv file
            fclose($arquivo);

            $qstring["status"] = 'Success';
        }else{
            $qstring["status"] = 'Error';
        }
    }else{
        $qstring["status"] = 'Invalid file';
    }
    $this->load->view('csvToMySQL',$qstring);
}

 

 

tabelas

tb_pessoa
nome varchar(100) NOT NULL
email varchar(100) NOT NULL
telefone varchar(100) NOT NULL
dt_inclusao timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
status varchar(100) NOT NULL

tb_telefone
telefone varchar(100) NOT NULL
pessoa_id int(11) NOT NULL

Share this post


Link to post
Share on other sites
Citar

 

Não é possível fazer múltiplos inserts através de um statement, porém dentro de uma transaction sim:


BEGIN TRANSACTION
   INSERT INTO Tabela1 (Coluna1, ...) VALUES (....);
   INSERT INTO Tabela2 VALUES (..., LAST_INSERT_ID());
COMMIT

Fonte: https://pt.stackoverflow.com/questions/107739/fazer-insert-em-duas-tabelas-ao-mesmo-tempo

 

 

Creio que este método possa resolver seu problema.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Caio Vargas
      Fala pessoa tudo tranquilo ?
      estou com um problema eu fiz um sistema de upload onde tem a marca dagua  o problema e que quando o cadastro da capa e pequena a imagem da marca dagua fica grande
      e qauando a capa e grande  a imagem da marca dagua fica pequena alguem poderia me ajudar 
    • By klasss
      Olá a todos, 

      Tenho aqui um erro parvo não estou a ver como resolver . 

      Na minha View tenho um botão que será para fazer a aprovação de documentos , que abre uma modal para fazer a confirmação : 
      O problema é que quis fazer a mesma coisa para rejeitar. 
       
      <a href="{{route('despesas.modal', $item)}}" ><i class="fas fa-check text-info mr-1"></i></a> <a href="{{route('despesas.modal2', $item)}}" ><i class="fas fa-ban text-danger mr-1"></i></a> <?php if(@$id != ""){ echo "<script>$('#modalaceitar').modal('show');</script>"; } ?> <?php if(@$id != ""){ echo "<script>$('#modalrejeitar').modal('show');</script>"; } ?> Será que consigo validar por exemplo criando um ID nos dois botões?  
       
      Obrigado!
    • By Negrito
      Olá Pessoal, 
       
      Converti o banco de dados de uma app em ASP Classico de MSSQL para MySQL para redução de custos e percebi que alguns componentes ou recursos não estão mais funcionando devido a não compatibilidade com o MySQL , como por exemplo a função : RecordCount
       
      Já consegui converter e atualizar 95% de aplicação para rodar com o MySQL, mas tem 1 item que esta tirando meu sono e após dias pesquisando, resolvi pedir ajuda.
       
      Segue o meu codigo abaixo , onde estou com problema no resultado dessa operação:
       
      <%
      ...
      Set RS = Server.CreateObject("ADODB.Recordset")
      RS.CursorLocation = 3
      RS.CursorType = 3
      RS.ActiveConnection = Cn
      RS.Open strSQL, Cn, 3, 3
      RS.PageSize = 25
      RS.CacheSize = RS.PageSize
      intPageCount = RS.PageCount
      intRecordCount = RS.RecordCount
          If NOT (RS.BOF AND RS.EOF) Then
      If CInt(intPage) > CInt(intPageCount) Then intPage = intPageCount
          If CInt(intPage) <= 0 Then intPage = 1
              If intRecordCount > 0 Then
                  RS.AbsolutePage = intPage
                  intStart = RS.AbsolutePosition
                  If CInt(intPage) = CInt(intPageCount) Then
                      intFinish = intRecordCount
                  Else
                      intFinish = intStart + (RS.PageSize - 1)
                  End if
              End If
          If intRecordCount > 0 Then
              For intRecord = 1 to RS.PageSize
          QntExibicoes = QntExibicoes + Rs.fields("views")
      ...
      %>
       
       
      Já percebi que a função RecordCount não pode ser usada com o MySQL ou pelo menos não é compativel.
       
      A paginação esta funcionando ! 
      Porem , não consigo fazer ele calcular a quantidade de linhas (rows) do MySQL com a função RecordCount e acredito que possa ter alguma outra função que não esta compativel , mas como não conheço MySQL , não posso afirmar.
       
      Enfim, algum pode me dar uma luz ?
       
      Desde já agradeço pela atenção.
       
      Obrigado.
    • By Marcos RJ
      Bom dia, boa tarde, boa noite colegas.
       
      Tenho um projeto onde conterá diversos subdomínios. Ex.:
      empresa1.site.com.br empresa2.site.com.br empresa3.site.com.br Esses subdomínios acessarão o sistema que está dentro do seguinte diretório:
      site.com.br/sistema/ Gostaria de fazer com que os subdomínios acessassem o sistema sem alterar a url, pois o objetivo é quando fizer quaisquer alterações e/ou inclusões de novos recursos, não tenhamos a necessidade de fazer isso dentro de todos os subdomínios, haja vista que serão dezenas ou até mesmo centenas de subdomínios. As minhas tentativas foram diretamente no .htaccess:
      RewriteEngine on RewriteCond %{HTTP_HOST} ^empresa1.site.com$ [OR] RewriteCond %{HTTP_HOST} ^www.empresa1.site.com$ RewriteRule ^(.*) http://www.site.com/sistema/$1?key=empresa1 [P,L] E o PHP ficou dessa forma:
       
      $diretorio = $_REQUEST["key"]; if($directory != null){    require "http://".$diretorio.".site.com.br/sistema/class/conectCass.php"; }else{  require "conectClass.php";  } Mas não deu certo. Tentei diretamente pelo PHP, mas quando clico no link criado, ele me obriga que a página do link esteja dentro dos subdiretórios. Em cada subdomínio coloquei da seguinte forma:
      include 'sistema/'; E no index.php do diretório sistema/:
      $host = $_SERVER['SERVER_NAME']; $host = str_replace(['www.', '.site.com.br', 'site.com.br'], '', $host); if($host == '') {     // entra o conteúdo do sistema } else {     // Entra o conteúdo do subdomínio } Mas também não funcionou. Como eu poderia resolver isso?

      Muito obrigado!
    • By klasss
      Olá a todos, 

      Gostaria de saber se alguem conhece um layout para efetuar o registo de folha de ponto. 

      Algo do género :  Mês - Dias do mês em questão - Possibilidade de colocar as horas trabalhadas. 

      Deixo uma imagem de exemplo. 
      Obrigado!
       

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.