Yerine tablo sütun başlıklarını kullanarak, uygun CSV başlık başlıklarına gerekiyor

2 Cevap php

Sonra ben bir elektronik tablo uygulaması kullanarak bu dosyayı açmak, bir CSV dosyasının içine bir tablo ihracat bir işlevi var.

Uygun her sütun isim CSV başlığını ayarlamak için bir yolu var mı.

Örneğin:

Ben bir tablo ad, soyadı, e-posta, ve yorumlar içermektedir var.

Fname, lname, e-posta, yorum: Ve tablo olarak ayarlanır

Yani tablo ihracat gibi:

fname, lname, email, comments
john, doe, johndoe@email.com, I am John Doe this is my comment

Ben daha okunabilir bir şey başlıkları (fname, lname, e-posta, yorum) değiştirmek istiyorum, bu yüzden bu gibi olurdu:

First Name, Last Name, Email, Comments
john, doe, johndoe@email.com, I am John Doe this is my comment

İşte var kodu:

function exportNamesCommentsCSV($table,$filename = 'volunteer_2009_comments.csv') {
    $csv_terminated = "\n";
    $csv_separator = ",";
    $csv_enclosed = '"';
    $csv_escaped = "\\";
    $sql_query = "select lname, fname, comments from volunteers_2009";

    // Gets the data from the database
    $result = mysql_query($sql_query);
    $fields_cnt = mysql_num_fields($result);

    $schema_insert = '';

    for ($i = 0; $i < $fields_cnt; $i++) {
    	$l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,
    		stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;
    	$schema_insert .= $l;
    	$schema_insert .= $csv_separator;
    } // end for

    $out = trim(substr($schema_insert, 0, -1));
    $out .= $csv_terminated;

    // Format the data
    while ($row = mysql_fetch_array($result)) {
    	$schema_insert = '';
    	for ($j = 0; $j < $fields_cnt; $j++) {
    		if ($row[$j] == '0' || $row[$j] != '') {

    			if ($csv_enclosed == '') {
    				$schema_insert .= $row[$j];
    			} else {
    				$schema_insert .= $csv_enclosed . 
    				str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $row[$j]) . $csv_enclosed;
    			}
    		} else {
    			$schema_insert .= '';
    		}

    		if ($j < $fields_cnt - 1) {
    			$schema_insert .= $csv_separator;
    		}
    	} // end for

    	$out .= $schema_insert;
    	$out .= $csv_terminated;
    } // end while

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Length: " . strlen($out));
    header("Content-type: text/x-csv");
    header("Content-Disposition: attachment; filename=$filename");
    echo $out;
    exit;
}

2 Cevap

CSV dosyasının başlığı sadece ilk satırı. Yani bu bloğu değiştirmek istiyorum:

for ($i = 0; $i < $fields_cnt; $i++) {
    $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,
            stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;
    $schema_insert .= $l;
    $schema_insert .= $csv_separator;
} // end for

$out = trim(substr($schema_insert, 0, -1));
$out .= $csv_terminated;

Sen çizgisinde, çok basit bir şeyle değiştirmek olabilir:

$out .= "First Name, Last Name, Email, Comments\n";

Ben tamamen soru yanlış sürece.

Edit: Sizin örnek kod belirli bir sorgu gösterir. Birden fazla sorgular için çalışmak gerekiyorsa, o dost isimlerin bir kaynak bulmak gerekecek. Örneğin, bir argüman veya store them in the database olarak isimlerini geçebileceği.

Sen gerektiği gibi alan adlarını yeniden adlandırmak için sorguyu değiştirebilirsiniz.

$sql_query = "select lname, fname, comments from volunteers_2009";

Oldu

$sql_query = "select fname as 'First Name', lname as 'Last Name'," 
           . "Comments from volunteers_2009";