Php — запись в файл результатов выборки

Как показывает практика удобнее всего представлять результаты поиска в БД в виде табличного отчёта с возможностью сохранения и редактирования впоследствии. Тем более, что поисковые запросы чаще всего организовывают с целью дальнейшей обработки информации и, возможно, представления в каком-то другом виде. Вполне вероятно, что полученные результаты будут анализироваться и далее. В любом случае просто показать результаты выполнения запроса в браузере чаще всего бывает недостаточно.


В своё время я получил подобную задачу – сохранять результаты поиска в файл. Сначала требовалось просто выводить в браузере все найденные по запросу материалы, но этого по ряду описанных выше причин оказалось недостаточным. Не мудрствуя лукаво здесь же на странице результатов запроса я организовал ссылку на сохранение отчёта:
echo «<a href='?option=search&res=$sch'><img src=img/csv.png></a> Открыть отчёт в Excel»;
Изображение csv.png – просто логотип Excel. При нажатии на ссылку происходит перегрузка страницы search с параметром $res.
В начало класса добавил условие существования переменной $res:
<?php
if (isset ($_GET['res'])) {
$file_name = 'report.csv';
$res = (int)$_GET['res'];
header ('Content-type: application/csv'); // указываем, что это csv документ
header («Content-Disposition: inline; filename=».$file_name); // указываем файл, с которым будем работать
readfile ($file_name); // считываем файл
unlink ($file_name);
unset ($_GET['res']);
exit ();
}
?>
Для красоты будущего отчёта создал массив с названиями колонок:
$zag = array ('НАЗВАНИЕ','ОБОЗНАЧЕНИЕ','ТЕМА','КОЛИЧЕСТВО','ИТОГО');
И массив куда буду записывать собственно поля с результатами, полученные по запросу
$tabl = array ();
Приводить условия выборки я не стану только укажу, что использовать для хранения результатов стану ассоциативный массив $myrow[]
$fp = fopen ('report.csv','w'); -открываю файл для записи
fwrite ($fp,b"\xEF\xBB\xBF" ) ;
fputcsv ($fp,$zag,';'); запись в файл отчёта заголовков таблицы
do

{
$id = $myrow ["1"];
$tabl[0] = $myrow ["2"];
$tabl[1] =$myrow["3"];
$tabl[2] = $myrow ["4"];
$tabl[3] = $myrow ["5"];
$tabl[4] = part ($id);
fputcsv ($fp,$tabl,';'); записываю в файл строку массива tabl

while ($myrow = mysql_fetch_array ($result, MYSQL_ASSOC));
fclose ($fp); — закрываю файл.
Здесь описан кусок кода, который касается только записи в массив tabl строки с уже отобранными данными из БД и затем перезаписи её в файл csv.

Назад Вперед

Написать комментарий