# [GELÖST] MySQL Tabelle als .csv per php script runterladen?



## Sn0w1 (14. Juni 2012)

*[GELÖST] MySQL Tabelle als .csv per php script runterladen?*

Moin zusammen (ich mal wieder, beschwerden ab sofort zu <<Painkiller>> weil ich hier soviel rumfrage )..


Also ich habe in meiner Datenbank jetzt genau eine Tabelle (siehe letzten Thread) und diese Tabelle kann man ja bekanntlich als sql, csv etc etc runterladen.

Nun möchte ich in den Adminbereich der homepage einen kleinen Text einbauen der eigentlich ein Link ist: z.B: Newsletterdaten herunterladen

Was soll der machen? Naja ganz klar, beim raufklicken den download der .csv datei dieser tabelle starten..

Wäre gut wnen einer wüsste wie des mit php funktioniert.. Das Projekt msus heute Nacht fertig werden und ich steh noch vor sooooooooooooooooooooooooooooooooooooooooooo einem Berg arbeit.. ://


Sn0w1


----------



## cann0nf0dder (14. Juni 2012)

*AW: MySQL Tabelle als .csv per php script runterladen?*

Webmaster Resource – Daten aus MySQL in CSV-Datei exportieren mit PHP

ka ob du des noch in ner datei speichern musst oder ob das ganze als echo direkt im browser landet 
fopen fwrite fclose etc... wäre ne möglichkeit, dann halt im anschluss download der datei anbieten anstelle von echo


----------



## Spacerat (14. Juni 2012)

Das script, was das Kanonenfutter gezeigt hat, stellt das zum Download bereit.
Allerdings ist der Weg mit dem "jede Spalte einzeln eintragen" darin echt mies und auch so sehe ich ein paar Zeilen, die EIGENTLICH so nicht funktionieren können SOLLTEN.
Ich mach dir nachher zu Haus ma fix n Script hin, das dann die Zeilen mit variabel vielen Spalten exportiert, obwohl ich gerad erst vom neuen Münsteraner Codingmarathon (Büro) komme


----------



## cann0nf0dder (14. Juni 2012)

*AW: MySQL Tabelle als .csv per php script runterladen?*

da keine php version vermerkt war hab ich einfach nach was simplen geschaut was irgendwie überall laufen sollte ... ansonsten kann man den array ja auch mit fputcsv ab 5.x direkt als csv formatieren


----------



## Sn0w1 (14. Juni 2012)

*AW: MySQL Tabelle als .csv per php script runterladen?*

Naja wie auch immer ich hab erstmal fahrstunde -.- und morgen früh muss das sch**ß script stehen :S den quellcode vom aktuellen php script findet ihr ja in dem letzten thread den ich zum thema mysql gestellt hatte..


Sn0w1


----------



## Spacerat (14. Juni 2012)

*AW: MySQL Tabelle als .csv per php script runterladen?*



cann0nf0dder schrieb:


> da keine php version vermerkt war hab ich einfach nach was simplen geschaut was irgendwie überall laufen sollte ... ansonsten kann man den array ja auch mit fputcsv ab 5.x direkt als csv formatieren


 
Darum gings ja nicht  Ging eher um die Spalten"limitierung" auf 3. Was ist denn, wenn die Tabelle im Ernstfall 100 Spalten hat, dann sieht er alt aus 
Das automatisier ich mal eben jetzt. Bin ja endlich zu Haus 


edit: Einfach, aber wohl doch effizient 
Merke richtig, wie mir OOP fehlt 

```
<?php

	// Tabellenname
	define("select_table", "newsletter");
	// Trennzeichen
	define("csv_delimeter", ";");

	// Datenbankeinstellungen
	define("db_user", "root");
	define("db_password", "");
	define("db_server", "localhost");
	define("db_db_name", "datenbank");


	// ---- !!! ab hier nichts mehr verändern !!! --------------

	// Verbinden und Datenbank auswählen
	mysql_connect(db_server, db_user, db_password) or die(mysql_error());
	mysql_select_db(db_db_name) or die(mysql_error());

	// Abfrage
	$sql = "SELECT * "
		  ."FROM " . select_table . " "
		  ."LIMIT 65534 "; // Maximale Zeilen für 1 Dokument (+ Titelzeile)
		 
	// Abfrage ausführen
	$result = mysql_query($sql) or die(mysql_error());

	$result_row = array();
	// jede Zeile bearbeiten
	while ( $array_result = mysql_fetch_assoc($result) )
	{
		// keine Titelzeile vorhanden? (Array leer?)
		if ( empty($result_row) )
		{
			// erste Zeile initialisieren
			$result_row[] = "";
			$row_data = array();
			$index = count($result_row)-1; // Index holen
			// Schleife durchlaufen für die Titelzeile
			foreach ( array_keys($array_result) as $key_name )
			{
				$row_data[] .= "\"" . $key_name . "\"";
			}
			$result_row[$index] = implode(csv_delimeter, $row_data);
			unset($row_data);
		}
		// neue Zeile initialisieren
		$result_row[] = "";
		$row_data = array();
		$index = count($result_row)-1;
		foreach ( $array_result as $key => $value )
		{
			$row_data[] .= "\"" . $value . "\"";
		}
		$result_row[$index] = implode(csv_delimeter, $row_data);
		unset($row_data);
	}

	// Header setzen
	header('Content-Type: text/x-csv');
	header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
	header('Content-Disposition: attachment; filename=download.csv');
	header('Pragma: no-cache');

	echo implode(PHP_EOL, $result_row);

?>
```


----------



## Sn0w1 (14. Juni 2012)

*AW: MySQL Tabelle als .csv per php script runterladen?*

Moin nochmal.. Danke für den super Code, der funktioniert fast perfekt.. Das einzige was im Moment noch ein wenig unschön ist ist folgendes:




			Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.
        



Er nimmt den Quellcode der Seite mit rüber.. Kann man das noch rausnehmen also konkret den code von Spacerat so ändenr das er nur den Inhalt vom main div nimmt? Das wäre es dann eigentlich auch schon, der rest ist einfach.. toP!  Danke )

Gruß
Torben aka Sn0w1


----------



## Spacerat (14. Juni 2012)

*AW: MySQL Tabelle als .csv per php script runterladen?*

Die Datei muss einfach aufgerufen werden. Wenn du also einen Link wie 
	
	



```
<a href="ordner/export_csv.php">Exportieren</a>
```
 hast, reicht das vollkommen aus. Es muss keine Ausgabe davor


----------



## Sn0w1 (14. Juni 2012)

*AW: MySQL Tabelle als .csv per php script runterladen?*



Spacerat schrieb:


> Die Datei muss einfach aufgerufen werden. Wenn du also einen Link wie
> 
> 
> 
> ...


 

Ooooh ich könnt dir knutschen ) Danke danke danke danke danke ))


----------

