Avatar billede thingholm.dk Nybegynder
26. maj 2003 - 13:16 Der er 6 kommentarer og
1 løsning

Generer csv fil

Hej

Hvordan laver jeg et udtræk fra MySQL som gemmes i en ny kommasepereret fil (csv) og sender den til bruger - ie. " vil du åbne denne eller gemme på disk?".

VH

Anders Thingholm
Avatar billede kryster Nybegynder
26. maj 2003 - 13:57 #1
Det her skulle være hvordan du sikre dig at det bliver downloadet som fil og ikke åbner i browseren. Taget fra tbl_dump.php i phpmyadmin, jeg kan ikke lige gennemskue hvordan den indsætter tegnene til at separere felterne.
    header('Content-Type: ' . $mime_type);
    // lem9 & loic1: IE need specific headers
    if (PMA_USR_BROWSER_AGENT == 'IE') {
        header('Content-Disposition: inline; filename="' . $filename . '.' . $ext . '"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
    } else {
        header('Content-Disposition: attachment; filename="' . $filename . '.' . $ext . '"');
        header('Expires: 0');
        header('Pragma: no-cache');
    }
Avatar billede sostack Nybegynder
26. maj 2003 - 14:15 #2
<?php
$filnavn = "tempfile.csv";
$flag_kolonnenavne = 0;
$host = "localhost";
$db = "din_database";
$tabel = "din_tabel";
$bruger = "brugernavn";
$password = "din_adgangskode";
$conn = mysql_connect($host, $bruger, $password) or DIE(mysql_error());
mysql_select_db($db, $conn) or DIE(mysql_error());
$alle_query = "SELECT * FROM $tabel";
$alle_poster = mysql_query($alle_query) or DIE(mysql_error());
while($poster = mysql_fetch_assoc($alle_poster)) {
if($flag_kolonnenavne == 0) {
foreach($poster as $key => $value) {
$kolonnenavne .= $key . ",";
$posten .= $value . ",";
$flag_kolonnenavne = 1;
}
} else {
foreach($poster as $key => $value) {
$posten .= $value . ",";
}
}
$posten .= "\n";
}
$kolonnenavne .= "\n";
$fp = fopen($filnavn, "w+");
fputs($kolonnenavne, $fp);
fputs($posten, $fp);
fclose($fp);
?>

Nu er filen tempfile.csv klar til at blive sendt via din mailfunktion.

//sostack
Avatar billede thingholm.dk Nybegynder
26. maj 2003 - 14:52 #3
Hej igen

Jeg skal ikke sende den med mail, man den skal gerne bede brugeren om han vil gemme filen eller åbne den...

VH

Anders
Avatar billede sostack Nybegynder
26. maj 2003 - 15:04 #4
så sæt en linie ind tilsidst i scriptet:

header("Location: ./tempfile.csv");

//sostack
Avatar billede tipsen Nybegynder
26. maj 2003 - 17:25 #5
Lille ændring til del af scriptet:

while($poster = mysql_fetch_assoc($alle_poster)) {
  if($flag_kolonnenavne == 0) {
    $kolonnenavne .= implode(','. array_keys($poster));
    $posten .= implode(','. $poster);
    $flag_kolonnenavne = 1;
  } else {
    $posten .= implode(',', $poster);
  }
}

Derudover vil det være hensigtsmæssigt, at skrive indholdet direkte ned i en fil i stedet for at opbevare det i en variabel - det kan give hukommelsesproblemer på serveren, hvis det er en stor tabel.
Avatar billede thingholm.dk Nybegynder
26. maj 2003 - 19:16 #6
takker! Sostack, smider du et svar?
Avatar billede sostack Nybegynder
27. maj 2003 - 06:59 #7
Ok!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester