Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 394
  • Last Modified:

Download sql database in a php page in excel format

Hello Experts.


I have a php page that displays a sql database table into an html <table>.
I want to add a link below the html table to download in an excel format the sql table.

How would I do this?
0
joao_c
Asked:
joao_c
2 Solutions
 
Lukasz ChmielewskiCommented:
You may want to see this example:
http://snipplr.com/view/16324/
0
 
Ray PaseurCommented:
If it is one table, it's easy to do.  The SQL output will be a CSV file.  The CSV file extension is almost universally associated with Excel.

<?php // RAY_mysql_to_csv.php
error_reporting(E_ALL);
date_default_timezone_set('America/Chicago');

// IMPORTANT PAGES FROM THE MANUALS
// MAN PAGE: http://php.net/manual/en/ref.mysql.php
// MAN PAGE: http://php.net/manual/en/mysql.installation.php
// MAN PAGE: http://php.net/manual/en/function.mysql-error.php

// CONNECTION AND SELECTION VARIABLES FOR THE DATABASE
$db_host = "localhost"; // PROBABLY THIS IS OK
$db_name = "??";        // GET THESE FROM YOUR DBA / HOSTING PROVIDER
$db_user = "??";
$db_word = "??";


// ESTABLISH A CONNECTION TO THE DATA BASE SERVER
// MAN PAGE: http://php.net/manual/en/function.mysql-connect.php
if (!$dbcx = mysql_connect("$db_host", "$db_user", "$db_word"))
{
    $errmsg = mysql_errno() . ' ' . mysql_error();
    echo "<br/>NO DB CONNECTION: ";
    echo "<br/> $errmsg <br/>";
}

// SELECT THE MYSQL DATA BASE
// MAN PAGE: http://php.net/manual/en/function.mysql-select-db.php
if (!$db_sel = mysql_select_db($db_name, $dbcx))
{
    $errmsg = mysql_errno() . ' ' . mysql_error();
    echo "<br/>NO DB SELECTION: ";
    echo "<br/> $errmsg <br/>";
    die('NO DATA BASE');
}
// IF WE GOT THIS FAR WE CAN DO QUERIES


// THE TABLE NAME IS NOT SPECIFIED - ASK CLIENT
if (empty($_GET["q"]))
{
    // RETURN A LIST OF TABLES
    $sql = "SHOW TABLES";
    $res = mysql_query($sql);
    if (!$res)
    {
        $errmsg = mysql_errno() . ' ' . mysql_error();
        echo "<br/>QUERY FAIL: ";
        echo "<br/>$sql <br/>";
        die($errmsg);
    }

    // DETERMINE HOW MANY ROWS OF RESULTS WE GOT (ONE FOR EACH TABLE)
    // MAN PAGE: http://php.net/manual/en/function.mysql-num-rows.php
    $num = mysql_num_rows($res);
    if (!$num)
    {
        echo "<br/>$sql ";
        die("QUERY FOUND NO DATA");
    }
    else
    {
        echo "<br/>$sql ";
        echo "QUERY FOUND $num ROWS OF DATA ";
    }

    // ITERATE OVER THE RESULTS SET TO COLLECT THE TABLE NAMES
    $show_tables = array();
    while ($show_tables = mysql_fetch_array($res))
    {
        $my_tables[] = $show_tables[0];
    }

    // VISUALIZE THE LIST OF TABLES
    echo "<br/><pre>\n";
    print_r($my_tables);
    echo "</pre>\n";

    // SHOW A FORM - ASK CLIENT TO CHOOSE THE TABLE
    $form = <<<FORM
<form>
ENTER TABLE NAME:
<input name="q" />
<input type="submit" />
</form>
FORM;
    echo $form;
    die('CHOOSE NOW, PLEASE');
}


// THE CLIENT HAS SPECIFIED THE TABLE NAME IN THE FORM OR URL GET ARGUMENT
else
{
   $nom = trim($_GET["q"]);
}


// CONSTRUCT THE QUERY USING THE TABLE NAME IN THE URL GET STRING q=
$sql  = "SELECT * FROM ";
$sql .= "`" . mysql_real_escape_string($nom) . "`";

// IF mysql_query() RETURNS FALSE, GET THE ERROR REASONS
// MAN PAGE:http://php.net/manual/en/function.mysql-query.php
if (!$res = mysql_query($sql, $dbcx))
{
    // MAN PAGE: http://php.net/manual/en/function.mysql-error.php
    $errmsg = mysql_errno() . ' ' . mysql_error();
    echo "<br/>QUERY FAIL: ";
    echo "<br/>$sql ";

    // MAN PAGE: http://php.net/manual/en/function.mysql-errno.php
    if (mysql_errno() == 1146) echo "<br/>TABLE NAMES ARE CASE SENSITIVE ";
    die("<br/>" . $errmsg);
}

// HOW MANY ROWS DID WE GET?
// MAN PAGE: http://php.net/manual/en/function.mysql-num-rows.php
$num = mysql_num_rows($res);
if (!$num) die("SQL $sql RETURNED NO ROWS");

// NOW THAT WE KNOW WE HAVE DATA, ESTABLISH THE PLACE TO PUT THE DATA!
// USE A FILE NAME WITH TABLE NAME, DATE AND TIME TO AVOID CONFUSION
$fname = $nom . date('Ymd\THis') . '.csv';
$fpc   = fopen($fname, 'w');
if (!$fpc) die("FOPEN FAILED FOR $fname");

// GET THE FIRST ROW OF THE RESULTS SET AND GET THE FIELD NAMES
$row = mysql_fetch_assoc($res);
$col = array_keys($row);

// MAN PAGE: http://php.net/manual/en/function.fputcsv.php
fputcsv($fpc, $col);

// WRITE THE FIRST ROW OF THE DATA
fputcsv($fpc, $row);

// ITERATE OVER THE REMAINING DATA
while ($row = mysql_fetch_assoc($res))
{
    fputcsv($fpc, $row);
}

// ALL DONE
fclose($fpc);

// SHOW THE LINK TO THE FILE
echo "<br/>CSV OF $nom CREATED HERE WITH COLUMN TITLES PLUS $num ROWS OF DATA:\n";
echo "<br/><a href=\"$fname\">$fname</a>\n";

Open in new window

Hope that helps, ~Ray
0
 
joao_cAuthor Commented:
Thanks guys. Both comments helped me a lot.

Cheers
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now