2015-12-08 80 views
2

我有這個PhP代碼在用戶點擊一個按鈕,它會自動下載一個.csv文件,它裏面是不同種類的信息。所以這個.csv文件是逗號分隔的,所以只要有一個逗號,指針就會進入下一個單元格。但我想將分隔符更改爲逗號以外的任何內容,因爲我的某些數據具有逗號,例如「位置」列中包含501A和501B等數據,並且它需要位於單個單元格中。但是,它會轉到另一個單元格,因此當我以縱向打印時,id不適合。所以我只是想問一下如何改變分隔符並用逗號來維護數據?謝謝!PhP導出.csv從逗號更改分隔符到其他人

<?php 
define("DB_HOST", "localhost"); 
define("DB_USER", "root"); 
define("DB_PASS", ""); 
define("DB_NAME", "envoy"); 
function db_connect() { 

    $db = mysqli_connect(DB_HOST, DB_USER, DB_PASS) or die("ERROR!"); 
    mysqli_select_db($db, DB_NAME); 

    return $db; 
} 

$db = db_connect(); 
date_default_timezone_set("EST5EDT"); 
$date = date('m-d-Y,h.i.sa'); 
$date2 = date('m/d/Y'); 
$filename = $date.'.csv'; 
//$fp = fopen($filename,"w"); 

$sql2 = "SELECT sku as Sku,name as 'Brochure Name',location as Location FROM brochureinfo where modified LIKE '$date2' ORDER BY name "; 
$rs2 = mysqli_query($db, $sql2); 
$total_records = mysqli_num_rows($rs2); 
mysqli_close($db); 

if($total_records>0){ 
$row = mysqli_fetch_assoc($rs2); 

$seperator = ""; 
$comma = ""; 

foreach ($row as $name => $value){ 
    $seperator.= $comma. ''.str_replace('','""',$name); 
    $comma=","; 

} 
$seperator .= "\n"; 

//echo $seperator; 




mysqli_data_seek($rs2,0); 

while ($row = mysqli_fetch_assoc($rs2)){ 


//$seperator = ""; 
$comma = ""; 

foreach ($row as $name => $value){ 

      $value = str_replace(array("\r" , "\n", "\r\n", "\n\r") ,'' , $value); 
      $value = str_replace('</b><br>','',$value); 
      $value = str_replace('<b>','',$value); 
      $value = str_replace('<br>','',$value); 
      $value = str_replace('<br />','',$value); 

    $seperator.= $comma. ''.str_replace('','""',$value); 
    $comma=","; 

    } 
$seperator .= "\n"; 
} 

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

echo $seperator; 
} 
else{ 
    header('Content-Type: text/csv'); 
header("Content-Disposition: attachment; filename=$date.csv"); 
header('Pragma: no-cache'); 
echo "No record modified today";} 

回答

5

您可以CSV格式使用fputcsv()爲下一代數據

int fputcsv (resource $handle , array $fields [, string $delimiter = "," [, string $enclosure = '"' [, string $escape_char = "\" ]]]) 

編輯:

你的代碼將看起來somethiing這樣的:

<?php 
define("DB_HOST", "localhost"); 
define("DB_USER", "root"); 
define("DB_PASS", ""); 
define("DB_NAME", "envoy"); 
function db_connect() { 

    $db = mysqli_connect(DB_HOST, DB_USER, DB_PASS) or die("ERROR!"); 
    mysqli_select_db($db, DB_NAME); 

    return $db; 
} 

$db = db_connect(); 
date_default_timezone_set("EST5EDT"); 
$date = date('m-d-Y,h.i.sa'); 
$date2 = date('m/d/Y'); 
$filename = $date.'.csv'; 
$fp = fopen($filename,"w"); 

$sql2 = "SELECT sku as Sku,name as 'Brochure Name',location as Location FROM brochureinfo where modified LIKE '$date2' ORDER BY name "; 
$rs2 = mysqli_query($db, $sql2); 
$total_records = mysqli_num_rows($rs2); 
mysqli_close($db); 

if ($total_records>0) { 
    $row = mysqli_fetch_assoc($rs2); 

    $delimiter = ';'; 
    $data = []; 
    foreach ($row as $name => $value){ 
     $data[] = $name; 
    } 
    fputcsv($fp, $data, $delimiter); 


    mysqli_data_seek($rs2,0); 

    while ($row = mysqli_fetch_assoc($rs2)){ 
     fputcsv($fp, $row, $delimiter); 
    } 

    fclose($fp); 

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

    echo $seperator; 
} 
else { 
    fclose($fp); 

    header('Content-Type: text/csv'); 
    header("Content-Disposition: attachment; filename=$date.csv"); 
    header('Pragma: no-cache'); 
    echo "No record modified today"; 
} 
+0

那麼我會替換哪一個?對不起回合愚蠢的問題 – jeeeee

+0

好吧,編輯,見上面 – mnv

+0

謝謝,但我不能使用fopen();因爲它會在我的.php文件的文件夾中生成一個文件。但我試圖用fopen並刪除$ seperator現在它不顯示任何東西。 – jeeeee

0

使用PHP函數,fputcsv把每一行都作爲arr ay(其中每個列的值將成爲數組的一個項目),所以你不需要擔心內部的逗號。由於您直接下載文件,因此請使用PHP輸出作爲文件句柄。請記住在輸出開始之前設置標題。

$output = fopen('php://output', 'w'); 

// output the column headings/ values 
fputcsv($output, array('Column 1', 'Column 2', 'Column 3'); 
相關問題