I have a table on HTML/PHP that extract data from mySQL. Please see in this link. For example, please search this shipment code to get the result inside the table: 42-7278954.
After that, I want to export the result to excel (you also can see the button there).
Below is my table code in view (I've deleted some columns to shorten the code):
$body = "";
$display = "<table class='table_searchshipment' id='table_searchshipment' cellpadding='0' cellspacing='0' border='0'>";
echo $display;
$body .= $display;
$display = "<thead>
<tr>
<th>CN No.</th>
<th>Doc No.</th>
</tr>
</thead>";
echo $display;
$body .= $display;
while($row = mysqli_fetch_array($result)) {
$CN_no= $row['CN_no'];
$doc_no= $row['doc_no'];
$display = "<tr>
<td>".$CN_no."</td>
<td>".$doc_no."</td>
</tr>";
echo $display;
$body .= $display;
}
$display = "</table>";
echo $display;
$body .= $display;
$body = htmlspecialchars($body);
echo '<form action = "setheader" method = "post">
<input type = "hidden" name = "body" value = "<?php echo $body ; ?>">
<input type = "submit" name = "submit" Value = "Export to excel">
</form>';
if(isset($_POST['submit'])){
$body = $_POST['body'];
setHeader("export.xls");
echo $body;
}
And in the controller, I make function setheader:
public function setheader($excel_file_name)//this function used to set the header variable
{
header("Content-type: application/octet-stream");//A MIME attachment with the content type "application/octet-stream" is a binary file.
//Typically, it will be an application or a document that must be opened in an application, such as a spreadsheet or word processor.
header("Content-Disposition: attachment; filename=$excel_file_name");//with this extension of file name you tell what kind of file it is.
header("Pragma: no-cache");//Prevent Caching
header("Expires: 0");//Expires and 0 mean that the browser will not cache the page on your hard drive
}
The download pop-up is appear, but it only download "setheader" file that contains of error notification. Please see it here.