Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
soullucky

CVS para MYSQL via php

Recommended Posts

soullucky

Precisava de umas luzes como posso passar dados de um ficheiro cvs para mysql

tipo phpmyadmin mas precisava do código para poder usar directamente sem carregar ficheiros. Estar encaminhado directamente para um ficheiro cvs

Share this post


Link to post
Share on other sites
mjamado

Vê lá se é tipo isto.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
falco

Já agora CVS e CSV não são a mesma coisa...

CVS é a sigla utilizada para Concurrent Version System.

CSV é a sigla utilizada para Comma Sepparated Values.

Share this post


Link to post
Share on other sites
soullucky

O objectivo é CSV para uma tabela mySQL

É Comma-separated values (ou CSV).

;)

Share this post


Link to post
Share on other sites
mjamado

Eu tinha percebido à primeira, até porque o CVS não tem "um" ficheiro e a frase não fazia sentido nenhum. Também não te quis atirar o erro à cara...

O link acima serviu-te?


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
soullucky

esta um bocado confuso.

mas o codigo que metes-te no post  Re: Escrever/ler para xls ou csv

« Responder #9 em: 11 de Fevereiro de 2010, 22:09 »

Passa os dados para a tabela...  o código não esta completo, por acaso não tens ai nada mais completo.. ;)

eu nem queria um  <input type="file"> era mesmo no código fonte e correr o script e ca vai disto

Obrigado pela ajuda

Share this post


Link to post
Share on other sites
mjamado

Então soullucky, a resposta está lá mesmo no post.

Eu tenho um comentário que diz partindo do princípio que tens o ficheiro já aberto; se reparares bem, eu uso um ponteiro de ficheiro, $fp.

Recuando umas postas, encontrarás, pelo ricardo_1977, mais um pedaço de código com a linha relevante:

$fp = fopen('file.csv', 'w');

Neste caso, deverás abrir o ficheiro para leitura, com o modo 'r', em vez de escrita (modo 'w'). Também é conveniente verificar primeiro se o ficheiro existe e tal... o costume.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
soullucky

obrigado pela ajuda...

eu vou experimentando código mas nada...

lindo lindo era dares ai um exemplo funcional ficava mesmo agradecido e sempre se postava ai para a malta uma coisa concreta...

desculpa la ser assim...  😳

Share this post


Link to post
Share on other sites
mjamado

Hmmm, já tens tudo, acho eu... O ficheiro aberto, as queries de inserção...

Pergunta: sabes abrir e lidar com uma conexão MySQL, não sabes? E parto do princípio que já a tenhas aberto...


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
soullucky

Já meti a funcionar... tem erros mete uma campo vazio no fim e da erro no array...

<?php


$conexao = mysql_connect("localhost", "root");
if($conexao)
{
mysql_select_db("nome da base de dados", $conexao) or die("Erro :  . mysql_error()");
}
else{echo "não foi possivel estabelecer a ligação";}

//========================================

$tabela = "texto"; //tabela da bd

$arquivo = 'teste.csv';// csv

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

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
	$linha = explode(';', $conteudo);// divide por coluna onde tiver ponto e virgula
}

$sql = "INSERT INTO $tabela (TESTE1, TESTE2, TESTE3) VALUES ('$linha[0]', '$linha[1]', '$linha[2]')";
$result = mysql_query($sql) or die(mysql_error());
$linha = array();// linpa o array de $linha e volta para o for
}
echo "quantidade de linhas importadas = ".$ll;

?>

Share this post


Link to post
Share on other sites
soullucky

Notice: Undefined variable: ll in C:\wamp\www\xxx\importa.php on line 27

Notice: Undefined offset: 0 in C:\wamp\www\xxx\importa.php on line 31

Notice: Undefined offset: 1 in C:\wamp\www\xxx\importa.php on line 31

Notice: Undefined offset: 2 in C:\wamp\www\xxx\importa.php on line 31

Notice: Undefined offset: 3 in C:\wamp\www\xxx\importa.php on line 31

Notice: Undefined offset: 4 in C:\wamp\www\xxx\importa.php on line 31

Notice: Undefined offset: 5 in C:\wamp\www\xxx\importa.php on line 31

Notice: Undefined offset: 6 in C:\wamp\www\xxx\importa.php on line 31

Notice: Undefined offset: 7 in C:\wamp\www\xxx\importa.php on line 31

Notice: Undefined offset: 8 in C:\wamp\www\xxx\importa.php on line 31

Share this post


Link to post
Share on other sites
mjamado

soullucky, desaconselho muito vivamente o desligar dos warnings! Pelo menos, enquanto estás a desenvolver e isso não está num servidor de produção.

Se lá estão, é porque algo se passa. Observando-os com atenção, é possível corrigi-los, aprendendo, pelo caminho, a sermos melhores programadores.

Depois... colocaste o código tal como o estás a usar? É que tens aí alguns erros... Vou retirar todos os teus comentários e colocar comentários meus para veres melhor (só o código que interessa).

// evita ao máximo expressões semi-inline como esta (sem chavetas de abertura e fecho) quando
// a expressão filha ocupa mais do que uma linha - não está incorrecto, mas fica muito mais difícil
// ler o código, sobretudo quando também não é respeitada a tabulação; agora vou tabular
// correctamente, mas considera meter cá as chavetas
while(!feof($arq))
// o que é que este for está aqui a fazer? Só vai ser executado uma vez a cada passagem
// do while, porque 1 - 0 = 1
for($i=0; $i<1; $i++)
{
	if ($conteudo = fgets($arq))
	{
		// onde é que está definida esta variável? não podes utilizar operadores unários (++, --)
		// em variáveis que não estão inicializadas! por acaso, o PHP é extremamente tolerante e
		// até deixa passar a coisa, mas, como já deves ter reparado, cuspiu cá para fora um
		// warning - é o primeiro da tua lista. Define a variável lá atrás, fora do while: $ll = 0;
		$ll++;

		// só para perceberes melhor, aqui não há "queixas" e warnings, porque estás a definir
		// explicitamente a variável
		$linha = explode(';', $conteudo);
	} // BIG NO-NO!!

	// não podes fechar o if ali! neste ponto onde nos encontramos, se, por algum motivo não foi
	// lida uma linha, não existe o array $linha! as instruções que se seguem vão introduzir nada,
	// nicles batatóides - inclusicamente, vão disparar mais warnings, visto que estás a tentar
	// aceder a posições de um array vazio ou indefinido...

	// embora não seja importante num caso de testes como este, nunca, MESMO NUNCA,
	// insiras valores na BD tal como estás a fazer aqui, escapa-os sempre. isto não é uma porta,
	// isto é uma cratera para sql injection. Além disso, devias também verificar que todos os dados
	// que vais inserir existem, efectivamente
	$sql = "INSERT INTO $tabela (TESTE1, TESTE2, TESTE3) VALUES ('$linha[0]', '$linha[1]', '$linha[2]')";
	$result = mysql_query($sql) or die(mysql_error());

	// esta linha será desnecessária, visto que a variável é definida com valores novos, sempre
	// que os mesmos existirem. e como as duas instruções acima ficam dentro do if, não há
	// a preocupação com valores inválidos ou depreciados
	$linha = array();
}

Se fizeres isto tudo, provavelmente vais ficar sem warnings (e liga-os outra vez).

Finalmente, e tal como eu já disse no outro tópico, isto é uma maneira péssima de se inserirem dados em sequência. Se o teu ficheiro de dados tiver 1000 linhas, vais efectuar 1000 queries, o que é um absurdo! Relê o tópico que eu linquei.

Abraços! (já disse para voltares a ligar os warnings?  ;))


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
mjamado

o código que dei é só para desligar os notices, os warnings continuam lá.

Sim, tens razão... Eu queria dizer as notices... e os warnings... Basicamente, é trabalhar com E_ALL. Depois, no servidor de produção, desligar os notices e os warnings (também há quem não desligue, mas isso é cá uma fé).


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

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
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.