0

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
Sparker0i
  • 1,787
  • 4
  • 35
  • 60

0 Answers0