Adatbázis kimentése csv file-ba

Adatbázis kimentése csv file-ba
2014-08-08T14:00:42+02:00
2014-08-08T17:01:25+02:00
2022-10-15T23:26:02+02:00
krikett963
Üdvözletem!

Szeretném a szerveren levő listát kimenteni excel tipusú file-ba. Sikerült megoldanom azt, hogy minden egyes oszlop adatai külön cellába kerüljenek, viszont a probléma annyit tesz ki, hogy egyúttal a &nbsp kódot is hozzáadja. (Azért ezt használom mert "\t"  nem működött). Hogy lehetne úgy elmenteni az adatokat, hogy utólagos javításra ne legyen szükség az ecxelen belül?

while ($row = mysql_fetch_array($sql)) { for ($i = 0; $i < $columns_total; $i++) { $output .=$row["$i"]."&nbsp;"; } $output .="\n"; }
Mutasd a teljes hozzászólást!
A konkrét kérdésedre az a válasz, hogy ne írd bele a "&nbsp" -t, és akkor nem lesz benne

$output .=$row["$i"]."&nbsp;";
helyett

$output .=$row["$i"].";";
Eddig ugyanis pontosvesszővel tagolt csv-t készítettél véletlenül, a "&nbsp;" végén lévő pontosvessző felhasználásával.
Mutasd a teljes hozzászólást!

  • Én áttértem az xlsx-re. PHPExcel-t használom. Ott pl. megtudod azt oldani, hogy több fül legyen, adhatsz a füleknek színt és ugye az xlsx mentés után, ha megnyitod az xlsx-et, akkor a fülek lapok között tudsz váltani. Ha kell egy full code, akkor szólj.
    Mutasd a teljes hozzászólást!
  • $output .=$row["$i"]." ";
    Egy OOP megoldás:

    <?php class CreateCSV{ function create($sql, $isPrintFieldName = false, $isQuoted = true){ $q = mysql_query($sql) or die("Error: ".mysql_error()); $csv = $head = $ctn = ''; $hasPrintHead = false; while($r = mysql_fetch_assoc($q)){ if(!$hasPrintHead && $isPrintFieldName == true){ $csv_value = array(); foreach($r as $field => $value){ $csv_value[] = $field; } $hasPrintHead = true; $csv .= implode(',', $csv_value)."\n"; } $aOpts_text = $csv_value = array(); foreach($r as $field => $value){ $csv_value[] = $isQuoted == true ? '"'.$value.'"' : $value; } $csv .= implode(',', $csv_value)."\n"; } return $csv; } } ?>
    példa:

    <?php include("CreateCSV.class.php"); $conn = mysql_connect("localhost", "root", ""); $sql = "SELECT * FROM mysql.user"; print CreateCSV::create($sql); print CreateCSV::create($sql, false, false); print CreateCSV::create($sql, true); print CreateCSV::create($sql, true, false); ?>
    Mutasd a teljes hozzászólást!
  • A konkrét kérdésedre az a válasz, hogy ne írd bele a "&nbsp" -t, és akkor nem lesz benne

    $output .=$row["$i"]."&nbsp;";
    helyett

    $output .=$row["$i"].";";
    Eddig ugyanis pontosvesszővel tagolt csv-t készítettél véletlenül, a "&nbsp;" végén lévő pontosvessző felhasználásával.
    Mutasd a teljes hozzászólást!
  • --[javítva: elmaradt a ; :
    $output .=$row["$i"].";";
    Mutasd a teljes hozzászólást!

  • Na akkor, bár coma-separetad values a hivatalos teljes megnevezése a formátumnak, ettől függetlenül az excel valamiért az elválasztó karakternek a pontosvesszőt tekinti (igazából a windows terület/nyelvi beállításoknál megadott elválasztót, de ez default ; szokott lenni). Tehát a &nbsp; karakterszekvenciából az utolsó karaktert tekinti annak, ezért hasznos értéknek értelmezi az &nbsp sztringet. Mindenhol. Ami ugye pontosvesszővel a non-breakable space html kódja. De egy csv-től ne várjunk már el html viselkedést...
    Mutasd a teljes hozzászólást!
  • Nem gondoltam volna, hogy ez lesz a megoldás...  egyébként igen, csv-be akarom lementeni, de azért kiváncsi lettem a PHPExcelre is.
    Köszönöm szépen mindenkinek a segítséget, valamint tanácsot és felvilágosítást 
    Mutasd a teljes hozzászólást!
  • Hali!

    Miért szenvedsz saját megoldással, amikor létezik erre "beépített" PHP-s megvalósítás: fputcsv()?

    Javaslat: a mysql* függvényeket felejtsd el (már most elavult státuszban vannak, és nagyon úgy néz ki, hogy a jövőben ki is kerülnek a PHP-ból). Használj inkább mysqli-t vagy -- ami még jobb -- PDO-t.

    Mutasd a teljes hozzászólást!
  • Mert nem tudtam, hogy létezik ilyen függvény. Nemrég kezdtem vele foglalkozni és a gúgli bácsi sem dobot ki rá ilyen lehetőséget - igaz, nem is kerestem függvényt.
    Kösz a tippet, megnézem mindenképp.
    Mutasd a teljes hozzászólást!
  • Hali!

    Mert nem tudtam, hogy létezik ilyen függvény.

    Semmi gond, nem kértem számon rajtad, pusztán csak kérdeztem.

    ... és a gúgli bácsi sem dobot ki rá ilyen lehetőséget - igaz, nem is kerestem függvényt.

    A "php csv" keresőkifejezésre az első 3-4 találatban mindegyik csv-kezelő függvényt kidobja.

    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd