csv aus php

bensky

Erfahrenes Mitglied
Warscheinlich ne doofe frage aber nach welchem befehl such ich in der php doku wenn ich per cronjobs mittels php aus ner sql Datenbank werte in csv exportieren will. ich find hier nix und in der php doku irgendwie auch net? gruß ;)
 
PHP ist da nur für die csv-Sache zuständig: mittels fgetcsv

Den Cronjob mußt du über den Server bzw. das Betriebssystem des Servers abwickeln.
z.B. bei Linux ist hier der cron-daemon zuständig
 
Zuletzt bearbeitet:
Hi, den Befehl hatte ich auch gefunden aber ich hatte gedacht das der zum einlesen von csv files ist. Ich will das der kunde aus nichts ;) ein csv file erstellen kann und darin werte aus ner sql db speicher kann. Diese soll dann per ftp auf nen anderen server übertragen werden. Das alles halt per cron's ;)
 
wenn du PHP 5.1 verwendest, dann fputcsv(). In den Kommentaren zu dieser Funktion stehen auch pure PHP-Implementierungen, falls du eine Version kleiner als PHP 5.1 verwendest.

Ist ja auch im Prinzip nichts schweres, einfach nen Select auf die Daten machen und dann halt Zeile für Zeile des Ergebniss durchgehen und halt in die entsprechende Datei setzen. Wenn es ein String ist noch in " " einpacken, darauf achten das im String vorkommende Anführungszeichen entsprechend bearbeitet werden und ansonsten halt pur rein und noch das Trennzeichen.
 
Hi, sorry, da hab ich wohl zu schnell gelesen...
Stimmt, fgetcsv() ist nur zum einlesen von csv files.

Was genau meinst du mit
bensky hat gesagt.:
...Ich will das der kunde aus nichts ein csv file erstellen kann und darin werte aus ner sql db speicher kann...

Vielleicht hilft dir aber die Funktion fputcsv() weiter, in dem du zuerst den Inhalt der DB ausliest und dann an die Funktion übergibst. Diese Funktion gibt es aber erst ab PHP 5.
Alternativ mußt du dir die einzelnen Zeilen eben selbst zusammensetzen und in ein File schreiben: http://www.php.net/manual/de/ref.filesystem.php
 
Macht ja nix. Ich habe noch keine erfahrungen mit csv, ich hatte gedacht man müsste das csv aus irgend nem syntax erstellen, weil es ja (wie ich dachte) irgendeine interne windowsformatierung hat. Man kann ja auch nicht .doc mit txt vergleichen, da .doc schon irgendetwas in sich selbst stehen hat. Also kann ich einfach meine werte aus der sql db holen, eine csv erstellen und dann die werte semi. getrennt dort hineinpacken? Geil ;) Ich dachte das wär ein mega Aufwand ;)

ich seh gerade mein wamp hat kein 5.1 hat das neue es schon oder kann ich einfach die php exe 5.1 drüberkloppen?
 
Zuletzt bearbeitet:
Hallo!

"drüberkloppen" würde ich lieber nichts..... PHP besteht halt mehr als nur aus der php.exe. ;)

Du kannst aber die Werte aus der Datenbank implodieren:
PHP:
<?php
mysql_connect("localhost", "xxx", "xxx");
mysql_select_db("datenbank");
 
$result = mysql_query("SELECT * FROM `tabelle` ORDER BY `spalte`");
 
$handle = fopen("datenbank_backup.csv", "a");
 
while($row = mysql_fetch_assoc($result)) {
    $csv = '"'.implode('";"', $row).'"'."\r\n";
    fwrite($handle, $csv);
}

fclose($handle);
?>
Gruss Dr Dau
 
Wie kann ich denn eine *.csv mit php erstellen, ohne die *.csv schon irgendwo liegen haben zu müssen? Oder geht das nicht? ich will mehrer csv's erstellen allerdings immer mit anderen namen und anderen Daten? thx ;)
 
bensky hat gesagt.:
Wie kann ich denn eine *.csv mit php erstellen, ohne die *.csv schon irgendwo liegen haben zu müssen?
Dass macht der Parameter "a" bei fopen() doch schon.
fopen() hat gesagt.:
Öffnet die Datei nur zum Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
bensky hat gesagt.:
ich will mehrer csv's erstellen allerdings immer mit anderen namen und anderen Daten?
Und wo genau ist das Problem?
Du könntest z.b. ein Formular anlegen über dass Du die jeweilige Tabelle auswählen kannst.
Hierbei könnte z.b. mysql_tablename() nützlich sein, so könntest Du im Formular ein Auswahlmenü generieren welches alle Tabellen aus der Datenbank auflistet.
Der Tabellenname könnte so auch gleichzeitig als Dateiname für die CSV-Datei dienen.

Beispiel:
PHP:
<?php
mysql_connect("localhost", "xxx", "xxx");
$datenbankname = "xxx"; // Die Variable dürfte wohl selbsterklärend sein.
 
if(isset($_POST['backup'])) {
    if(!empty($_POST['tabellenname'])) {
        mysql_select_db($datenbankname);
 
        $result = mysql_query("SELECT * FROM `".mysql_real_escape_string($_POST['tabellenname'])."`");
 
        // Dateizeiger wird auf den Anfang der CSV-Datei gesetzt und der Inhalt (sofern vorhanden) gelöscht.
        // Ist die CSV-Datei nicht vorhanden, wird versucht sie in Form von "tabellenname.csv" anzulegen und der Dateizeiger auf den Anfang gesetzt.
        $handle = fopen($_POST['tabellenname'].".csv", "w");
 
        while($row = mysql_fetch_assoc($result)) {
            $csv = '"'.implode('";"', $row).'"'."\r\n";
            fwrite($handle, $csv);
        }
        fclose($handle);
        
        // Link zum runterladen der CSV-Datei wird erstellt.
        echo "<a href=\"".$_POST['tabellenname'].".csv\">".$_POST['tabellenname'].".csv runterladen</a><br>\r\n";
        // Link zum löschen der CSV-Datei wird erstellt.
        echo "<a href=\"".$_SERVER['PHP_SELF']."?delete=".$_POST['tabellenname'].".csv\">".$_POST['tabellenname'].".csv löschen</a>\r\n";
    } else {
        echo "Du musst eine Tabelle auswählen!\r\n";
    }
}
 
// Wird ausgeführt wenn der Link zum löschen der CSV-Datei angeklickt wurde.
if(isset($_GET['delete'])) {
    if(!empty($_GET['delete'])) {
        $del = @unlink($_GET['delete']);
        if($del) {
            echo $_GET['delete']." wurde erfolgreich gelöscht.\r\n";
        } else {
            echo $_GET['delete']." konnte nicht gelöscht werden!\r\n";
        }
    }
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <select name="tabellenname">
        <option value="">Tabelle wählen</option>
<?php
// Auswahlmenü mit den vorhandenen Tabellen erstellen.
$result = mysql_list_tables($datenbankname);
$num_rows = mysql_num_rows($result);
 
for($i = 0; $i < $num_rows; $i++) {
    echo "\t<option value=\"".mysql_tablename($result, $i)."\">".mysql_tablename($result, $i)."</option>\r\n";
}
?>
    </select>
    <input type="submit" name="backup" value="Datenbank Backup">
</form>
 
Zurück