Question

Disons que j'ai stocké une requête dans une variable appelée $ query. Je souhaite créer un hyperlien appelé "export au format CSV". sur la page de résultats. Comment puis-je faire cela?

Était-ce utile?

La solution

$query = "SELECT * FROM table_name";

$export = mysql_query ($query ) or die ( "Sql error : " . mysql_error( ) );

$fields = mysql_num_fields ( $export );

for ( $i = 0; $i < $fields; $i++ )
{
    $header .= mysql_field_name( $export , $i ) . "\t";
}

while( $row = mysql_fetch_row( $export ) )
{
    $line = '';
    foreach( $row as $value )
    {                                            
        if ( ( !isset( $value ) ) || ( $value == "" ) )
        {
            $value = "\t";
        }
        else
        {
            $value = str_replace( '"' , '""' , $value );
            $value = '"' . $value . '"' . "\t";
        }
        $line .= $value;
    }
    $data .= trim( $line ) . "\n";
}
$data = str_replace( "\r" , "" , $data );

if ( $data == "" )
{
    $data = "\n(0) Records Found!\n";                        
}

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=your_desired_name.xls");
header("Pragma: no-cache");
header("Expires: 0");
print "$header\n$data";

Autres conseils

ehm?

<a href="yourexport.php" title="export as csv">Export as CSV</a>

et si vous recherchez un script qui peut le faire:

$myArray = array ();

$fp = fopen('export.csv', 'w');

foreach ($myArray as $line) {
    fputcsv($fp, split(',', $line));
}

fclose($fp);

CSV = valeurs séparées par des virgules = séparez vos valeurs par des virgules

vous devez afficher / afficher votre résultat ligne par ligne, en les séparant par une virgule (,).

Je suppose que votre $ requête est l'ensemble de résultats de votre requête, qui est un tableau associatif:

while($query = mysql_fetch_assoc($rs)) {
  // loop till the end of records
  echo $query["field1"] . "," . $query["field2"] . "," . $query["field3"] . "\r\n";
}

où $ rs est le descripteur de ressource.

Pour que le navigateur ouvre une boîte de téléchargement, vous devez définir l'en-tête au début du fichier (en supposant que votre nom de fichier est export.csv):

header("Expires: 0");
header("Cache-control: private");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Description: File Transfer");
header("Content-Type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=export.csv");

C'est tout!

p.s. Cette méthode ne laissera pas de fichier physique sur le serveur. Si vous souhaitez générer un fichier sur le serveur, utilisez les fonctions traditionnelles fopen et fwrite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top