I have a text input area, and a submit button in an HTML form. The input to the text area is an SQL query which hits my database and displays the result on the frontend.
Now I have a new requirement that it should also store the results in a file and download it. So I'm trying to write the results to a temp file and download it. Here's my code snippet for both displaying and downloading the tempfile, as seen here.
<html>
<form method="POST">
<input type="text" name="urlid"><br>
<input type="submit" name="sub">
</form>
</html>
<?php
if (isset($_REQUEST['sub'])) {
require_once ('start.php'); //Contains all database connections
$queryUser = $_REQUEST['urlid'];
echo($queryUser);
$result5 = runquery($queryUser); //Defined inside start.php
echo "<table border='1'>";
$i = 0;
while ($row = db2_fetch_assoc($result5)) {
if ($i == 0) {
foreach($row as $field => $value) {
echo "<th>".$field."</th>";
$i = $i + 1;
}
}
echo "<tr>";
foreach($row as $field => $value) {
echo "<td>".$value."</td>";
}
echo "</tr>";
}
echo "</table>";
$x = file_get_contents('test.sql');
$res = runquery($x);
$myfile = tmpfile();
$write = "";
while ($row = db2_fetch_assoc($res)) {
if ($i == 0) {
foreach($row as $field => $value) {
$write .= $field."\t";
$i = $i + 1;
}
$write .= "\n";
}
foreach($row as $field => $value) {
$write .= $value."\t";
}
$write .= "\n";
}
echo $write;
fwrite($myfile , $write);
fclose($myfile);
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=data.txt');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($myfile));
ob_clean();
flush();
readfile($myfile);
unlink($myfile);
}
?>
Now the problem is both don't happen together. If I comment out the downloading part (the one starting from the header calls), it displays the data, but if I uncomment that part, it only downloads a blank file, and does not display the data.
So:
- Is my way of writing to the temporary file correct?
- How do I display the table as well as download the text file