У меня есть форма, которая записывает данные в базу данных MySQL. Я хочу, чтобы пользователь мог загружать свои данные в CSV
после окончательного представления.
Мой код в настоящее время сбрасывает содержимое базы данных в браузер, то есть записывается на страницу, а не в файл csv. Я хотел бы отправить их по ссылке и получить возможность загрузить файл.
Вот мой текущий код:
$dbo = new PDO('mysql:host=localhost;dbname=db1', $username, $password); $sql = "SELECT * FROM table1"; $qry = $dbo->prepare($sql); // Execute the statement $qry->execute(); var_dump($qry->fetch(PDO::FETCH_ASSOC)); $data = fopen('/tmp/db_user_export_".time().".csv', 'w'); while ($row = $qry->fetch(PDO::FETCH_ASSOC)) { echo "Success"; // Export every row to a file fputcsv($data, $row); }
Текущий результат – это страница с дампом всех данных из таблицы. Файл не создается в нужном месте. Где я иду не так?
Клиент не знает, что это CSV-файл (это все-таки текст!).
Попытайтесь добавить это перед выходом (в верхней части вашего скрипта):
header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=file.csv"); header("Pragma: no-cache"); header("Expires: 0");
В основном, вы сообщаете клиенту / браузеру, что данные, которые вы будете отправлять CSV-файл.
Это должно сработать.
Дополнительную информацию о заголовках можно найти здесь: http://php.net/manual/en/function.header.php