cadmiel 0 Denunciar post Postado Fevereiro 3, 2012 Boa tarde galera Gostaria de saber como faço para importar dados do CSV(excel) para Mysql usando PHP ? lembrando gente que na hora da importação no sql já quero definir as colunas e o nome da tabela(entidade) onde devera ser armazenado. Se alguém puder me ajudar eu agradeço ? Grato Cadmiel Jorge Tempo de Evangelizar Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Fevereiro 3, 2012 Usando o phpmyadmin, Procure import, CVS Importe o arquivo cvs Depois vai outra vez em import, cvs usando load data para poder carregar os dados. Algumas versões mais velhas do phpmyadmin não da para importar cvs. E o tópico está no forum errado. Compartilhar este post Link para o post Compartilhar em outros sites
cadmiel 0 Denunciar post Postado Fevereiro 3, 2012 Então cara eu to querendo importar usando PHP da uma olhada no que eu ja consegue $handle = fopen('planilha.csv','r'); while(($data = fgetcsv($handle, 1000, ",")) !== false){ $num = count($data); for ($c=0; $c<$num; $c++){ $id = $data[0]; $nome = $data[1]; $email = $data[2]; require_once('Connections/ConnDB.php'); mysql_select_db($database_ConnDB, $ConnDB); $sql = 'insert into tabeladois (id,nome,email) values (null,$nome,$email)'; $Recordset1 = mysql_query($sql, $ConnDB) or die(mysql_error()); //$mysql_query($sql); } } fclose($handle); So que não estou conseguindo pegar os dados que estão no documento planilha.csv Por favor me ajudem grato Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Fevereiro 3, 2012 Então cara eu to querendo importar usando PHP da uma olhada no que eu ja consegue $handle = fopen('planilha.csv','r'); while(($data = fgetcsv($handle, 1000, ",")) !== false){ $num = count($data); for ($c=0; $c<$num; $c++){ $id = $data[0]; $nome = $data[1]; $email = $data[2]; require_once('Connections/ConnDB.php'); mysql_select_db($database_ConnDB, $ConnDB); $sql = 'insert into tabeladois (id,nome,email) values (null,$nome,$email)'; $Recordset1 = mysql_query($sql, $ConnDB) or die(mysql_error()); //$mysql_query($sql); } } fclose($handle); So que não estou conseguindo pegar os dados que estão no documento planilha.csv Por favor me ajudem grato Eu já passei para o bd uma tabela em html. Agora arquivo cvs deve ser mais tranquilo. Com o comando explode Usando o comando explode da para criar um array bidimensional, Ai passa esse arrray para o bd. Mas ou menos assim $array1 = explode("\n" , $seuarquivocvs ); $array2d = array(); for($i = 0; $i <= count($array1) ; $i++){ $array2 = explode(";" , $array1[$i] ); $array2d[$i][0] = $array2[0]; $array2d[$i][1] = $array2[1]; $array2d[$i][2] = $array2[2]; } for($i = 0; $i <= count($array2d) ; $i++){ $query = "INSERT INTO tabelacvs ('c0','c1','c2') VALUES ('".$array2d[$i][0]."' , '".$array2d[$i][0] ."' , '".$array2d[$i][0] ."') } Deve ter uns errinhos mas eu faria assim Compartilhar este post Link para o post Compartilhar em outros sites
Cífro13 0 Denunciar post Postado Fevereiro 4, 2012 boa tarde galera tô na mesma pendenga, fiz esse script, ele gera o código de inscerção corretíssimo porém os dados naum saum inseridos segue: <? function valores($vai, $arquivo){ echo $vai; $handle = fopen ($arquivo,"r"); echo "VALUES "; //obtendo o número de repetições $num = ""; while (($data = fgetcsv($handle, 1000, ","))!== FALSE){$num++;} //inserindo vírgulas , parenteses e ponoto-e-vírgul de acordo com a necessidade while (($data = fgetcsv($handle, 1000, ","))!== FALSE) { $this -> $num; $arr1 = array(";",","); $arr2 = array(",","','"); $var = str_replace($arr1,$arr2,$data); echo $num; for ($c=0; $c < $num; $c++) { echo "('" . $var[$c]; if (fgetcsv($handle, 1000, ",","\'")!==FALSE){echo "'),";} else {echo "');";} } } //fechando doc fclose ($handle); } ?> <table width="400" border="1" cellspacing="0" cellpadding="0"> <tr> <td>Cabeçalho</td> </tr> <tr> <td><table width="400" border="1" cellspacing="0" cellpadding="0"> <tr> <td><form enctype="multipart/form-data" action="" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> Send this file: <input name="userfile" type="file" /> <input type="submit" value="Send File" /> </form> </td> </tr> <tr> <td bgcolor="#999999"><?php $uploaddir = 'C:/apache2triad/htdocs/teste/'; $uploadfile = $uploaddir . $_FILES['userfile']['name']; print "<pre>"; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) { print "banco atualiuzado:\n"; print_r($_FILES); } else { print "é mermão a bagaça falhou:\n"; print_r($_FILES); } print "</pre>"; ?> </td> </tr> <tr> <td bgcolor="#999999"> </td> </tr> </table></td> </tr> <tr> <td bgcolor="#0099CC"><?php $query = valores($vai,$_FILES['userfile']['name']); $str = string($query); $testeup = mysql_query($str,$teste) or die("deu problema " . error_reporting(E_ALL)); echo $vai . $query or die("nada"); ?></td> </tr> </table> Compartilhar este post Link para o post Compartilhar em outros sites
cadmiel 0 Denunciar post Postado Fevereiro 6, 2012 Eu já passei para o bd uma tabela em html. Agora arquivo cvs deve ser mais tranquilo. Com o comando explode Usando o comando explode da para criar um array bidimensional, Ai passa esse arrray para o bd. Mas ou menos assim $array1 = explode("\n" , $seuarquivocvs ); $array2d = array(); for($i = 0; $i <= count($array1) ; $i++){ $array2 = explode(";" , $array1[$i] ); $array2d[$i][0] = $array2[0]; $array2d[$i][1] = $array2[1]; $array2d[$i][2] = $array2[2]; } for($i = 0; $i <= count($array2d) ; $i++){ $query = "INSERT INTO tabelacvs ('c0','c1','c2') VALUES ('".$array2d[$i][0]."' , '".$array2d[$i][0] ."' , '".$array2d[$i][0] ."') } Deve ter uns errinhos mas eu faria assim Cara fiz aqui o que você disse porém até o momento não deu certo a questão é que ele não insere registro no banco de dados. alguém conseguem ai ? Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Fevereiro 6, 2012 A ve ai o erro que da, eu nem coloquei aquelas aspas tortas. Imprime a query nos fors para ver se ta tudo certo. E tambem eu nao me lembro da separacao no cvs, da uma olhada nos explodes eu coloquei no primeiro "/n" e no segundo ";", abre um cvs no notepad e ve Compartilhar este post Link para o post Compartilhar em outros sites
cadmiel 0 Denunciar post Postado Fevereiro 6, 2012 A ve ai o erro que da, eu nem coloquei aquelas aspas tortas. Imprime a query nos fors para ver se ta tudo certo. E tambem eu nao me lembro da separacao no cvs, da uma olhada nos explodes eu coloquei no primeiro "/n" e no segundo ";", abre um cvs no notepad e ve Até agora nada, tipo tem como você fazer ai e testar e postar ele aqui no forum se você puder comentar cara pra gente não so copiar mas tb entender cara agradeço vlw. Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Fevereiro 6, 2012 Até agora nada, tipo tem como você fazer ai e testar e postar ele aqui no forum se você puder comentar cara pra gente não so copiar mas tb entender cara agradeço vlw. Esse script não tava funcionando mas a ideia é a mesma. E também eu esqueci de execultar a query, Eu só criei uma variavel chamada $query mas não execultei, E também não funcionava direito, Ai eu refiz uma parte. <?php $mysql_connect = mysql_connect("localhost", "root" , "" ) ; mysql_select_db("test", $mysql_connect); $texto = "sdfsdfsdf;sdfsdf;sdfsfd sdfsdf;fdfdf;fdfdf fdfdf;fdfdfdsf;asdf fdfdf;fdfsd;dsdf sdfsdff;ffs;fsddda sdfsdf;fdfxxdfs;dfsdy,yfsf"; $array1 = explode("\n" , $texto ); $array2d = array(); print_r($array1); echo "<BR>"; for($i = 0; $i <= count($array1) ; $i++){ $array2 = explode(";" , $array1[$i] ); $array2d[$i][0] = $array2[0]; $array2d[$i][1] = $array2[1]; $array2d[$i][2] = $array2[2]; } print_r($array2d); for($i = 0; $i <= count($array2d) - 1; $i++){ $query = "INSERT INTO `test`.`tabelacvs` (`c1`, `c2`, `c3`) VALUES ('".$array2d[$i][0]."', '".$array2d[$i][1]."', '".$array2d[$i][2]."');" ; echo $query . "<BR>" ; mysql_query($query); } ?> Primeiro para fazer um script assim é saber como é um arquivo cvs sdfsdfsdf;sdfsdf;sdfsfd sdfsdf;fdfdf;fdfdf fdfdf;fdfdfdsf;asdf fdfdf;fdfsd;dsdf sdfsdff;ffs;fsddda sdfsdf;fdfxxdfs;dfsdy,yfsf Só tem um problema: O arquivo pode conter um ; numa coluna sem ser para separação, caso tenha um ponto e virgula, toda a parte que tem esse ponto e virgula, vai ter tudo entre aspas, exemplo Numa linha sdfsdf;"fdfx;xdfs";dfsdy,yfsf entendeu? para espar tenta fazer algo como um caractere de escape. exemplo \5454621686216846246216 e tirar as aspas. Sugiro que crie um novo tópico para ver como escapar o ponto e virgula. Nesse meu script se tiver um ponto e virgula numa dessas "variaveis" vai bugar o script todo. Se quizer tentar escapar isso use o str_replace nas querys Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Fevereiro 6, 2012 Poste o conteúdo do arquivo que você quer importar e gravar no banco de dados. Facilita para ver como esta a estrutura de armazenamento e a partir daí definir um script que faça o que você quer. Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Fevereiro 6, 2012 Poste o conteúdo do arquivo que você quer importar e gravar no banco de dados. Facilita para ver como esta a estrutura de armazenamento e a partir daí definir um script que faça o que você quer. É cvs(separado por espaço(linhas), e virgula(colunas). Compartilhar este post Link para o post Compartilhar em outros sites
cadmiel 0 Denunciar post Postado Fevereiro 7, 2012 Segue acima a imagem da planilha que to querendo importar usando php e mysql... Compartilhar este post Link para o post Compartilhar em outros sites
ava.rj 0 Denunciar post Postado Fevereiro 7, 2012 Olá cadmiel. Certifique-se de que o arquivo CSV foi salvo com "separado por vírgulas", pois neste formato é colocado um ";" (ponto e vírgula) separando as colunas. Abra o arquivo com: $arquivo = fopen($arquivo, "r"); e Assim você lê linha por linha do arquivo (cada coluna será um índice da array $linha): while ($linha_arquivo = fgets($arquivo)) { $linha = explode(";",$linha_arquivo); $coluna1 = $linha[0]; $coluna2 = $linha[1]; } Lembrando que na primeira vez que passar o loop, a linha lida será a dos cabeçalhos da planilha: "id", "nome", "email"; Se não quiser ler esta linha, pode colocar um contador para executar a leitura das colunas a partir na segunda linha. Exemplo de leitura de um arquivo CSV recebido por uma formulário, neste script, primeiro grava-se o arquivo no servidor e depois lê: // SALVA O ARQUIVO RECEBIDO PELO FORMULÁRIO PELO CAMPO "arquivo" NO SERVIDOR if (copy($arquivo,"import/".$arquivo_name)){ $caminho = "import/"; $abre_arquivo = $caminho.$arquivo_name; // ABRE ARQUIVO $arquivo = fopen($abre_arquivo, "r"); // CONTATDOR PARA PULAR A PRIMEIRA LINHA $qtd = 0; // LÊ LINHA POR LINHA while ($linha_arquivo = fgets($arquivo)) { // DIVIDE COLUNAS SEPARADAS POR ; $linha = explode(";",$linha_arquivo); // VERIFICADOR PARA LER A PARTIR DA SEGUNDA LINHA if ($qtd>0){ // RESGATA VALORES $id = $linha[0]; $nome = $linha[1]; $email = $linha[2]; } // Fecha Qtd $qtd++; } // fecha WHILE linha_arquivo // FECHA ARQUIVO fclose($arquivo); } Espero que tenha ajudado. Abs Anderson Amorim Compartilhar este post Link para o post Compartilhar em outros sites
cadmiel 0 Denunciar post Postado Fevereiro 7, 2012 Pessoal consegue resolver...rs Obrigados a todos pelo feedback porem temos um novo desafio...rs segue abaixo o codigo para você importar uma .cvs para o mysql <?php //include "ConectaBanco.class.php"; require_once('Connections/conexao.php'); //$conectar = new ConectaBanco(); $arquivocsv = "arquivocsv.csv"; $tabela = "dados"; $handle = file($arquivocsv); for ($i=1;$i<count($handle);$i++) { $valori = explode(";", $handle[$i]); $values = ""; foreach ($valori as $val) { $val=trim($val); if (eregi("NULL",$val) == 0) $values .= "'".addslashes($val)."',"; else $values .= "NULL,"; } $values = trim(substr($values,0,-1)); mysql_select_db($database_conexao, $conexao); $query = "INSERT INTO $tabela VALUES (null, ".trim($values).");"; $Recordset1 = mysql_query($query, $conexao) or die(mysql_error()); } ?> Meu Desafio agora é o seguinte é fazer com que os registros não se dupliquem visto que sempre que eu executar o script acima ele insere gostaria de saber como faço para antes verificar se os registros da planilha ja está cadastrado no banco de dados, qual a melhor forma para se fazer isso ? Compartilhar este post Link para o post Compartilhar em outros sites
ava.rj 0 Denunciar post Postado Fevereiro 7, 2012 Faz um SELECT antes do INSERT, se mysql_num_rows for 0, execute o INSERT. Compartilhar este post Link para o post Compartilhar em outros sites
cadmiel 0 Denunciar post Postado Fevereiro 8, 2012 Faz um SELECT antes do INSERT, se mysql_num_rows for 0, execute o INSERT. Então o problema é o seguinte vamos imaginar que tenha la na minha planilha um registro felipe cardoso e alterei para felipe cardoso dos santos se eu usar o where não vai dar certo, entende ? ele vai achar q felipe cardoso dos santos é novo registro na hora de importar não vai alterar simplesmente vai inserir. e ai alguem tem ideia de como fazer ? Grato Compartilhar este post Link para o post Compartilhar em outros sites
Daniel o rei 14 Denunciar post Postado Fevereiro 8, 2012 Então o problema é o seguinte vamos imaginar que tenha la na minha planilha um registro felipe cardoso e alterei para felipe cardoso dos santos se eu usar o where não vai dar certo, entende ? ele vai achar q felipe cardoso dos santos é novo registro na hora de importar não vai alterar simplesmente vai inserir. e ai alguem tem ideia de como fazer ? Grato E só usar o UPDATE Compartilhar este post Link para o post Compartilhar em outros sites
xandedj 0 Denunciar post Postado Julho 25, 2015 Bom dia Amigos. E onde posso resgatar a variável do formulário em GET ou POST, para executar dentro da estrutura acima? Compartilhar este post Link para o post Compartilhar em outros sites
Rodrigoimm 0 Denunciar post Postado Abril 20, 2016 este: while(($data = fgetcsv($handle, 1000, ",")) !== false){ por este: while(($data= fgetcsv($handle, 1000, ";")) !== false){ Colocar o ";" dai funciona perfeito! Compartilhar este post Link para o post Compartilhar em outros sites