web-dev-qa-db-fra.com

Exportez wordpress table pour exceller

J'ai créé PHP scripts avant d'exporter une table de base de données au format .xls comme ceci:

$select = "SELECT * FROM tracking";
$export = mysql_query ( $select ) or die ( "Sql error : " . mysql_error( )  );
$fields = mysql_num_fields ( $export );
$file = '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";
 }

$filename = $file."_".date("M-d-Y");

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

Ce que j'aimerais savoir, c'est comment "convertir" cela au format wordpress en utilisant la classe $ wpdb? Je peux obtenir la requête initiale pour sélectionner les données de la table que je veux, mais je me perds dans certaines sémantiques de la classe wpdb. Je voulais aussi savoir où je mettrais ce code dans wordpress, donc si un utilisateur clique sur un lien, il lancera cette requête et téléchargera le fichier .xls?

Toute aide est grandement appréciée! Ce site est génial!

2
Rob Bennet

Pourquoi ne pas utiliser la syntaxe SELECT INTO OUTFILE:

$wpdb->query("SELECT * INTO OUTFILE '/path/to/file' 
 FIELDS TERMINATED BY '\t' 
 LINES TERMINATED BY '\n' 
 FROM tracking");
6
DTest

créez ceci en tant que fichier 'export_data.php'. Puis appelez ce php depuis le lien

<?php
$Host = 'localhost';
$user = 'mysqlUser';
$pass = 'myUserPass';
$db = 'myDatabase';
$table = 'products_info';
$file = 'export';

$link = mysql_connect($Host, $user, $pass) or die("Can not connect." . mysql_error());
mysql_select_db($db) or die("Can not connect.");

$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$i = 0;
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$csv_output .= $row['Field']."; ";
$i++;
}
}
$csv_output .= "\n";

$values = mysql_query("SELECT * FROM ".$table."");
while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= $rowr[$j]."; ";
}
$csv_output .= "\n";
}

$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-Excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
print $csv_output;
exit;
?>
4
sruthi

Si vous avez phpmyadmin, allez simplement à exporter et sélectionnez Excel au lieu deSQL.

1
Ashfame

Je suis vraiment en retard pour aider avec ma réponse .. j'espère :), mais je vise toute autre personne qui a besoin d'une fonction WordPress mise à jour pour exporter un tableau personnalisé dans un fichier CSV de Nice and Clean Row Display

    function ns_contact_form_csv_pull() {

       global $wpdb;

       $table = 'ns_contact_form';// table name
       $file = 'ns_contact_form_csv'; // csv file name
       $results = $wpdb->get_results("SELECT * FROM $wpdb->prefix$table",ARRAY_A );

       if(count($results) > 0){
          foreach($results as $result){
          $result = array_values($result);
          $result = implode(", ", $result);
          $csv_output .= $result."\n";
        }
      }

      $filename = $file."_".date("Y-m-d_H-i",time());
      header("Content-type: application/vnd.ms-Excel");
      header("Content-disposition: csv" . date("Y-m-d") . ".csv");
      header( "Content-disposition: filename=".$filename.".csv");
      print $csv_output;
      exit;

    }
   add_action('wp_ajax_csv_pull','ns_contact_form_csv_pull');

Téléchargez le fichier CSV (vous devez être connecté). Ajoutez simplement cette URL à votre navigateur http://example.com/wp-admin/admin-ajax.php?action=csv_pull ... changez de domaine avec le vôtre :)

Vous pouvez l'appeler n'importe où dans WordPress en utilisant:

$ajax_url = admin_url('admin-ajax.php?action=csv_pull');
1
Nuno Sarmento

Quelque chose comme ça:

$results = $wpdb->get_results('SELECT * FROM tracking;');

Voir SELECT résultats génériques dans le Codex pour plus de détails.

Pas sûr de la meilleure façon d'implémenter un lien vers cela, une page avec un modèle nommé personnalisé pourrait faire l'affaire.

0
Rarst