Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

soullucky

CVS para MYSQL via php

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...  😳

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;

?>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.