I\'ve seen this asked before and I am having trouble getting this to work properly after trying a number of solutions. The problem is I can\'t get my data to export into a c
Place, ob_end_clean(); before you output the csv.
ob_end_clean() meaning: "Clean (erase) the output buffer and turn off output buffering" - PHP manual.
The logic for it to work is to construct your php script so that it:
echo "<html...>;"
(this already uses php's output buffer behind the scenes)ob_end_clean()
(depending how ob_start() was called this may prevent the previous export) or ob_clean()
which just sends content so far to the browser and cleans the buffer without turning it off.Got it working!
I invoked my csv code before anything on the page. :) Then I did my connection to my table, then did my logic for my code. I didn't have an ob_start or ob_flush on my main file which made a big difference. I had the ob_clean before the while loop and then I did an exit() after declaring the header. Hopefully, this explains it well.
Here is my code.
if (isset($_POST["hidden"])) {
$sql = "SELECT * FROM `newsletter`";
$result = mysql_query($sql);
ob_end_clean();
$fp = fopen('php://output','w');
while ($list = mysql_fetch_assoc($result)) {
fputcsv($fp, $list);
}
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
exit();
}