diff --git a/adminer/db.inc.php b/adminer/db.inc.php
index b433c49f..dd668031 100644
--- a/adminer/db.inc.php
+++ b/adminer/db.inc.php
@@ -155,8 +155,6 @@ if ($_GET["ns"] !== "") {
}
if ($tables_list) {
- page_footer();
- echo "\n";
- exit; // page_footer() already called
+ echo "\n";
}
}
diff --git a/adminer/include/connect.inc.php b/adminer/include/connect.inc.php
index 1f58a6ef..52a910cf 100644
--- a/adminer/include/connect.inc.php
+++ b/adminer/include/connect.inc.php
@@ -45,7 +45,7 @@ function connect_error() {
}
page_footer("db");
if ($databases) {
- echo "\n";
+ echo "\n";
}
}
diff --git a/adminer/include/functions.inc.php b/adminer/include/functions.inc.php
index 683135c1..b063e735 100644
--- a/adminer/include/functions.inc.php
+++ b/adminer/include/functions.inc.php
@@ -482,6 +482,25 @@ function odd($return = ' class="odd"') {
return ($i++ % 2 ? $return : '');
}
+/** Print one row in JSON object
+* @param string or "" to close the object
+* @param string
+* @return null
+*/
+function json_row($key, $val = null) {
+ static $first = true;
+ if ($first) {
+ echo "{";
+ }
+ if ($key != "") {
+ echo ($first ? "" : ",") . "\n\t\"" . addcslashes($key, '\\"') . '": ' . (isset($val) ? '"' . addcslashes($val, '\\"') . '"' : 'undefined');
+ $first = false;
+ } else {
+ echo "\n}\n";
+ $first = true;
+ }
+}
+
/** Check whether the string is in UTF-8
* @param string
* @return bool
diff --git a/adminer/script.inc.php b/adminer/script.inc.php
index 81d663e9..5b892514 100644
--- a/adminer/script.inc.php
+++ b/adminer/script.inc.php
@@ -1,38 +1,37 @@
0, "Index_length" => 0, "Data_free" => 0);
foreach (table_status() as $row) {
- $id = addcslashes($row["Name"], "\\'/");
- echo "setHtml('Comment-$id', '" . addcslashes(nbsp($row["Comment"]), "'\\") . "');\n";
+ $id = $row["Name"];
+ json_row("Comment-$id", nbsp($row["Comment"]));
if (!is_view($row)) {
foreach (array("Engine", "Collation") as $key) {
- echo "setHtml('$key-$id', '" . addcslashes(nbsp($row[$key]), "'\\") . "');\n";
+ json_row("$key-$id", nbsp($row[$key]));
}
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
if ($row[$key] != "") {
$val = number_format($row[$key], 0, '.', lang(','));
- echo "setHtml('$key-$id', '" . ($key == "Rows" && $row["Engine"] == "InnoDB" && $val ? "~ $val" : $val) . "');\n";
+ json_row("$key-$id", ($key == "Rows" && $row["Engine"] == "InnoDB" && $val ? "~ $val" : $val));
if (isset($sums[$key])) {
$sums[$key] += ($row["Engine"] != "InnoDB" || $key != "Data_free" ? $row[$key] : 0);
}
} elseif (array_key_exists($key, $row)) {
- echo "setHtml('$key-$id');\n";
+ json_row("$key-$id");
}
}
}
}
foreach ($sums as $key => $val) {
- echo "setHtml('sum-$key', '" . number_format($val, 0, '.', lang(',')) . "');\n";
+ json_row("sum-$key", number_format($val, 0, '.', lang(',')));
}
+ json_row("");
} else { // connect
foreach (count_tables(get_databases()) as $db => $val) {
- echo "setHtml('tables-" . addcslashes($db, "\\'/") . "', '$val');\n";
+ json_row("tables-$db", $val);
}
+ json_row("");
}
exit; // don't print footer
diff --git a/adminer/static/functions.js b/adminer/static/functions.js
index 6a1fb84d..54728a00 100644
--- a/adminer/static/functions.js
+++ b/adminer/static/functions.js
@@ -187,6 +187,19 @@ function ajax(url, callback, data) {
return xmlhttp;
}
+/** Use setHtml(key, value) for JSON response
+* @param string
+* @return XMLHttpRequest or false in case of an error
+*/
+function ajaxSetHtml(url) {
+ return ajax(url, function (text) {
+ var data = eval('(' + text + ')');
+ for (var key in data) {
+ setHtml(key, data[key]);
+ }
+ });
+}
+
var ajaxState = 0;
var ajaxTimeout;