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;