PHP到CSV未正确输出字段
我试图将我的PHP代码输出到一个可下载的CSV文件,到目前为止,我能够做到这一点,但是目前,输出并没有将字段数据放在单独的列中。相反,它将所有内容放在一列中,除此之外,它还会在相邻的列中显示邮政编码。有人知道这是为什么吗PHP到CSV未正确输出字段,php,mysql,Php,Mysql,我试图将我的PHP代码输出到一个可下载的CSV文件,到目前为止,我能够做到这一点,但是目前,输出并没有将字段数据放在单独的列中。相反,它将所有内容放在一列中,除此之外,它还会在相邻的列中显示邮政编码。有人知道这是为什么吗 <?php header("Content-type: text/csv"); header("Cache-Control: no-store, no-cache"); header('Content-Disposition: attachment; filena
<?php
header("Content-type: text/csv");
header("Cache-Control: no-store, no-cache");
header('Content-Disposition: attachment; filename="filename.csv"');
$outstream = fopen("php://output",'w');
if ($db_found) {
// Select all fields from bodyshops_master_network table
$SQL = "SELECT * FROM bodyshops_master_network";
$result = mysql_query($SQL);
while ( $db_field = mysql_fetch_assoc($result) ) {
// Splits the arrays
$row = explode(",", $db_field['postcodes_covered']);
$dealer_code = $db_field['dealer_code'];
$dealer_name = $db_field['dealer_name'];
$bodyshop_id = $db_field['bodyshop_id'];
$bodyshop_name = $db_field['bodyshop_name'];
$address1 = $db_field['address1'];
$address2 = $db_field['address2'];
$address3 = $db_field['address3'];
$address4= $db_field['address4'];
$address5 = $db_field['address5'];
$postcode = $db_field['postcode'];
$bo_tel = $db_field['BO_tel'];
$bo_email = $db_field['BO_email'];
$bc_name = $db_field['BC_name'];
$equity_contract = $db_field['equity_contract'];
echo "<pre>";
foreach ($row as $value) {
echo $dealer_code . " ";
echo $dealer_name . " ";
echo $bodyshop_id . " ";
echo $bodyshop_name . " ";
echo $address1 . " ";
echo $address2 . " ";
echo $address3 . " ";
echo $address4 . " ";
echo $address5 . " ";
echo $postcode . " ";
echo $bo_tel . " ";
echo $bo_email . " ";
echo $bc_name . " ";
echo $equity_contract . " ";
echo $value. "<BR>";
fputcsv($outstream, $row, ',', '"');
}
echo "</pre>";
}
mysql_close($db_handle);
} else {
print "Database NOT Found ";
mysql_close($db_handle);
fclose($outstream);
}
?>
好吧,你在做一些很奇怪的事情。您以两种方式输出内容
首先,使用echo
以正常方式输出内容。很公平
其次,您可以使用fputcsv
输出内容,其中文件处理程序会导致php://output
。也很公平
但你不应该同时做这两件事,并期望它能无缝地工作。您需要一个CSV文件,因此最好的方法是使用fputcsv
输出所有数据。目前,您的一些数据被封装为CSV文件,而有些则不是。这将导致您不真正想要的输出
我想你想要这样的东西:
fputcsv
希望数据是一个数组,所以我们给它一个数组。单独的数组字段将是CSV输出中的单独列。我们不回显任何数据:我们将其存储在数组中,然后将其提供给fputcsv
您犯的第二个错误是将$row
而不是$value
发送到fputcsv
。这意味着您正在发送从数据库行收到的所有邮政编码
最后,您不需要
另一方面,您确实应该有一个更好的数据库结构。如果您有一个邮政编码表和一个单独的车身修理厂表以及一个链接它们的外键,那么检索数据的代码会简单得多,将来搜索和更新数据也会简单得多。您能澄清一下您的输出是什么吗?我无法计算出除了CSV文件中的邮政编码之外,你是如何得到任何东西的。而且,这看起来是一个非常糟糕的数据库结构。你真的应该在一个单独的表中有邮政编码,在bodyshops\u master\u network
表中有一个外键。我的输出是foreach循环中回显的所有数据字段和邮政编码,但是,它不会将它们放在单独的列中。例如:。在文本编辑器中打开生成的CSV,并向我们显示其外观。所有字段都被转储到第一列中,并且应该位于单独的列中,因为它们是不同的数据字段。此外,邮政编码(ST16、ST17、ST18…等)应该垂直成行显示,而不是水平显示。这就解释了为什么我的输出很奇怪。非常感谢。
foreach ($row as $value) {
$output = array(
$dealer_code,
$dealer_name,
$bodyshop_id,
$bodyshop_name,
$address1,
$address2,
$address3,
$address4,
$address5,
$postcode,
$bo_tel,
$bo_email,
$bc_name.
$equity_contract,
$value
);
fputcsv($outstream, $output, ',', '"');
}