Files
adminer/adminer/database.inc.php

82 lines
2.8 KiB
PHP
Raw Normal View History

<?php
2025-03-05 11:28:53 +01:00
namespace Adminer;
2013-05-08 08:43:15 -07:00
$row = $_POST;
2025-03-26 00:08:16 +01:00
if ($_POST && !$error && !$_POST["add"]) {
2013-05-08 08:43:15 -07:00
$name = trim($row["name"]);
if ($_POST["drop"]) {
2010-05-12 18:23:40 +02:00
$_GET["db"] = ""; // to save in global history
queries_redirect(remove_from_uri("db|database"), lang('Database has been dropped.'), drop_databases(array(DB)));
2011-09-10 13:06:59 +02:00
} elseif (DB !== $name) {
// create or rename database
if (DB != "") {
2011-09-10 13:06:59 +02:00
$_GET["db"] = $name;
2013-07-03 10:34:19 -07:00
queries_redirect(preg_replace('~\bdb=[^&]*&~', '', ME) . "db=" . urlencode($name), lang('Database has been renamed.'), rename_database($name, $row["collation"]));
} else {
2011-09-10 13:06:59 +02:00
$databases = explode("\n", str_replace("\r", "", $name));
$success = true;
$last = "";
foreach ($databases as $db) {
if (count($databases) == 1 || $db != "") { // ignore empty lines but always try to create single database
2013-05-08 08:43:15 -07:00
if (!create_database($db, $row["collation"])) {
$success = false;
}
$last = $db;
}
}
2014-06-24 15:26:51 +02:00
restart_session();
set_session("dbs", null);
queries_redirect(ME . "db=" . urlencode($last), lang('Database has been created.'), $success);
}
} else {
// alter database
2013-05-08 08:43:15 -07:00
if (!$row["collation"]) {
redirect(substr(ME, 0, -1));
}
query_redirect("ALTER DATABASE " . idf_escape($name) . (preg_match('~^[a-z0-9_]+$~i', $row["collation"]) ? " COLLATE $row[collation]" : ""), substr(ME, 0, -1), lang('Database has been altered.'));
}
}
page_header(DB != "" ? lang('Alter database') : lang('Create database'), $error, array(), h(DB));
$collations = collations();
$name = DB;
if ($_POST) {
2013-05-08 08:43:15 -07:00
$name = $row["name"];
} elseif (DB != "") {
2013-05-08 08:43:15 -07:00
$row["collation"] = db_collation(DB, $collations);
2025-03-06 17:51:20 +01:00
} elseif (JUSH == "sql") {
// propose database name with limited privileges
foreach (get_vals("SHOW GRANTS") as $grant) {
2018-02-20 16:27:40 +01:00
if (preg_match('~ ON (`(([^\\\\`]|``|\\\\.)*)%`\.\*)?~', $grant, $match) && $match[1]) {
$name = stripcslashes(idf_unescape("`$match[2]`"));
break;
}
}
}
?>
<form action="" method="post">
<p>
<?php
2025-03-26 00:08:16 +01:00
echo ($_POST["add"] || strpos($name, "\n")
2025-02-16 18:23:07 +01:00
? '<textarea autofocus name="name" rows="10" cols="40">' . h($name) . '</textarea><br>'
: '<input name="name" autofocus value="' . h($name) . '" data-maxlength="64" autocapitalize="off">'
2013-08-05 18:55:27 -07:00
) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $row["collation"]) . doc_link(array(
'sql' => "charset-charsets.html",
2018-02-08 13:56:22 +01:00
'mariadb' => "supported-character-sets-and-collations/",
2025-02-25 06:52:27 +01:00
'mssql' => "relational-databases/system-functions/sys-fn-helpcollations-transact-sql",
2013-08-05 18:55:27 -07:00
)) : "");
?>
<input type="submit" value="<?php echo lang('Save'); ?>">
<?php
if (DB != "") {
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . confirm(lang('Drop %s?', DB)) . "\n";
2025-03-26 00:08:16 +01:00
} elseif (!$_POST["add"] && $_GET["db"] == "") {
echo icon("plus", "add[0]", "+", lang('Add next')) . "\n";
}
echo input_token();
?>
</form>