it-swarm.com.de

WP Datenbanktabelle in CSV-Datei

Ich arbeite am Erstellen eines Skripts, das eine benutzerdefinierte WordPress-Datenbanktabelle verwendet und in eine CSV-Datei exportiert. Ich kann es scheinbar nicht zum Laufen bringen. Kann mir jemand weiterhelfen

<?php
$parse_uri = explode( 'wp-admin', $_SERVER['SCRIPT_FILENAME'] );
require_once( $parse_uri[0] . 'wp-load.php' );
global $wpdb;
$result = $wpdb->get_results("SELECT * FROM wp_email_table;");
$i = 0;
foreach ($result as $row) {
$csv_output .= $row->Field.
$i++;
}
$csv_output .= "\n";

$values = $wpdb->get_results("SELECT * FROM wp_email_table;");
foreach ($values as $rowr) {    
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;
?> 

OK, so habe ich es noch etwas geändert und jetzt erhalte ich die folgende Fehlermeldung

Schwerwiegender Fehler: Objekt vom Typ stdClass kann nicht als Array in Zeile 8 verwendet werden

1
Phantom

Du hast ein paar Dinge falsch gemacht.

  1. Das erste ist, dass Sie sich eindeutig im WordPress-Kontext befinden. Verwenden Sie hierfür die API AJAX, anstatt wp-load.php einzuschließen. Das ist so gut wie nie der richtige Weg.
  2. get_results() verwendet standardmäßig ein Objekt, sodass beim Versuch, die Ergebnisse als Array zu verwenden, Fehler auftreten. ARRAY_A zur Argumentliste für diese Funktion hinzufügen (oder Objektsyntax verwenden)
  3. Codieren Sie das WordPress-Tabellenpräfix nicht hart
  4. $file ist nicht definiert
  5. Sie haben zwei Fragen, wenn Sie nur eine benötigen
  6. Ihre foreach und for sowie der zugehörige Code sind viel zu kompliziert.

Ich habe Ihren Tisch nicht zum Testen, aber das sollte nah sein.

function csv_pull_wpse_212972() {
  global $wpdb;
  $file = 'email_csv'; // ?? not defined in original code
  $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}email_table;",ARRAY_A);

  if (empty($results)) {
    return;
  }

  $csv_output = '"'.implode('";"',array_keys($results[0])).'";'."\n";;

  foreach ($results as $row) {
    $csv_output .= '"'.implode('";"',$row).'";'."\n";
  }
  $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;
}
add_action('wp_ajax_csv_pull','csv_pull_wpse_212972');

Um dies auszulösen, senden Sie eine Anfrage an http://sitename.com/wp-admin/admin-ajax.php?action=csv_pull. In WordPress können Sie das generieren (und sollten das generieren) mit $ajax_url = admin_url('admin-ajax.php?action=csv_pull');

2
s_ha_dum