Ir para conteúdo
BryanSamuel

importação de xls ou csv para mysql

Recommended Posts

Eu gostaria de importar dados de uma planinha que esteja em .xls para mysql, por exemplo, tem uma página html simples onde o usuário vai enviar a planilha, e com isso eu quero importar para uma base de dados, mas tem um porém, por exemplo, tem uma coluna com o número da matrícula de cada aluno, eu gostaria de fazer uma verificação, para que se já existisse um aluno com a matrícula igual, atualizasse somente determinadas colunas, como por exemplo, a coluna turma e a coluna turno, eu sei que parece pedir demais mas eu sou bem novato em php e mysql, se alguém puder ajudar agradeço desde já, abraço. 

obs. de preferência, se tiver como importar direto de .xls eu agradeço, mas caso só de com .csv também serve

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para entender melhor, você quer que o usuário faça o upload do arquivo .xls no seu site e automaticamente cadastre os dados contidos no arquivo para o banco de dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para podermos te ajudar mais, seria interessante mandar uma base de um dos arquivos para vermos, o PHP pode ler os dados, ele organiza por linha todo conteúdo que entra, se colocar que na linha 1 terá o nome de todas as tabelas e nas demais os resultados, só faltará criar as rotas para adicionar o conteúdo.

$array = Array();
$file = fopen('caminho/arquivo.csv', 'r');
while (($line = fgetcsv($file)) !== false)
{
  $array[] = $line;
}
fclose($file);
var_dump($array);

Poderá usar esse código como base para inicio dos estudos

Boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já adiantando, vou dar um exemplo, eu tenho um arquivo csv nele contém 8 colunas, na primeira coluna é o id, na segunda o nome, na terceira o número da matrícula, na quarta a sala, na quinta a turma, na sexta o dia(por exemplo segunda feira), na sétima o horário e na oitava o professor.

Todas as linhas estão desta forma, iguais, desde a primeira linha só contém os dados, não tem um cabeçalho nem nada do tipo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu consigo importar o arquivo normalmente, eu salvo o diretório do arquivo no banco de dados e tudo mais, mas o que eu quero é pegar esse arquivo que eu salvei, pegar os dados e inserir no meu banco de dados.

Eu vou dar uma olhada nesse código, interpretar e tentar aplicar, obrigado de qualquer forma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu consegui importar com o seguinte código:

$tabela = "alunos"; //tabela do banco
		$arquivo = "$diretorio"; // aquivo a ver importado csv do execel

		$arq = fopen($arquivo,'r');// le o arquivo txt

		while(!feof($arq))
		for($i=0; $i<1; $i++){
		if ($conteudo = fgets($arq)){//se extrair uma linha e não for false
		@$ll++; // $ll recebe mais 1 ==== em quanto o existir linha sera somada aqui
		$linha = explode(';', $conteudo);// divide por coluna onde tiver ponto e virgula
		}

		$sql = "INSERT INTO $tabela (id, nome, matricula, sala, turma, dia, hora, professor) VALUES ('$linha[0]','$linha[1]','$linha[2]','$linha[3]','$linha[4]','$linha[5]','$linha[6]','$linha[7]')";
		$result = mysqli_query($con,$sql);
		$linha = array();// linpa o array de $linha e volta para o for
		}
		echo "quantidade de linhas importadas = ".$ll;

mas ele retorna erros na página, " Notice: Undefined offset: 0 in C:\wamp\www\importar_script.php on line 42" ;

 Até o offset:7.

Eu verifiquei, ele importou os dados corretamente mas isso pode acarretar em um problema posteriormente? tem algum erro no código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o próprio erro diz, isso é apenas um aviso de que o offset solicitado não foi encontrado !

Ele deve estar rodando o while em conteúdo nulo !

Lá no começo do while adicione a linha

<?php
if(!isset($linha) && $linha == NULL)
  continue;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por martinazzo
      Olá pessoal,
       
      sou novo por aqui e não sei bem como funciona, mas sei que preciso de uma ajuda kkkkk
      se puderem me dar uma mão ficaria grato;
       
      Estou tendo problemas em como pegar id de uma linha clicada em uma table, que já recebe os dados de um bd. Eu gostaria de poder editar os campos e salvar no banco de dados usando o ID da linha clicada;
       
      Vou colar o código abaixo, não reparem na bagunça kkkkk
       
      conexao.php
       
      <?php
      $server = "XXXXX";         Conferido e esta correto;
      $username = "XXXXX";  Conferido e esta correto;
      $password = "XXXXX";  Conferido e esta correto;
      $dbname = "XXXXX";     Conferido e esta correto;
      $conn = mysqli_connect($server, $username, $password, $dbname);
      ?>
       
      altera.php
       
      <?php 
      $link = mysqli_connect("XXXXXX", "XXXXX", "XXXXX", "XXXXXX"); Conferido
      $sql = "SELECT * FROM interface ";
      $consulta = mysqli_query($link, $sql);
      ?>
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <meta http-equiv="refresh" content="30">
      <link rel="stylesheet" type="text/css" href="style.css">
      <script src="sorttable.js"></script>
      <title>Dashboard</title>
      <?php 
      session_start();
      if(!isset($_SESSION['login']) and !isset ($_SESSION['senha'])){
          session_destroy();
        unset($_SESSION['login']);
        unset($_SESSION['senha']);
        header('location:index.html');
        
        }
        
      ?>

      </head>
      <body>
      <a href="index.php"><img src="img/ditec_smart_hor_150px.png"></a>
      <div class="borda_titulo">
      <h2><center>DIMILK | Equipamentos</font></h2></center></div><br /><br />
      <form name="equipamento" action="salva.php" method=post>
      <center><table id="minhaTabela" border="3" class="sortable" bgcolor="#1E90FF">
        <tr>
        <th><center>ID </center></th>
        <th><center>MAC</center></th>
        <th><center>Habilitado</center></th>
        <th><center>Descrição</center></th>
        <th><center>Altura Tarro</center></th>
        <th><center>Área Tarro</center></th>
        <th><center>Alterar</center></th>
        </tr>
        
          <?php while($registro = mysqli_fetch_assoc($consulta)){
              echo '<tr bgcolor="#ADD8E6" scope="row">';
              echo '<td name="id"><center>'.$registro["id"].'</center></td>';
              echo '<td name="mac"><center>'.$registro["mac"].'</center></td>';
              echo '<td><center><input type="checkbox" name="status" value="$teste"><br></center></td>';
              echo '<td id="linha_desc"><textarea name="desc" type=text placeholder="'.$registro["descricao"].'" /></textarea></td>';
              echo '<td><input name="altura" type=text style="width: 70px;" placeholder="'.$registro["altura_latao"].' cm" /></td>';
              echo '<td><input name="area" type=text style="width: 70px;" placeholder="'.$registro["area_latao"].' cm" /></td>';
              
              echo '<td><form method="get" action="salva.php"><center><button class="voltar" type="submit">Salvar</button></center></form><br />';
              echo '</tr>';
              }
          echo '</tbody></table></form>';
          
          ?></center><br />
          
              <div>            
                  <form method="get" action="index.html">        
                  <center><button class="voltar" type="submit">Voltar</button></center></form>
              </div>
                      
                      <br />
                      <footer class="borda_texto"><center>
                      <img src="img/rodape_logo.png">
                          2019 © <b>DITEC - Smart Solutions</b> - Todos os Direitos Reservados.
                      <a class="px-4" href="https://www.ditecsc.com.br" target="_blank">Ditec - Smart Solution</a>
                      </center></footer>
      </body>
      </html>
       
      salva.php
       
      <?php
      include('conexao.php');
      include_once('altera.php');
       
      // declaração de variáveis
      $id = 22;
      /*$id = $_GET['id'];
      $status = $_POST['status'];*/
      $descricao = $_POST['desc'];
      $altura = $_POST['altura'];
      $area = $_POST['area'];
       
      $up = mysqli_query($conn, "UPDATE interface SET descricao='$descricao', altura_latao='$altura', area_latao='$area' WHERE id=$id"); 
       
      if(mysqli_affected_rows($conn) > 0){
        echo '<center><h1><b>Sucesso</b></h1><br /> <h2>Atualizado!</h2></center>';
        header("Refresh: 2;url=equipamentos.php");
      }else{
          echo '<center><h1><b>Erro</b></h1><br /> <h2>Não foi atualizado!</h2></center>';
        header("Refresh: 2;url=altera.php");
      }
       
      mysqli_close($conn);
      ?>
       
      Do jeito que esta eu consigo alterar o id=22, mas não consegui pegar o id da linha sequente;
       
       
    • Por marcossantana10
      Olá, minha dúvida é a seguinte:
       
      Eu faço um cadastro de médico e cada médico tem sua lista de especialidades, que é preenchida no ato do cadastro do médico. Até ai tudo bem..
       
      O problema é que na hora de fazer a página de Editar o registro desse médico, eu preciso listar todas as especialidades que eu tenho já cadastradas no sistema para caso o cara deseje inserir uma nova especialidade pra aquele médico. Eu consigo listá-las numa boa dentro do formulário de edição de registro, mas, gostaria de deixar o checkbox marcado com aquelas que ele já atende, conforme exemplo:
       

       
      Porém, esse registro do exemplo acima tem uma lista com duas especialidades (Urologia e Cardiologia), mas o checkbox só tá marcando uma, como se não tivesse percorrendo o vetor que armazena os resultados.
       
      Segue código:

      Consultas a tabela de todas as especialidades e a tabela das especialidades que já estão contidas no cadastro daquele médico
       
      E aqui o HTML/PHP:

    • Por LuanMartinsTI
      Eu gostaria de saber se existe algum problema relacionado a seguranca criando uma funcao assim, no exemplo sempre que eu crio uma funcao pre reutilizar os dados sao passados direto na chamada da funcao dentro do php, o usuario nao insere nenhum dado, quando o usuario vai inserir dados eu nao trabalho dessa forma, entao minha duvida [e, se mesmo o parametro da funcao sendo informado dentro do php no codigo pode existir algum problema.
      public function contar_cadastro($tabela, $sql){ try { if($sql == null){ $this->Select = $this->Conn->prepare("SELECT * FROM $tabela"); $this->Select->execute(); return $this->Select->rowCount(); }else{ $this->Select = $this->Conn->prepare("SELECT * FROM $tabela". " " ." $sql"); $this->Select->execute(); return $this->Select->rowCount(); } } catch (PDOException $exc) { exibeMensagens($Msg, $ErrNo); } } E as chamadas das funcoes assim
       
      $cmsPDO = new CmsPDO(); $r_userStaff = $cmsPDO->contar_cadastro('usuarios', ' where cargo > 2'); $r_userVip = $cmsPDO->contar_cadastro('usuarios', ' where cargo = 2'); $r_userBan = $cmsPDO->contar_cadastro('usuarios', " where ban = '1'"); $r_usuarioPDO = $cmsPDO->contar_cadastro('usuarios', null); $r_servVip = $cmsPDO->contar_cadastro('servidores', " where vipfree = 'V'"); $r_servFree = $cmsPDO->contar_cadastro('servidores', " where vipfree = 'F'"); $r_servInat = $cmsPDO->contar_cadastro('servidores', " where verificado = '1'"); $r_servOff = $cmsPDO->contar_cadastro('servidores', " where estado = 'Off'"); $r_servOn = $cmsPDO->contar_cadastro('servidores', " where estado = 'On'"); $r_servidores = $cmsPDO->contar_cadastro('servidores', null); Eu normalmente crio as funcoes assim:
      public function cadastrar_usuario($usuario){ try { if($this->veriricarnick($usuario) == false){ if($this->verificiarEmail($usuario) == false){ $query = 'INSERT INTO usuarios ' . '(id, nome, senha, email, cargo, ip)' . 'value(null,:nome, :senha, :email, :cargo, :ip)'; $this->Criar = $this->Conn->prepare($query); $this->Criar->bindValue(':nome' , $usuario->getNome() , PDO::PARAM_STR); $this->Criar->bindValue(':senha' , $usuario->getSenha(), PDO::PARAM_STR); $this->Criar->bindValue(':email' , $usuario->getEmail(), PDO::PARAM_STR); $this->Criar->bindValue(':cargo' , $usuario->getCargo(), PDO::PARAM_INT); $this->Criar->bindValue(':ip' , $usuario->getIp() , PDO::PARAM_STR); $this->Criar->execute(); if($this->Criar->rowCount() == 1){ return 1; }else{ return false; } }else{ return false; } }else{ return false; } } catch (PDOException $exc) { exibeMensagens("<b> Erro ao inserir.</b> Mensagem:{$exc->getMessage()} Código: {$exc->getCode()}", WS_ERROR); } }  
    • Por nosredna
      Olá amigos,
       
      tenho o seguinte código:
      <html> <script type="text/javascript"> function Soma(){ var soma = 0; var ipts = document.querySelectorAll('input[oninput="Soma()"]'); for(var x=0; x<ipts.length; x++){ var valorItem = parseFloat(ipts[x].value); !isNaN(valorItem) ? soma += parseFloat(valorItem) : null; } document.querySelector('#final').value = soma.toFixed(2); } </script> <form action=""> Total produto1: <input type="text" oninput="Soma()" value="0"><br> Total produto2: <input type="text" oninput="Soma()" value="0"><br> <br> Total todos os produtos12: <input type="text" id="final"> </form> </html> Bom...para essas duas inputs funciona corretamente.
      Porém, se eu quiser colocar mais inputs como: Total produto3 + Total produto4 = Total todos os produtos34, Total produtoX + Total produtoY = Total todos os produtosXY, ...
      e usar o mesmo código JS, é possível? alguém poderia me dar uma dica de como eu faço para fazer isso? já tentei de várias maneiras, mas não estou tendo sucesso...
       
      Fico agradecido. 
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.