php export mysql do csv

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Sesijama 8. 8. 2008 12:12

Zdravim

našel jsem script na export mysql databáze který po spuštění umožní uložit soubor ve formátu csv do pc. Chci se zeptat jak kod změnit aby byl exportovaný soubor automaticky ukládán do určitého adresáře na ftp kde jsou stránky používající exportovanou databázi. např adresář /temp

spouštěcí soubor:

Kód: Vybrat vše
<?php

$host = 'localhost'; // MYSQL database host adress
$db = ''; // MYSQL database name
$user = ''; // Mysql Datbase user
$pass = ''; // Mysql Datbase password

// Connect to the database
$link = mysql_connect($host, $user, $pass);
mysql_select_db($db);

require 'exportcsv.inc.php';

$table="zen_customers"; // this is the tablename that you want to export to csv from mysql.
exportMysqlToCsv($table);
$table="zen_orders"; // this is the tablename that you want to export to csv from mysql.
exportMysqlToCsv($table);
$table="zen_products"; // this is the tablename that you want to export to csv from mysql.
exportMysqlToCsv($table);

?>

funkce:

Kód: Vybrat vše
<?php

function exportMysqlToCsv($table,$filename = 'export.csv')
{
    $csv_terminated = "\n";
    $csv_separator = ",";
    $csv_enclosed = '"';
    $csv_escaped = "\\";
    $sql_query = "select * from $table";

    // Gets the data from the database
    $result = mysql_query($sql_query);
    $fields_cnt = mysql_num_fields($result);


    $schema_insert = '';

    for ($i = 0; $i < $fields_cnt; $i++)
    {
        $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,
            stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;
        $schema_insert .= $l;
        $schema_insert .= $csv_separator;
    } // end for
   
    $out = trim(substr($schema_insert, 0, -1));
    $out .= $csv_terminated;

    // Format the data
    while ($row = mysql_fetch_array($result))
    {
        $schema_insert = '';
        for ($j = 0; $j < $fields_cnt; $j++)
        {
            if ($row[$j] == '0' || $row[$j] != '')
            {

                if ($csv_enclosed == '')
                {
                    $schema_insert .= $row[$j];
                } else
                {
                    $schema_insert .= $csv_enclosed .
                    str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $row[$j]) . $csv_enclosed;
                }
            } else
            {
                $schema_insert .= '';
            }

            if ($j < $fields_cnt - 1)
            {
                $schema_insert .= $csv_separator;
            }
        } // end for

        $out .= $schema_insert;
        $out .= $csv_terminated;
    } // end while
   
   

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Length: " . strlen($out));
    // Output to browser with appropriate mime type, you choose ;)
    header("Content-type: text/x-csv");
    //header("Content-type: text/csv");
    //header("Content-type: application/csv");
    header("Content-Disposition: attachment; filename=$filename");
    echo $out;
    exit;

}

?>

Sesijama

Obrázek Mývalice: Na vkládání zdrojových kodů používej tag [Code].
Sesijama
Junior
Uživatelský avatar

Odeslat příspěvekod K8 8. 8. 2008 12:32

no rekl bych, ze uz tento kod je plny chyb
a) proc je tam 2x vlozeno $schema_insert - tohle rusim, zde me zmatl nazev promenne
b) nelze tu funkci volat opakovane pro ruzne tabulky, kdyz v ni je i odeslani hlavicek pomoci header (zvlaste, kdyz to posila i delku, ktera pak nebude souhlasit, nebot je to delka je z prvni tabulky)

no a k puvodnimu problemu - je treba se podivat na fukce prace se souborem, a vygenerovana data ulozit do souboru a pak tento soubor pomoci funkci ftp poslat na dany ftp server
viz http://www.php.net/manual/en/ref.filesystem.php a http://www.php.net/manual/en/ref.ftp.php
Naposledy upravil K8 dne 8. 8. 2008 12:49, celkově upraveno 1
K8
Pokročilý

Odeslat příspěvekod K8 8. 8. 2008 12:39

jestli by nestacilo, nez si psat vlastni prevod do csv, pouzit "funkci" MySQL - SELECT ... INTO OUTFILE viz http://dev.mysql.com/doc/refman/5.0/en/select.html
K8
Pokročilý

Odeslat příspěvekod Sesijama 8. 8. 2008 13:18

jé to je moje chyba... s tím výběrem tabulek. smozřejmě tam je jen jedna ale protože jsem úplnej laik co se v tom nrevyzná zkoušel jsem jestli tam nejdou přidávat další a zapoměl to pak smazat.

každopádní dík moc za odpovědi ale já bych uvítal co přesně bych měl vložit za kód.
vím že tohle způsobuje otevření okna uložení vyexportovaného soubor

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: " . strlen($out));
// Output to browser with appropriate mime type, you choose
header("Content-type: text/x-csv");
//header("Content-type: text/csv");
//header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filename");

a mělo by to asi být nahrazeno nějakou funkcí ale z těch odkazů jsem makovej. fakt nevim.
Jo a s tim ftp... nemyslel jsem někam to posílat ale jen uložit tam kde je ten script... třeba přímo do kořenovýho adresáře nebo do tempu.

No a nakonec funkci mysql použít nemůžu. Musí to být script.

Dík za ochotu.

Sesijama
Sesijama
Junior
Uživatelský avatar

Odeslat příspěvekod K8 8. 8. 2008 13:33

proc nemuzes pouzit funkci mysql? vzdyt ji muzes tim skriptem spustit
ted tam mas:
$sql_query = "select * from $table";
mysql_query($sql_query);

tak to "select * from $table" jen doplnis tim INTO OUTFILE s patricnymi parametry, a ono ti to ten soubor rovnou ulozi do potrebneho adresare a zbytek kodu muzes zrusit
K8
Pokročilý

Odeslat příspěvekod Sesijama 9. 8. 2008 11:41

zdarec

jsem lata. bohužel tomu fakt nechápu. zkoušel jsem ten kod různě upravovat ale kýžený výsledek stále nikde...

Jsem z toho bezradenj :(

Ses
Sesijama
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků