Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rafa-martin

ler csv e inserir em tabela

Recommended Posts

estou fazendo o código abaixo para ler um arquivo csv separado por ponto e virgula.

 

 

 
function readCSV($csvFile){
$file_handle = fopen($csvFile, 'r');
while (!feof($file_handle) ) {
$line_of_text[] = fgetcsv($file_handle, 1024,";");
}
fclose($file_handle);
return $line_of_text;
}
 
 
// Set path to CSV file
$csvFile = 'teste.csv';
 
$csv = readCSV($csvFile);
echo '<pre>';
print_r($csv);
echo '</pre>';
 

 

só que no momento de fazer o loop para poder ler está me dando o seguinte erro: Array to string conversion in C:\wamp\www\excel\read_csv.php on line 37

 

por que?

 

segue meu for

 

 

for ($x=0;$x<count($csv);$x++)
{
   echo $csv[$x];
}

 

preciso desse for, porque quando for a posição zero no array (cabeçalho) tenho que criar uma tabela com as informações da primeira linha do arquivo, que seria posição 0 do array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

só que no momento de fazer o loop para poder ler está me dando o seguinte erro: Array to string conversion in C:\wamp\www\excel\read_csv.php on line 37

 

por que?

 

segue meu for

for ($x=0;$x<count($csv);$x++)
{
   echo $csv[$x];
}

 

o erro é devido a variável $csv[$x] ser um array e não uma string, implemente outro laço para obter as string

foreach (array_filter($csv) as $i => $row){
  foreach ($row as $data){
    echo $data;
  }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

e como posso verificar a posição do array?

 

pq eu preciso inserir o cabeçalho, que está na posição zero do array, em uma tabela e depois adicionar em outra tabelas os registros correspondentes ao cabeçalho.

 

mais ou menis algo assim:

 

if (array(0))

{

grava cabeçalho

}

else

{

grava registros

}

Compartilhar este post


Link para o post
Compartilhar em outros sites


foreach (array_filter($csv) as $i => $row){

foreach ($row as $data){

if ($i == 0){

// HEADER

}

else{

// BODY

}

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

to tentando fazer um insert numa tabela do acces e está me dando o seguinte erro.

 

PHP Warning: odbc_exec(): in C:\inetpub\wwwroot\teste.php on line 50

 

qual motivo? o select funciona.

 

$con = odbc_connect("Access","","") or die("Erro na conexão.");

 

$sql1 = odbc_exec($con,"insert into tabela(coluna1) values ('$data')");
odbc_exec($con, $sql1);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aprenda a debugar seu script e tentar entende-lo.

 

O quê de fato está retornando desse comando?

print_r($csv);

Com base nisso, fica mais fácil encontrar a melhor saída para o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o script está correto. é só na hora de inseri no access. quando printo o script de insert e insero direto na base, a linha é inserida na tabela.

 

insert into titulo (titulo) values ('Description')
insert into titulo (titulo) values ('Brand')
insert into titulo (titulo) values ('Series')
insert into titulo (titulo) values ('color')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua função está retornando um array multidimencional, você vai acessar um array durante sua iteração

for ($x=0;$x<count($csv);$x++)
{
   echo $csv[$x];
}

Para acessar os valores dessa posição, você terá que iterar novamente.

for ($x=0;$x<count($csv);$x++)
{
   for ($y=0;$y<count($csv[$x]);$y++)
   {
      echo $csv[$x][$y] . '<br/>';
   }
}

Essa é a resposta para o erro: Array to string conversion

Compartilhar este post


Link para o post
Compartilhar em outros sites

mais o que tem haver o que vc está falando? não entendi.

 

estou tendo problema apenas para inserir numa tabela do access.

 

para fazer consulta está funcionando normalmente.

 

$sql = odbc_exec($con,"SELECT * FROM tabela");
$i=0;
while(odbc_fetch_row($sql))
{
$i++;
echo odbc_result($sql,"coluna1");
echo odbc_result($sql,"coluna2");
echo "<br>";
}
o problema é apenas no insert.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o erro está no insert dinâmico, print um desses inserts, verifique está montado corretamente e insira manualmente para confirmar, se der tudo certo, então o problema é outro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro está aqui

$sql1 = odbc_exec($con,"insert into tabela(coluna1) values ('$data')"); 
 odbc_exec($con, $sql1);

Vc insere na primeira linha da forma correta, e o retorno disso é um identificador de resultado ODBC se o comando foi executado com sucesso, ou FALSE em erro.

 

Como vc vai tentar inserir novamente usando como parâmetros o identificador de conexão e um identificador de resultado ou booleano falso?

 

Deveria ser o identificador da conexão e comando SQL.

 

Sacou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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