Frage

Ich habe Daten in einer MySQL-Datenbank. Ich bin der Benutzer eine URL sendet ihre Daten aus als CSV-Datei zu erhalten.

Ich habe die E-Mails, den Link, MySQL Query usw. abgedeckt.

Wie kann ich, wenn sie auf den Link klicken, haben ein Pop-up eine CVS mit dem Datensatz von MySQL herunterladen?

Ich habe alle Informationen, um die Aufzeichnung bereits zu bekommen. Ich habe nicht nur sehen, wie PHP die CSV-Datei erstellen haben und lassen Sie sie mit einer CSV-Erweiterung eine Datei herunterladen.

War es hilfreich?

Lösung

Versuchen:

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");

echo "record1,record2,record3\n";
die;

etc

Edit: Hier ist ein Code-Snippet ich kodieren CSV Felder optional:

function maybeEncodeCSVField($string) {
    if(strpos($string, ',') !== false || strpos($string, '"') !== false || strpos($string, "\n") !== false) {
        $string = '"' . str_replace('"', '""', $string) . '"';
    }
    return $string;
}

Andere Tipps

header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");

function outputCSV($data) {
  $output = fopen("php://output", "wb");
  foreach ($data as $row)
    fputcsv($output, $row); // here you can change delimiter/enclosure
  fclose($output);
}

outputCSV(array(
  array("name 1", "age 1", "city 1"),
  array("name 2", "age 2", "city 2"),
  array("name 3", "age 3", "city 3")
));

php: // Ausgabe
fputcsv

Hier ist eine verbesserte Version der Funktion von php.net, die gebucht @ Andrew.

function download_csv_results($results, $name = NULL)
{
    if( ! $name)
    {
        $name = md5(uniqid() . microtime(TRUE) . mt_rand()). '.csv';
    }

    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename='. $name);
    header('Pragma: no-cache');
    header("Expires: 0");

    $outstream = fopen("php://output", "wb");

    foreach($results as $result)
    {
        fputcsv($outstream, $result);
    }

    fclose($outstream);
}

Es ist wirklich einfach zu bedienen und arbeitet gut mit MySQL (i) / PDO Ergebnismengen.

download_csv_results($results, 'your_name_here.csv');

Denken Sie daran, nach dem Aufruf, dies exit(), wenn Sie mit der Seite fertig sind.

Zusätzlich zu allen bereits gesagt, könnte man hinzufügen müssen:

header("Content-Transfer-Encoding: UTF-8");

Es ist sehr nützlich, wenn Dateien mit mehreren Sprachen in ihnen, wie Die Namen der Handhabung oder Städten.

Der Faden ist ein wenig alt, ich weiß, aber für die Zukunft und für noobs wie ich:

Alle anderen hier erklären, wie die CSV zu schaffen, sondern einen grundlegenden Teil der Frage verpassen: Wie zu verknüpfen. Um Download der CSV-Datei zu verknüpfen, verknüpfen Sie einfach auf die .php-Datei, die wiederum reagiert als eine CSV-Datei zu sein. Die PHP-Header tun. Dies ermöglicht es coole Sachen, wie Variablen in den Abfragezeichenfolgeflag hinzufügen und anpassen, um die Ausgabe:

<a href="my_csv_creator.php?user=23&amp;othervariable=true">Get CSV</a>

my_csv_creator.php kann mit den Variablen arbeiten im Abfragezeichenfolgeflag gegeben und zum Beispiel unterschiedliche oder kundenspezifische Datenbankabfragen verwenden, die Spalten der CSV ändern, personifizieren sie die Dateinamen und so weiter, z.

User_John_Doe_10_Dec_11.csv

Erstellen Sie Ihre Datei dann einen Verweis auf sie mit dem richtigen Header zurückzukehren Speichern unter auszulösen - bearbeiten Sie die folgenden je nach Bedarf. Legen Sie Ihre CSV-Daten in $ CSVData.

$fname = 'myCSV.csv';
$fp = fopen($fname,'wb');
fwrite($fp,$csvdata);
fclose($fp);

header('Content-type: application/csv');
header("Content-Disposition: inline; filename=".$fname);
readfile($fname);

Hier ist ein voll funktionierendes Beispiel PDO mit und einschließlich Spaltenüberschriften:

$query = $pdo->prepare('SELECT * FROM test WHERE id=?');
$query->execute(array($id));    
$results = $query->fetchAll(PDO::FETCH_ASSOC);
download_csv_results($results, 'test.csv'); 
exit();


function download_csv_results($results, $name)
{            
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename='. $name);
    header('Pragma: no-cache');
    header("Expires: 0");

    $outstream = fopen("php://output", "wb");    
    fputcsv($outstream, array_keys($results[0]));

    foreach($results as $result)
    {
        fputcsv($outstream, $result);
    }

    fclose($outstream);
}

Erste Daten als String mit Komma machen als das Trennzeichen (getrennt durch „“). So etwas wie diese

$CSV_string="No,Date,Email,Sender Name,Sender Email \n"; //making string, So "\n" is used for newLine

$rand = rand(1,50); //Make a random int number between 1 to 50.
$file ="export/export".$rand.".csv"; //For avoiding cache in the client and on the server 
                                     //side it is recommended that the file name be different.

file_put_contents($file,$CSV_string);

/* Or try this code if $CSV_string is an array
    fh =fopen($file, 'w');
    fputcsv($fh , $CSV_string , ","  , "\n" ); // "," is delimiter // "\n" is new line.
    fclose($fh);
*/

Hey Es funktioniert sehr gut .... !!!! Dank Peter Mortensen und Connor Burton

<?php
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");

ini_set('display_errors',1);
$private=1;
error_reporting(E_ALL ^ E_NOTICE);

mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("db") or die(mysql_error());

$start = $_GET["start"];
$end = $_GET["end"];

$query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00'  AND created<='{$end} 23:59:59'   ORDER BY id";
$select_c = mysql_query($query) or die(mysql_error());

while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
    $result.="{$row['email']},";
    $result.="\n";
    echo $result;
}

?>

Einfache Methode -

$data = array (
    'aaa,bbb,ccc,dddd',
    '123,456,789',
    '"aaa","bbb"');

$fp = fopen('data.csv', 'wb');
foreach($data as $line){
    $val = explode(",",$line);
    fputcsv($fp, $val);
}
fclose($fp);

So wird jede Zeile des $data Array zu einer neuen Linie von Ihrer neu erstellten CSV-Datei gehen. Es funktioniert nur, nur für PHP 5 und höher.

Sie können einfach Ihre Daten in CSV schreiben mit fputcsv Funktion. Lassen Sie uns das Beispiel unten anschauen. Schreiben Sie die Liste Array in eine CSV-Datei

$list[] = array("Cars", "Planes", "Ships");
$list[] = array("Car's2", "Planes2", "Ships2");
//define headers for CSV 
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=file_name.csv');
//write data into CSV
$fp = fopen('php://output', 'wb');
//convert data to UTF-8 
fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
foreach ($list as $line) {
    fputcsv($fp, $line);
}
fclose($fp);

Der einfachste Weg, einen eigenen CSV-Klasse wie folgt aus:

$csv = new csv();
$csv->load_data(array(
    array('name'=>'John', 'age'=>35),
    array('name'=>'Adrian', 'age'=>23), 
    array('name'=>'William', 'age'=>57) 
));
$csv->send_file('age.csv'); 

Statt:

$query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00'  AND created<='{$end} 23:59:59'   ORDER BY id";
$select_c = mysql_query($query) or die(mysql_error()); 

while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
    $result.="{$row['email']},";
    $result.="\n";
    echo $result;
}

Verwendung:

$query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00'  AND created<='{$end} 23:59:59'   ORDER BY id";
$select_c = mysql_query($query) or die(mysql_error()); 

while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
    echo implode(",", $row)."\n";
}

Schon sehr gute Lösung kam. Ich Puting nur den Gesamt Code, so dass ein Neuling total Hilfe bekommen

<?php
extract($_GET); //you can send some parameter by query variable. I have sent table name in *table* variable

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$table.csv");
header("Pragma: no-cache");
header("Expires: 0");

require_once("includes/functions.php"); //necessary mysql connection functions here

//first of all I'll get the column name to put title of csv file.
$query = "SHOW columns FROM $table";
$headers = mysql_query($query) or die(mysql_error());
$csv_head = array();
while ($row = mysql_fetch_array($headers, MYSQL_ASSOC))
{
    $csv_head[] =  $row['Field'];
}
echo implode(",", $csv_head)."\n";

//now I'll bring the data.
$query = "SELECT * FROM $table";
$select_c = mysql_query($query) or die(mysql_error()); 

while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
    foreach ($row as $key => $value) {
            //there may be separator (here I have used comma) inside data. So need to put double quote around such data.
        if(strpos($value, ',') !== false || strpos($value, '"') !== false || strpos($value, "\n") !== false) {
            $row[$key] = '"' . str_replace('"', '""', $value) . '"';
        }
    }
    echo implode(",", $row)."\n";
}

?>

Ich habe diesen Code in csv-download.php gespeichert

Nun sehen, wie ich diese Daten verwendet haben, CSV-Datei zum Download

<a href="csv-download.php?table=tbl_vfm"><img title="Download as Excel" src="images/Excel-logo.gif" alt="Download as Excel" /><a/>

Also, wenn ich geklickt haben, den Link die Datei herunterladen, ohne mich zu nehmen in CSV-download.php Seite auf Browser.

Um es als CSV senden und haben es den Dateinamen geben, verwenden header ():

http://us2.php.net/header

header('Content-type: text/csv');
header('Content-disposition: attachment; filename="myfile.csv"');

Was die CSV macht sich, Sie würde nur Schleife durch die Ergebnismenge, die Formatierung der Ausgabe und sendet sie, wie würden Sie andere Inhalte.

Ihren eigenen CSV-Code zu schreiben, ist wahrscheinlich eine Verschwendung von Zeit, nur ein Paket verwenden, wie Liga / csv - mit all den schwierigen Sachen für Dich beschäftigt, ist die Dokumentation gut und es ist sehr stabil / zuverlässig:

http://csv.thephpleague.com/

Sie müssen zu Composer. Wenn Sie nicht wissen, was Komponist ich sehr empfehlen Ihnen einen Blick: https://getcomposer.org/

<?
    // Connect to database
    $result = mysql_query("select id
    from tablename
    where shid=3");
    list($DBshid) = mysql_fetch_row($result);

    /***********************************
    Write date to CSV file
    ***********************************/

    $_file = 'show.csv';
    $_fp = @fopen( $_file, 'wb' );

    $result = mysql_query("select name,compname,job_title,email_add,phone,url from UserTables where id=3");

    while (list( $Username, $Useremail_add, $Userphone, $Userurl) = mysql_fetch_row($result))
    {
        $_csv_data = $Username.','.$Useremail_add.','.$Userphone.','.$Userurl . "\n";
        @fwrite( $_fp, $_csv_data);
    }
    @fclose( $_fp );
?>

Wie in CSV-Datei mit PHP-Skript schreiben? Eigentlich war ich auch, dass die Suche auch. Es ist eine Art einfacher Aufgabe mit PHP. fputs (Handler, Inhalt) - Diese Funktion funktioniert für mich effizient. Zuerst müssen Sie die Datei öffnen, in dem Sie Inhalte mit fopen ($ CSVFileName, ‚wb‘).

schreiben müssen
$CSVFileName = “test.csv”;
$fp = fopen($CSVFileName, ‘wb’);

//Multiple iterations to append the data using function fputs()
foreach ($csv_post as $temp)
{
    $line = “”;
    $line .= “Content 1″ . $comma . “$temp” . $comma . “Content 2″ . $comma . “16/10/2012″.$comma;
    $line .= “\n”;
    fputs($fp, $line);
}

Hier ist ein Ich habe früher getan, um Daten zwischen bestimmten Terminen greifen. Hoffe, es hilft.

<?php
    header("Content-type: application/csv");
    header("Content-Disposition: attachment; filename=file.csv");
    header("Pragma: no-cache");
    header("Expires: 0");

    ini_set('display_errors',1);
    $private=1;
    error_reporting(E_ALL ^ E_NOTICE);

    mysql_connect("localhost", "user", "pass") or die(mysql_error());
    mysql_select_db("db") or die(mysql_error());

    $start = mysql_real_escape_string($_GET["start"]);
    $end = mysql_real_escape_string($_GET["end"]);

    $query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00'  AND created<='{$end} 23:59:59'   ORDER BY id";
    $select_c = mysql_query($query) or die(mysql_error());

    while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
    {
        $result.="{$row['email']},";
        $result.="\n";
        echo $result;
    }
?>

in der $output Variable Setzen Sie die CSV-Daten und Echo mit den richtigen Header

header("Content-type: application/download\r\n");
header("Content-disposition: filename=filename.csv\r\n\r\n");
header("Content-Transfer-Encoding: ASCII\r\n");
header("Content-length: ".strlen($output)."\r\n");
echo $output;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top