i want to export my data from mysql and export it to CSV (allow download) OR email it out.
Problem : the CSV file is empty. When the download started, the file is empty..
<?php
require_once("../dbconnection/dbcon.php");
if(isset($_POST['download']))
{
$filName = "customer.csv";
$objWrite = fopen("customer.csv", "w");
$query = "SELECT * FROM user";
$run=mysqli_query($con,$query);
while($objResult = mysqli_fetch_array($run))
{
fwrite($objWrite, "\"$objResult[username]\",\"$objResult[password]\",\"$objResult[name]\",");
fwrite($objWrite, "\"$objResult[email]\",\"$objResult[role]\",\"$objResult[satus]\"
");
}
fclose($objWrite);
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: " . strlen($out));
// Output to browser with appropriate mime type, you choose ;)
//header("Content-type: text/x-csv");
//header("Content-type: text/csv");
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filName");
}
exit;
?>
my code for sending the CSV as email works
<?php
$filName = "customer.csv";
$objWrite = fopen("customer.csv", "w");
require_once("../dbconnection/dbcon.php");
$query = "SELECT * FROM user";
$run=mysqli_query($con,$query);
while($objResult = mysqli_fetch_array($run))
{
fwrite($objWrite, "\"$objResult[username]\",\"$objResult[password]\",\"$objResult[name]\",");
fwrite($objWrite, "\"$objResult[email]\",\"$objResult[role]\",\"$objResult[satus]\"
");
}
fclose($objWrite);
//*************** Send Email ***************//
$strTo = "my email";
$strSubject = "CSV Report";
$strMessage = "Download $filName for CSV Report";
//*** Uniqid Session ***//
$strSid = md5(uniqid(time()));
$strHeader = "";
$strHeader .= "From: RecruitMate | Murdoch University<recruitmate.mur@gmail.com>
Reply-To: recruitmate.mur@gmail.com
";
$strHeader .= "MIME-Version: 1.0
";
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"
";
$strHeader .= "This is a multi-part message in MIME format.
";
$strHeader .= "--".$strSid."
";
$strHeader .= "Content-type: text/html; charset=windows-874
"; // or UTF-8 //
$strHeader .= "Content-Transfer-Encoding: 7bit
";
$strHeader .= $strMessage."
";
$strContent1 = chunk_split(base64_encode(file_get_contents("$filName")));
$strHeader .= "--".$strSid."
";
$strHeader .= "Content-Type: application/octet-stream; name=\"".$filName."\"
";
$strHeader .= "Content-Transfer-Encoding: base64
";
$strHeader .= "Content-Disposition: attachment; filename=\"".$filName."\"
";
$strHeader .= $strContent1."
";
$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error //
if($flgSend)
{
echo "CSV Generated & Email Sending.";
}
else
{
echo "Email Can Not Send.";
}
?>
As I mentioned - your code for downloading does nothing except sending headers. But you don't send file contents. The easiest way is to use readfile
:
// some headers here
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filName");
readfile($filName);
exit;