Jump to content
NelsonFernandes

Quebra de linha

Recommended Posts

NelsonFernandes

boas, tou a exportar dados de uma base de dados para um ficheiro .CSV. Já aparece os dados correspondentes mas aparece desta forma:

1 Nelson Fernandes 0 1 /n2 Miguel Miranda 1 2 /n

e queria que aparece-se assim:

1 Nelson Fernandes 0 1

2 Miguel Miranda     1 2

function excsv ($query,$nomes) {
    if ($result = mysqli_query(_do_connect(), $query)) {
        while ($obj = mysqli_fetch_assoc($result)) {
            for ($index = 0; $index < count($nomes); $index++) {
                $texto .= $obj[$nomes[$index]] . ";";
            }
            $texto .="/n";
        }
    }
    mysqli_free_result($result);
    return $texto;
}

obrigado desde já  ;)

Share this post


Link to post
Share on other sites
scorch

Substitui os /n por <br />. ;)


PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
brunoais

Substitui os /n por <br />. ;)

... ou por <br> dependendo se estás a usar xhtml ou html, respetivamente.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
NelsonFernandes

vejo que o único que percebeu o meu problema foi o yoda.

eu quero o código para fazer a quebrar de linha dum conteúdo da base de dados ao ser exportado para .CSV não como um texto normal, isso é lógico que é <br>.

yoda, fiz como disseste e dessa forma ainda não faz a quebrar de linha mas já não mostra os "/n" como aqui: 1  Nelson Fernandes  0  1  /n2  Miguel Miranda  1  2  /n

Share this post


Link to post
Share on other sites
NelsonFernandes

tudo o que tenho referente a isto é:

<?php
        $file = $_GET['texto'];
        $filename="teste";
        header('Content-type: application/csv');
        header('Content-Disposition: attachment; filename='.$filename.'.csv');
        header('Pragma: no-cache');
        header('Expires: 0');
        print $file;
?>

ficheiro csv.php

$callexcsv= excsv ($query, $conteudo);
    $botaoex='<div align="center"><a href="csv.php?texto='.$callexcsv.'">Exportar CSV</a></div>';
    print $botaoex;

isto é a hiperligação e tenho aquele código em cima

e tá a funcionar correctamente, excepto a parte da quebra de linha, ele lê/reconhece bem os campos da base de dados e escreve-os correctamente

Share this post


Link to post
Share on other sites
kareka

Continuas a escrever a quebra de linha assim '/n' ?

Porque na maior parte das linguagens de programação é ao contrário a barra é '\n' , não sei se isso te ajuda nos ficheiros .csv


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites
NelsonFernandes

Mas não chegas mesmo a criar o ficheiro então?

eu ao carregar nu link ele vai criar o ficheiro, mas aparece tudo numa linha  😡

Share this post


Link to post
Share on other sites
brunoais

Há caracteres que não passam corretamente pelo GET. Experimenta arranjar maneira para passar por post, por cookies ou grava na base de dados e depois devolves para o utilizador quando ele acede à página.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
NelsonFernandes

vou explicar por imagens.

tá aqui a página com a hiperligação para criar um ficheiro .CSV que devolve o que está na tabela acima, tabela esta que imprime o que está na base de dados de uma certa entidade, neste caso aluno.

http://img802.imageshack.us/img802/6852/semttulovf.png

em seguida, carrega em "Exportar CSV" e aparece uma janela para saber se quero abrir somente ou guardar.

http://img202.imageshack.us/img202/7339/semttulobma.png

faço abrir (por exemplo) e aparece o meu .csv

http://img580.imageshack.us/img580/1522/semttulowi.png

miguel miranda e os dados seguintes deveriam aparecer na linha abaixo.

espero ter sido mais explicito, obrigado  :confused:

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Mostra o código que tens no script que cria o CSV. (É para seres mais explícito ainda). (Não te esqueças de alterar os dados sensíveis)

Share this post


Link to post
Share on other sites
NelsonFernandes
function excsv ($query,$nomes) {
    if ($result = mysqli_query(_do_connect(), $query)) {
        while ($obj = mysqli_fetch_assoc($result)) {
            for ($index = 0; $index < count($nomes); $index++) {
                $texto .= $obj[$nomes[$index]] . ";";
            }
            $texto .="\r\n";
        }
    }
    mysqli_free_result($result);
    return $texto;
}

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Antes demais, deixa-me dar-te uma recomendação para usares funções destinadas à leitura e criação de CSV's, se calhar já usas mas nunca é demais referir :) :

- fgetcsv() - Serve para ler uma linha de um CSV um array com os valores devidamente separados. PHP 4 e 5.

- fputcsv() - Serve para colocar uma linha no CSV, passando um array. PHP 5 >= PHP 5.1.0

Agora voltando ao teu código .... Fiz algumas alterações para que precises de menos variáveis... Se calhar podia ser mais optimizado, mas hey estejam ah vontade ;):

function excsv ($query,$nomes) {
    if ($result = mysqli_query(_do_connect(), $query)) {
        while ($obj = mysqli_fetch_assoc($result)) {
            $texto = array();
            foreach ($nomes as $nome)
                $texto[] = $obj[$nome];
            $texto = implode(";",$texto) . "\r\n";
        }
    }
    mysqli_free_result($result);
    return $texto;
}

OK, esta função retorna o texto a colocar no CSV.

E onde é que chamas esta função? Abraço

Share this post


Link to post
Share on other sites
NelsonFernandes

ao carregar no "exportar csv" que aparece no print screen.

$callexcsv= excsv ($query, $conteudo);
    $botaoex='<div align="center"><a href="csv.php?texto='.$callexcsv.'">Exportar CSV</a></div>';
    print $botaoex;

ps: testei o código que meteste e só imprime para o csv a última linha 🤔

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Oops... sorry... my mistake!!!

function excsv ($query,$nomes) {
    $texto_final = '';
    if ($result = mysqli_query(_do_connect(), $query)) {
        while ($obj = mysqli_fetch_assoc($result)) {
            $texto = array();
            foreach ($nomes as $nome)
                $texto[] = $obj[$nome];
            $texto_final .= implode(";",$texto) . "\r\n";
        }
    }
    mysqli_free_result($result);
    return $texto_final;
}

Share this post


Link to post
Share on other sites
NelsonFernandes

Oops... sorry... my mistake!!!

function excsv ($query,$nomes) {
    $texto_final = '';
    if ($result = mysqli_query(_do_connect(), $query)) {
        while ($obj = mysqli_fetch_assoc($result)) {
            $texto = array();
            foreach ($nomes as $nome)
                $texto[] = $obj[$nome];
            $texto_final .= implode(";",$texto) . "\r\n";
        }
    }
    mysqli_free_result($result);
    return $texto_final;
}

hummm, continua a não dar. fica tudo numa linha na mesma  :wallbash: o teu até junta 2 células

ps: obrigado desde já  :P

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Ora bem eu testei, e estava a funcionar....

Se estás a visualizar os dados no browser, é provável que não dê linhas, porque as linhas são separadas por <br/> e não por \r\n ...

Ainda assim, fiz uma alteração, mas isto até é melhor num script à parte... Chamemos-lhe export2csv.php

function excsv ($query,$nomes) {
    $texto_final = '';
    $handler = fopen('php://output','w');
    if( $handler )
    {
      if ($result = mysqli_query(_do_connect(),$query)) {
          while ($obj = mysqli_fetch_assoc($result)) {
              $texto = array();
              foreach ($nomes as $nome)
                $texto[] = $obj[$nome];
                
              fputcsv($handler,$texto,';','"');
          }
      }
      mysqli_free_result($result);
      fclose($handler);
      
      return file_get_contents('php://output');
    }
    return FALSE;
}

switch($_GET['id'])
{
    case 1:
        die( execsv("SELECT * FROM tabela",array( 'campo1', 'campo2' ) ) );
    case 2:
        #.... etc...
    default:
        die("ACCESS DENIED");
}

Depois nos teus links seria só (exemplo):

<a href="export2csv.php?id=1">Exportar para CSV</a>

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

×
×
  • Create New...

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.