Są takie sytuacje, gdy użytkownik korzystający ze strony internetowej, chce pozyskać zawartość tabeli lub też raportu, celem dalszej pracy z danym (np: wykorzystania danych w celu wykonania tradycyjnej papierowej korespondencji seryjnej). Do niedawna wymagało to od programisty pełnego oprogramowania funkcji eksportujących dane do pliku. Od wersji PHP 5.1.0 jest to znacznie łatwiejsze gdyż udostępniono nowa funkcję fputcsv ($handle, $fields), której zadaniem jest “wpychanie” danych tablicy do plików CSV.
Przykład
Od jakiegoś czasu bardzo chętnie stosuję tę funkcję. Muszę przyznać, że jest ona wygodna i znacznie ułatwia implementację eksportu danych do pliku. Poniżej znajdziecie przykładowy kod PHP w którym wykonano prosty eksport danych pozyskanych z bazy MySQL do pliku CSV, który ma być wykorzystywany w programach z pakietu MS Office.
$usersRes = $pdo->query('SELECT * FROM `user`');
$users = $usersRes->fetchAll(PDO::FETCH_ASSOC);
$data = array();
$data[0]['id_user'] = 'Id';
$data[0]['f_name'] = 'Imię';
$data[0]['s_name'] = 'Nazwisko';
$data[0]['email'] = 'Email';
$data[0]['city_c'] = 'Miejscowość';
$data[0]['post_c'] = 'Kod pocztowy';
$data[0]['phone_c'] = 'Telefon';
$data[0]['add_date'] = 'Data rejestracji';
$datas = array_merge($data,$users);
foreach($datas as $key => $data){
foreach($data as $key_s => $single_data){
$datas[$key][$key_s] = iconv("UTF-8","cp1250", $single_data);
}
}
$filename = 'users.csv';
$FileHandle = fopen($filename, 'w+') or die("can't open file");
foreach($datas as $key => $data) {
fputcsv($FileHandle, $data, ';', '"');
}
fclose($FileHandle);
Omówienie kodu
Idąc od góry – pobranie danych za pomocą PDO w postaci tablicy asocjacyjnej. Utworzenie tablicy $data zawierającej nagłówek dla tabeli. Złączenie tablicy (array_merge
) z nagłówkami kolumn z tablicą z danymi. Kolejnym ważnym krokiem jest konwersja kodowania w pozyskanych danych w celu prawidłowego wyświetlania danych w programach uruchamianych w Windowsie. W pętli pojedyncze pola rekordów konwertowane są na kodowanie cp1250 (właściwe dla MS Windows). W dalszej części tworzony jest uchwyt do podanego pliku csv (w+ – wskaźnik ustawiany na początku pliku, jeśli plik nie istnieje to będzie podjęta próba stworzenia go). Ostatnia część kodu odpowiada za wsad danych do pliku. I tyle :).
Bardzo szybkie i efektywne rozwiązanie wszelkiego rodzaju eksportów danych. Oczywiście można powyższy kod jeszcze uprościć, np dokonywać konwersji znaków na poziomie bazy danych (wykonanie zapytania: SET NAMES CP1250;
przed właściwym zapytaniem pozyskującym dane) … ale takie zmiany pozostawiam już w Waszych rękach.
Znaczniki: CSV, PHP, programowanie