I am trying to write a table from my sql database to a CSV file and make the user download it. However the file that is downloaded is full of html data from the site the form is on. After 80 lines of html code my own data is shown. The only thing i can think of is some sort of buffer overflow but I do not understand why.
This is my code:
if (!empty($_POST['inschrijvingen']) && !empty($_POST['jaar'])){
// Create a new query object.
$query2 = $db->getQuery(true);
$query2->select('*');
$query2->from($db->quoteName($TABLE_NAME));
$query2->where($db->quoteName('jaar') .'='.$_POST['jaar']);
$query2->order('naam ASC');
// Reset the query using our newly populated query object.
$db->setQuery($query2);
$data2 = $db->loadAssocList();
$handle = fopen("inschrijvingen_".$_POST['jaar'].".csv", "w");
fwrite($handle, "naam,achternaam,geboortedatum,geslacht,telefoonnummer,email,adres,postcode,opleiding\n");
for ($i = 0; $i < count($data2); $i++){
fwrite($handle, $data2[$i]['naam'].",".$data2[$i]['achternaam'].",".$data2[$i]['geboortedatum'].",".$data2[$i]['geslacht'].",".$data2[$i]['telefoonnummer'].",".$data2[$i]['email'].",".$data2[$i]['adres'].",".$data2[$i]['postcode'].",".$data2[$i]['opleiding']."\n");
}
fclose($handle);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename("inschrijvingen_".$_POST['jaar'].".csv"));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize("inschrijvingen_".$_POST['jaar'].".csv"));
readfile("inschrijvingen_".$_POST['jaar'].".csv");
exit;
}
Note: this is a joomla module