Reputation: 267
I have a my sql table called pvdata, I would like to export it to csv file.
But I'm obtaining the following results instead of the normal looking table:
<br />
<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1'cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined variable: header in C:\wamp\www\EXPORT TABLE\index.php on line <i>28</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0035</td><td bgcolor='#eeeeec' align='right'>256088</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\EXPORT TABLE\index.php' bgcolor='#eeeeec'>..\index.php<b>:</b>0</td></tr>
</table></font>
"id id state id state Longitude id state Longitude Latitude id state Longitude Latitude Altitude(km) id state Longitude Latitude Altitude(km) Module Tilt id state Longitude Latitude Altitude(km) Module Tilt Module Azimuth id state Longitude Latitude Altitude(km) Module Tilt Module Azimuth Rated Peak Power(kW) id state Longitude Latitude Altitude(km) Module Tilt Module Azimuth Rated Peak Power(kW) Temperature losses coefficient id state Longitude Latitude Altitude(km) Module Tilt Module Azimuth Rated Peak Power(kW) Temperature losses coefficient Nominal Operation Cell Temperature id state Longitude Latitude Altitude(km) Module Tilt Module Azimuth Rated Peak Power(kW) Temperature losses coefficient Nominal Operation Cell Temperature Invertor Effeciency id state Longitude Latitude Altitude(km) Module Tilt Module Azimuth Rated Peak Power(kW) Temperature losses coefficient Nominal Operation Cell Temperature Invertor Effeciency Persil Name <br />"
<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined variable: data in C:\wamp\www\EXPORT TABLE\index.php on line <i>49</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0035</td><td bgcolor='#eeeeec' align='right'>256088</td><td bgcolor='#eeeeec'>{main}( )</td><td title='C:\wamp\www\EXPORT TABLE\index.php' bgcolor='#eeeeec'>..\index.php<b>:</b>0</td></tr>
</table></font>"id state Longitude Latitude Altitude(km) Module Tilt Module Azimuth Rated Peak Power(kW) Temperature losses coefficient Nominal Operation Cell Temperature Invertor Effeciency Persil Name "
"1 ""persil"" ""0"" ""0"" ""0"" ""0"" ""0"" ""0"" ""0.0047"" ""47"" ""0.9"" ""PERSIL07"""
"2 ""other"" ""12"" ""12"" ""0"" ""15"" ""150"" ""12"" ""0.0046"" ""45"" ""0.95"" ""predefined"""
My php code is:
<?php
$username = "root";
$password = "";
$hostname = "localhost";
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
$selected = mysql_select_db("user data smart grid",$dbhandle)
or die("Could not select Data Base");
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=pvdata.csv");
header("Pragma: no-cache");
header("Expires: 0");
$query = "SELECT * FROM pvdata";
$export = mysql_query ($query ) or die ( "Sql error : " . mysql_error( ) );
$fields = mysql_num_fields ( $export );
for ( $i = 0; $i < $fields; $i++ )
{
$header .= mysql_field_name( $export , $i ) . "\t";
echo $header;
}
while( $row = mysql_fetch_row( $export ) )
{
$line = '';
foreach( $row as $value )
{
if ( ( !isset( $value ) ) || ( $value == "" ) )
{
$value = "\t";
}
else
{
$value = str_replace( '"' , '""' , $value );
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim( $line ) . "\n";
}
$data = str_replace( "\r" , "" , $data );
if ( $data == "" )
{
$data = "\n(0) Records Found!\n";
}
print "$header\n$data";
exit();
?>
so what's going wrong? If I export the table manually from the phpmyadmin, it works fine. I also want to get the names of the columns in the table if possible.
Upvotes: 3
Views: 10663
Reputation: 3628
Try this code -
<?php
// Database Connection
$host="localhost";
$uname="root";
$pass="";
$database = "a2zwebhelp";
$connection=mysql_connect($host,$uname,$pass);
echo mysql_error();
//or die("Database Connection Failed");
$selectdb=mysql_select_db($database) or
die("Database could not be selected");
$result=mysql_select_db($database)
or die("database cannot be selected <br>");
// Fetch Record from Database
$output = "";
$table = ""; // Enter Your Table Name
$sql = mysql_query("select * from $table");
$columns_total = mysql_num_fields($sql);
// Get The Field Name
for ($i = 0; $i < $columns_total; $i++) {
$heading = mysql_field_name($sql, $i);
$output .= '"'.$heading.'",';
}
$output .="\n";
// Get Records from the table
while ($row = mysql_fetch_array($sql)) {
for ($i = 0; $i < $columns_total; $i++) {
$output .='"'.$row["$i"].'",';
}
$output .="\n";
}
// Download the file
$filename = time().'csv'; //For unique file name
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename='.$filename);
echo $output;
exit;
?>
Courtesy - Export MySQL table to CSV using PHP
Upvotes: 0
Reputation: 13121
Before for loop initialize $header to empty string.
$header = '';//initialize header
for ( $i = 0; $i < $fields; $i++ )
{
$header .= mysql_field_name( $export , $i ) . "\t";
echo $header;//remove this line
}
EDIT
Also initialize $data outside while loop.
$data = '';
while( $row = mysql_fetch_row( $export ) )
{
$line = '';
foreach( $row as $value )
{
if ( ( !isset( $value ) ) || ( $value == "" ) )
{
$value = "\t";
}
else
{
$value = str_replace( '"' , '""' , $value );
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim( $line ) . "\n";
}
Upvotes: 4
Reputation: 4029
I don't know if it is a typo, but within your script are spaces before the
<?php
this will result in an html document being delivered and your header-calls will fail. So remove the spaces and any other output before "header" calls.
You are getting error messages up there, for a quick solution try:
error_reporting(0);
Line 28: $header is not known, this makes
$header .=
appending to a unknown variable.
Upvotes: 1