From 80bc4b30dc375f241f66c376e78057c22661865a Mon Sep 17 00:00:00 2001 From: jakubvrana Date: Fri, 20 Jun 2008 14:13:37 +0000 Subject: [PATCH] Prepare customizable export git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@424 7c3ca157-0c34-0410-bff1-cbf682f78f5c --- design.inc.php | 8 +- dump.inc.php | 208 ++++++++++++++++++++++++++++++++++--------------- index.php | 6 +- 3 files changed, 150 insertions(+), 72 deletions(-) diff --git a/design.inc.php b/design.inc.php index 6e3587eb..e1c6bb76 100644 --- a/design.inc.php +++ b/design.inc.php @@ -9,7 +9,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") { -<?php echo $title . (strlen($title2) ? ": " . htmlspecialchars($title2) : "") . " - " . lang('phpMinAdmin') . " 1.6.2-dev"; ?> +<?php echo $title . (strlen($title2) ? ": " . htmlspecialchars($title2) : "") . " - " . lang('phpMinAdmin') . " 1.7.0-dev"; ?> @@ -66,10 +66,8 @@ function page_footer($missing = false) {

-"> -" /> +"> +" />

diff --git a/dump.inc.php b/dump.inc.php index 2c7e6628..f6d953ec 100644 --- a/dump.inc.php +++ b/dump.inc.php @@ -1,9 +1,5 @@ query("SHOW CREATE TABLE " . idf_escape($table)); if ($result) { @@ -20,36 +16,6 @@ function dump_table($table, $data = true) { } } $result->free(); - if ($data) { - $result = $mysql->query("SELECT * FROM " . idf_escape($table)); //! enum and set as numbers, binary as _binary, microtime - if ($result) { - if ($result->num_rows) { - $insert = "INSERT INTO " . idf_escape($table) . " VALUES "; - $length = 0; - while ($row = $result->fetch_row()) { - foreach ($row as $key => $val) { - $row[$key] = (isset($val) ? "'" . $mysql->escape_string($val) . "'" : "NULL"); - } - $s = "(" . implode(", ", $row) . ")"; - if (!$length) { - echo $insert, $s; - $length = strlen($insert) + strlen($s); - } else { - $length += 2 + strlen($s); - if ($length < $max_packet) { - echo ", ", $s; - } else { - echo ";\n", $insert, $s; - $length = strlen($insert) + strlen($s); - } - } - } - echo ";\n"; - } - $result->free(); - } - echo "\n"; - } } if ($mysql->server_info >= 5) { $result = $mysql->query("SHOW TRIGGERS LIKE '" . $mysql->escape_string(addcslashes($table, "%_")) . "'"); @@ -64,7 +30,39 @@ function dump_table($table, $data = true) { } } -function dump($db) { +function dump_data($table) { + global $mysql, $max_packet; + $result = $mysql->query("SELECT * FROM " . idf_escape($table)); //! enum and set as numbers, binary as _binary, microtime + if ($result) { + if ($result->num_rows) { + $insert = "INSERT INTO " . idf_escape($table) . " VALUES "; + $length = 0; + while ($row = $result->fetch_row()) { + foreach ($row as $key => $val) { + $row[$key] = (isset($val) ? "'" . $mysql->escape_string($val) . "'" : "NULL"); + } + $s = "(" . implode(", ", $row) . ")"; + if (!$length) { + echo $insert, $s; + $length = strlen($insert) + strlen($s); + } else { + $length += 2 + strlen($s); + if ($length < $max_packet) { + echo ", ", $s; + } else { + echo ";\n", $insert, $s; + $length = strlen($insert) + strlen($s); + } + } + } + echo ";\n"; + } + $result->free(); + } + echo "\n"; +} + +function dump($db, $style) { global $mysql; static $routines; if (!isset($routines)) { @@ -81,53 +79,135 @@ function dump($db) { } } } - + if (in_array($style, array("DROP, CREATE", "CREATE", "CREATE, ALTER")) && ($result = $mysql->query("SHOW CREATE DATABASE " . idf_escape($db)))) { + if ($style == "DROP, CREATE") { + echo "DROP DATABASE IF EXISTS " . idf_escape($db) . ";\n"; + } + $create = $mysql->result($result, 1); + echo ($style == "CREATE, ALTER" ? preg_replace('~^CREATE DATABASE ~', '\\0IF NOT EXISTS ', $create) : $create) . ";\n"; + $result->free(); + } + if ($style) { + echo "USE " . idf_escape($db) . ";\n"; + } + foreach ($_POST["tables"] as $table => $val) { + $table = bracket_escape($table, "back"); + if ($val) { + dump_table($table, $val); + } + if ($_POST["data"][$table]) { + dump_data($table, $_POST["data"][$table]); + } + } + /* $views = array(); $result = $mysql->query("SHOW TABLE STATUS"); while ($row = $result->fetch_assoc()) { if (isset($row["Engine"])) { dump_table($row["Name"]); + dump_data($row["Name"]); } else { $views[] = $row["Name"]; } } $result->free(); foreach ($views as $view) { - dump_table($view, false); + dump_table($view); } - + */ if ($routines[$db]) { echo "DELIMITER ;;\n\n" . implode("", $routines[$db]) . "DELIMITER ;\n\n"; } - echo "\n\n"; } -$max_packet = 16777216; -echo "SET NAMES utf8;\n"; -echo "SET foreign_key_checks = 0;\n"; -echo "SET time_zone = '" . $mysql->escape_string($mysql->result($mysql->query("SELECT @@time_zone"))) . "';\n"; -echo "SET max_allowed_packet = $max_packet, GLOBAL max_allowed_packet = $max_packet;\n"; -echo "\n"; +if ($_POST) { + header("Content-Type: text/plain; charset=utf-8"); + $filename = (strlen($_GET["db"]) ? preg_replace('~[^a-z0-9_]~i', '-', (strlen($_GET["dump"]) ? $_GET["dump"] : $_GET["db"])) : "dump"); + header("Content-Disposition: inline; filename=$filename.sql"); + + $max_packet = 16777216; + echo "SET NAMES utf8;\n"; + echo "SET foreign_key_checks = 0;\n"; + echo "SET time_zone = '" . $mysql->escape_string($mysql->result($mysql->query("SELECT @@time_zone"))) . "';\n"; + echo "SET max_allowed_packet = $max_packet, GLOBAL max_allowed_packet = $max_packet;\n"; + echo "\n"; + + foreach ($_POST["databases"] as $db => $style) { + $db = bracket_escape($db, "back"); + if ($mysql->select_db($db)) { + dump($db, $style); + } + } + /* + } elseif (strlen($_GET["dump"])) { + dump_table($_GET["dump"]); + } else { + dump($_GET["db"]); + } + */ + exit; +} -if (!strlen($_GET["db"])) { - $result = $mysql->query("SHOW DATABASES"); - while ($row = $result->fetch_assoc()) { - if ($row["Database"] != "information_schema" || $mysql->server_info < 5) { - if ($mysql->select_db($row["Database"])) { - $result1 = $mysql->query("SHOW CREATE DATABASE " . idf_escape($row["Database"])); - if ($result1) { - echo $mysql->result($result1, 1) . ";\n"; - $result1->free(); - } - echo "USE " . idf_escape($row["Database"]) . ";\n"; - dump($row["Database"]); - } +page_header(lang('Export'), "", (strlen($_GET["export"]) ? array("table" => $_GET["export"]) : array()), $_GET["db"]); +?> + + + +
+

+: +: +

+ +\n" . lang('Database') . ""; +foreach (array('', 'USE', 'DROP, CREATE', 'CREATE', 'CREATE, ALTER') as $val) { + echo "" . ($val ? $val : lang('skip')) . ""; +} +echo "\n"; +if (!isset($_GET["db"]) && !isset($_SESSION["databases"][$_GET["server"]])) { + $_SESSION["databases"][$_GET["server"]] = get_vals("SHOW DATABASES"); +} +foreach ((isset($_GET["db"]) ? array($_GET["db"]) : $_SESSION["databases"][$_GET["server"]]) as $db) { + if ($db != "information_schema" || $mysql->server_info < 5) { + echo "" . htmlspecialchars($db) . ""; + foreach (array('', 'USE', 'DROP, CREATE', 'CREATE', 'CREATE, ALTER') as $val) { + echo '"; + } + echo "\n"; + } +} +echo "\n"; + +echo "\n"; +foreach (array('', 'DROP, CREATE', 'CREATE', 'CREATE, ALTER') as $val) { + echo ""; +} +foreach (array('', 'TRUNCATE, INSERT', 'INSERT', 'UPDATE') as $val) { + echo ""; +} +echo "\n"; +foreach ((isset($_GET["db"]) ? get_vals("SHOW TABLES") : $_SESSION["databases"][$_GET["server"]]) as $table) { + echo ""; + foreach (array('', 'DROP, CREATE', 'CREATE', 'CREATE, ALTER') as $val) { + echo '"; + } + foreach (array('', 'TRUNCATE, INSERT', 'INSERT', 'UPDATE') as $val) { + echo '"; + } + echo "\n"; +} +echo "
" . lang('Tables') . "" . lang('Structure') . "" . lang('Data') . "
" . ($val ? $val : lang('skip')) . "" . ($val ? $val : lang('skip')) . "
" . htmlspecialchars($table) . "
\n"; +?> + +
diff --git a/index.php b/index.php index 1a4012d7..8f6b3ea9 100644 --- a/index.php +++ b/index.php @@ -24,9 +24,7 @@ include "./auth.inc.php"; include "./connect.inc.php"; include "./editing.inc.php"; -if (isset($_GET["dump"])) { - include "./dump.inc.php"; -} elseif (isset($_GET["download"])) { +if (isset($_GET["download"])) { include "./download.inc.php"; } else { // outputs footer $on_actions = array("RESTRICT", "CASCADE", "SET NULL", "NO ACTION"); @@ -50,6 +48,8 @@ if (isset($_GET["dump"])) { include "./view.inc.php"; } elseif (isset($_GET["schema"])) { include "./schema.inc.php"; + } elseif (isset($_GET["dump"])) { + include "./dump.inc.php"; } elseif (isset($_GET["privileges"])) { include "./privileges.inc.php"; } else { // uses CSRF token -- 2.39.5