用php问题写入csv

时间:2017-03-27 11:28:41

标签: php file csv writing

我有问题。我试图将数据库中的一些数据转换为.csv表。

$fn=fopen($path.$filename, "w");

$addstring = file_get_contents($path.$filename);

$addstring = 'Azonosito;Datum;Ido;Leiras;IP-cim;allomasnév;MAC-cim;Felhasznalonev;Tranzakcioazonosito;Lekerdezes eredmenye;Vizsgalat ideje;Korrelacios azonosito;DHCID;';
/*$addstring .= "\n";*/

$sql="select * from dhcpertekeles.dhcpk";
$result =mysqli_query($conn, $sql);

if ($result=mysqli_query($conn,$sql))
  {
   while ($row=mysqli_fetch_row($result))
   {

    $addstring .= "\n".$row[0].";".$row[1].";".$row[2].";".$row[3].";".$row[4].";".$row[5].";".$row[6].";".$row[7].";".$row[8].";".$row[9].";".$row[10].";".$row[11].";".$row[12].";";

 };
};

    /*file_put_contents($path.$filename, $addstring);*/

    fwrite($fn, $addstring);
    fclose($fn);

数据采用以下格式: 第一个addstring包含列名,没有问题

第二个(addstring。=)包含数据: ID($ row [0]),Date($ row [1]),Time($ row [2]),Description($ row [3]),IP($ row [4]),计算机名($ row) [5]),MAC($ row [6]),User($ row [7])(空),Transactionid($ row [8]),查询结果($ row [9]),查询时间($ row) [10]),相关id($ row [11])(空),DHCID($ row [12])(空)

它基本上是每日DHCP服务器数据,上传到数据库。现在,代码工作,它确实写了我想要的所有csv,但有2个问题。

1,代码出于某种莫名其妙的原因,在包含数据的行之间的csv表中插入一个空行。删除$ row [12]解决了这个问题。我尝试删除特殊字符,将空格转换为可以看到的东西,甚至将空字符串转换为可以看到的字符串。然而没有任何实际工作,我甚至尝试了file_puts_content(第二个问题相同)而不是fwrite,但没有。同样的事情不断发生。如果我删除\ n它将起作用,但第二行以后将错误地放在右边1列。

2,由于某种原因,最后2个字符将从csv中删除。插入到csv中的字符串在将其写入文件之前仍包含所述2个字符。尝试了fwrite和file_puts_content。

对于.csv格式,数据列除以;和\ n。

的行

还尝试用libre office和excel阅读文件,认为它可能是excel,但是没有。

2 个答案:

答案 0 :(得分:1)

尝试使用fputcsv()功能。我没有测试以下代码,但我认为它应该工作。

$file = fopen($path . $filename, 'w');

$header = array(
    'Azonosito', 
    'Datum', 
    'Ido', 
    'Leiras', 
    'IP-cim', 
    'allomasnév', 
    'MAC-cim', 
    'Felhasznalonev', 
    'Tranzakcioazonosito', 
    'Lekerdezes eredmenye', 
    'Vizsgalat ideje', 
    'Korrelacios azonosito', 
    'DHCID'
);

fputcsv($file, $header, ';');

$sql = "select * from dhcpertekeles.dhcpk";
$result = mysqli_query($conn, $sql);

if ($result = mysqli_query($conn, $sql)) {
    while ($row = mysqli_fetch_row($result)) {
        fputcsv($file, $row, ';');
    }
}

fclose($file);

答案 1 :(得分:0)

$row[12] = strtr($row[12], array("\n"=>'', "\r"=>''))没有做任何事情,因为你在下一行覆盖了那个变量。

要删除12上的额外行,您是否尝试使用以下内容删除\ n AND \ _;

function AsciiToInt($char){ $success = ""; if(strlen($char) == 1) return "char(".ord($char).")"; else{ for($i = 0; $i < strlen($char); $i++){ if($i == strlen($char) - 1) $success = $success.ord($char[$i]); else $success = $success.ord($char[$i]).","; } return "char(".$success.")"; } } ;

您还可以使用从php网站获取的此函数来检查您在$ row [12]中收到的ascii字符:

mb_detect_encoding

另一个提示可能是它返回UTF-8或UTF-16的数据库,而你在文本文件中丢失了一些字符。

尝试使用{{1}}函数查看它。