Jase Jase - 5 months ago 33
SQL Question

PHP Excel export only shows last row of MYsql table

I am having problems exporting data from a MySQL database using a PHP script that mimes an excel file.
The data is only exporting the last row of the MySQL table.
I have chopped the code down to remove all the relational look ups (as there are multiple MySQL queries through out which make it hard to read).
I understand I am over writing my variables so only the last row of selected is available to the script but after a lot of searching I still cant seem to find an answer (I am guessing I need to store the data in an array then call that array within the code that exports the data as an excel file).
All help will be greatly appreciated.
My code (chopped down version) is:

<?php
// Apply server security settings and keep cookies
// connecting to the server
// selecting the appropriate database
//storing and fetching user data

$generate_query = "SELECT * FROM main_report";

$generate_data = mysql_query($generate_query, $link);

while($report = mysql_fetch_array($generate_data))
{

$reportnoout = "<td>".$report['report_number']."</td>";

$incdateout = "<td>".$report['incident_time']."</td>";

$siteout = "<td>".$site_data['site_name']."</td>";

$deptout = "<td>".$dept_data['department_name']."</td>";

$reportout = " <td>".$report['report_type']."</td>";

$superout = "<td>".$staff_data5['name']."</td>";

$descout = "<td>".$report['detailed_desc']."</td>";

// Needs some form of array declaration here maybe?

}
// filename for download
$filename = "test_data_" . date('Ymd') . ".xls";
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$filename");
$test="<table><th>Report No.</th><th>Incident Date</th><th>Site</th><th>Department</th><th>Incident Type</th><th>Responsible Supervisor</th><th>Description</th><tr>";
$test2="$reportnoout $incdateout $siteout $deptout $reportout $superout $descout"; // This is not right either should probably be an array or not even here?
echo $test;
echo $test2; // This was a stop gap to at least see if some of the code worked
exit;
?>


Many thanks in advance.

Cheers
Jase

PS I worked this code up by searching the web over the last few days and put it together from that prior to this I have never worked on this type of stuff (outputting file types)

Answer

Your code could use a lot of cleanup, but I will let you figure that out later, and focus on making it work as you have intended.

You can do this by using concatenation .=

//start table string
$table = "<table><tr>
        <th>Report No.</th>
        <th>Incident Date</th>
        <th>Site</th>
        <th>Department</th>
        <th>Incident Type</th>
        <th>Responsible Supervisor</th>
        <th>Description</th><tr>";

$generate_query = "SELECT * FROM main_report";  
$generate_data = mysql_query($generate_query, $link);    

while($report = mysql_fetch_array($generate_data))
{   
    //add row to string using concatenation
    $table .= "<tr><td>{$report['report_number']}</td>
               <td>{$report['incident_time']}</td>
               <td>{$site_data['site_name']}</td>
               <td>{$dept_data['department_name']}</td>
               <td>{$report['report_type']}</td>
               <td>{$staff_data5['name']}</td>
               <td>{$report['detailed_desc']}</td></tr>";
}       

//close table
$table .="</table>";

// filename for download
$filename = "test_data_" . date('Ymd') . ".xls";    
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$filename"); 

echo $table;