file — Запись в csv с проблемами php

У меня проблема. Я пытаюсь получить некоторые данные из базы данных в таблицу .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]), Дата ($ row [1]), Время ($ row [2]), Описание ($ row [3]), IP ($ row [4]), Имя компьютера ($ row [5]), MAC ($ row [6]), пользователь ($ row [7]) (пусто), Transactionid ($ row [8]), результат запроса ($ row [9]), время запроса ($ row [10]), идентификатор корреляции ($ row [11]) (пусто), DHCID ($ row [12]) (пусто)

В основном это ежедневные данные DHCP-сервера, загружаемые в базу данных. Теперь код работает, он пишет все, что я хочу в CSV, но есть 2 проблемы.

1, код по какой-то необъяснимой причине вставляет пустую строку в таблицу csv между строками, которые содержат данные. Удаление $ row [12] исправляет это. Я попытался удалить специальные символы, преобразовать пробелы во что-то, что можно увидеть, и даже преобразовать пустую строку в то, что можно увидеть. Тем не менее, на самом деле ничего не получалось, я даже попробовал file_puts_content (то же самое для второй проблемы) вместо fwrite, но ничего. Продолжает происходить одно и то же. Если я уберу \ n, это будет работать, но 2-я строка будет смещена вправо на 1 столбец.

2, по некоторым причинам, последние 2 символа удаляются из CSV. Строка, которая должна быть вставлена ​​в CSV, по-прежнему содержит указанные 2 символа, прежде чем записать ее в файл. Пробовал оба fwrite и file_puts_content.

Что касается формата .csv, столбцы данных делятся на; и строки по \ n.

Также попытался прочитать файл с помощью libre office и excel, думая, что это может быть excel, который тратит деньги, но нет.

0

Решение

Попробуйте использовать 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

Другие решения

$addstring = file_get_contents($path.$filename) не делает ничего, потому что вы перезаписываете эту переменную в следующей строке.

Чтобы удалить лишнюю строку на 12, вы пытались удалить \ n А ТАКЖЕ с чем-то вроде:

$row[12] = strtr($row[12], array("\n"=>'', "\r"=>''));

Вы также можете проверить, какие символы ascii вы получаете в $ row [12] с помощью этой функции, взятой с сайта php:

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.")";
}
}

Другой совет — база данных, которая возвращает UTF-8 или UTF-16, и вы теряете некоторые символы в текстовом файле.

Попробуйте посмотреть на это с mb_detect_encoding функция.

0

По вопросам рекламы [email protected]