function connect_error() { global $connection, $token, $error, $drivers; $databases = array(); if (DB != "") { page_header(lang('Database') . ": " . h(DB), lang('Invalid database.'), true); } else { if ($_POST["db"] && !$error) { queries_redirect(substr(ME, 0, -1), lang('Databases have been dropped.'), drop_databases($_POST["db"])); } page_header(lang('Select database'), $error, false); echo "<p><a href='" . h(ME) . "database='>" . lang('Create new database') . "</a>\n"; foreach (array('privileges' => lang('Privileges'), 'processlist' => lang('Process list'), 'variables' => lang('Variables'), 'status' => lang('Status')) as $key => $val) { if (support($key)) { echo "<a href='" . h(ME) . "{$key}='>{$val}</a>\n"; } } echo "<p>" . lang('%s version: %s through PHP extension %s', $drivers[DRIVER], "<b>{$connection->server_info}</b>", "<b>{$connection->extension}</b>") . "\n"; echo "<p>" . lang('Logged as: %s', "<b>" . h(logged_user()) . "</b>") . "\n"; if ($_GET["refresh"]) { set_session("dbs", null); } $databases = get_databases(); if ($databases) { $scheme = support("scheme"); $collations = collations(); echo "<form action='' method='post'>\n"; echo "<table cellspacing='0' class='checkable' onclick='tableClick(event);'>\n"; echo "<thead><tr><td> <th>" . lang('Database') . "<td>" . lang('Collation') . "<td>" . lang('Tables') . "</thead>\n"; foreach ($databases as $db) { $root = h(ME) . "db=" . urlencode($db); echo "<tr" . odd() . "><td>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"])); echo "<th><a href='{$root}'>" . h($db) . "</a>"; echo "<td><a href='{$root}" . ($scheme ? "&ns=" : "") . "&database=' title='" . lang('Alter database') . "'>" . nbsp(db_collation($db, $collations)) . "</a>"; echo "<td align='right'><a href='{$root}&schema=' id='tables-" . h($db) . "' title='" . lang('Database schema') . "'>?</a>"; echo "\n"; } echo "</table>\n"; echo "<script type='text/javascript'>tableCheck();</script>\n"; echo "<p><input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /db/)", 1) . ">\n"; // 1 - eventStop echo "<input type='hidden' name='token' value='{$token}'>\n"; echo "<a href='" . h(ME) . "refresh=1' onclick='eventStop(event);'>" . lang('Refresh') . "</a>\n"; echo "</form>\n"; } } page_footer("db"); if ($databases) { echo "<script type='text/javascript'>ajaxSetHtml('" . js_adminer_escape(ME) . "script=connect');</script>\n"; } }
function connect_error() { global $adminer, $connection, $token, $error, $drivers; if (DB != "") { header("HTTP/1.1 404 Not Found"); page_header(lang('Database') . ": " . h(DB), lang('Invalid database.'), true); } else { if ($_POST["db"] && !$error) { queries_redirect(substr(ME, 0, -1), lang('Databases have been dropped.'), drop_databases($_POST["db"])); } //Encabezado y botones de la parte superior en la seleccion de bases de datos page_header(lang('Select database'), $error, false); echo "<p>\n"; foreach (array('database' => lang('Create new database'), 'privileges' => lang('Privileges'), 'processlist' => lang('Process list'), 'variables' => lang('Variables'), 'status' => lang('Status')) as $key => $val) { if (support($key)) { echo "<a class='btn btn-xs btn-primary' href='" . h(ME) . "{$key}='>{$val}</a>\n"; } } //Presenta informacion de la conexion echo "<p><i class='fa fa-exchange fa-fw'></i> " . lang('%s version: %s through PHP extension %s', $drivers[DRIVER], "<b>" . h($connection->server_info) . "</b>", "<b>{$connection->extension}</b>") . "\n"; echo "<p><i class='fa fa-user fa-fw'></i> " . lang('Logged as: %s', "<b>" . h(logged_user()) . "</b>") . "\n"; //Presenta la lista de bases de datos existentes y los encabezados $databases = $adminer->databases(); if ($databases) { $scheme = support("scheme"); $collations = collations(); echo "<form action='' method='post'>\n"; echo "<table cellspacing='0' class='checkable table table-condensed table-responsive table-hover' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n"; echo "<thead><tr>" . (support("database") ? "<th> " : "") . "<th>" . lang('Database') . " - <a class='btn btn-default btn-xs' href='" . h(ME) . "refresh=1'><i class='fa fa-refresh fa-fw'></i> " . lang('Refresh') . "</a>" . "<th>" . lang('Collation') . "<th>" . lang('Tables') . "<th>" . lang('Size') . " - <a class='btn btn-default btn-xs' href='" . h(ME) . "dbsize=1' onclick=\"return !ajaxSetHtml('" . js_escape(ME) . "script=connect');\">" . lang('Compute') . "</a>" . "</thead>\n"; //Presenta la lista de bases de datos $databases = $_GET["dbsize"] ? count_tables($databases) : array_flip($databases); foreach ($databases as $db => $tables) { $root = h(ME) . "db=" . urlencode($db); echo "<tr" . odd() . ">" . (support("database") ? "\n\t\t\t\t\t<td align=center>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"])) : ""); echo "<th><a href='{$root}'>" . h($db) . "</a>"; $collation = nbsp(db_collation($db, $collations)); echo "<td>" . (support("database") ? "<a href='{$root}" . ($scheme ? "&ns=" : "") . "&database=' title='" . lang('Alter database') . "'>{$collation}</a>" : $collation); echo "<td align='right'><a href='{$root}&schema=' id='tables-" . h($db) . "' title='" . lang('Database schema') . "'>" . ($_GET["dbsize"] ? $tables : "?") . "</a>"; echo "<td align='right' id='size-" . h($db) . "'>" . ($_GET["dbsize"] ? db_size($db) : "?"); echo "\n"; } echo "</table>\n"; //Agrega boton de eliminar echo support("database") ? "<fieldset><legend>" . lang('Selected') . " <span id='selected'></span></legend><div>\n" . "<input type='hidden' name='all' value='' onclick=\"selectCount('selected', formChecked(this, /^db/));\">\n" . "<input class='btn btn-xs btn-danger' type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n" . "</div></fieldset>\n" : ""; echo "<script type='text/javascript'>tableCheck();</script>\n"; echo "<input type='hidden' name='token' value='{$token}'>\n"; echo "</form>\n"; } } page_footer("db"); }
$affected--; } else { $set = array(); foreach ($matches2[1] as $i => $col) { $set[idf_escape($cols[$i])] = $col == "" && $fields[$cols[$i]]["null"] ? "NULL" : q(str_replace('""', '"', preg_replace('~^"|"$~', '', $col))); } $result = insert_update($TABLE, $set, $primary); if (!$result) { break; } } } if ($result) { queries("COMMIT"); } queries_redirect(remove_from_uri("page"), lang('%d row(s) have been imported.', $affected), $result); queries("ROLLBACK"); // after queries_redirect() to not overwrite error } else { $error = upload_error($file); } } } $table_name = $adminer->tableName($table_status); if (is_ajax()) { // needs to send headers ob_start(); } page_header(lang('Select') . ": {$table_name}", $error); $set = null; if (isset($rights["insert"])) {
/** Drop old object and create a new one * @param string drop old object query * @param string create new object query * @param string drop new object query * @param string create test object query * @param string drop test object query * @param string * @param string * @param string * @param string * @param string * @param string * @return null redirect in success */ function drop_create($drop, $create, $drop_created, $test, $drop_test, $location, $message_drop, $message_alter, $message_create, $old_name, $new_name) { if ($_POST["drop"]) { query_redirect($drop, $location, $message_drop); } elseif ($old_name == "") { query_redirect($create, $location, $message_create); } elseif ($old_name != $new_name) { $created = queries($create); queries_redirect($location, $message_alter, $created && queries($drop)); if ($created) { queries($drop_created); } } else { queries_redirect($location, $message_alter, queries($test) && queries($drop_test) && queries($drop) && queries($create)); } }
<?php if (support("kill") && $_POST && !$error) { $killed = 0; foreach ((array) $_POST["kill"] as $val) { if (kill_process($val)) { $killed++; } } queries_redirect(ME . "processlist=", lang('%d process(es) have been killed.', $killed), $killed || !$_POST["kill"]); } page_header(lang('Process list'), $error); ?> <form action="" method="post"> <table cellspacing="0" onclick="tableClick(event);" ondblclick="tableClick(event, true);" class="nowrap checkable"> <?php // HTML valid because there is always at least one process $i = -1; foreach (process_list() as $i => $row) { if (!$i) { echo "<thead><tr lang='en'>" . (support("kill") ? "<th> " : ""); foreach ($row as $key => $val) { echo "<th>{$key}" . doc_link(array('sql' => "show-processlist.html#processlist_" . strtolower($key), 'pgsql' => "monitoring-stats.html#PG-STAT-ACTIVITY-VIEW", 'oracle' => "../b14237/dynviews_2088.htm")); } echo "</thead>\n"; } echo "<tr" . odd() . ">" . (support("kill") ? "<td>" . checkbox("kill[]", $row[$jush == "sql" ? "Id" : "pid"], 0) : ""); foreach ($row as $key => $val) { echo "<td>" . ($jush == "sql" && $key == "Info" && preg_match("~Query|Killed~", $row["Command"]) && $val != "" || $jush == "pgsql" && $key == "current_query" && $val != "<IDLE>" || $jush == "oracle" && $key == "sql_text" && $val != "" ? "<code class='jush-{$jush}'>" . shorten_utf8($val, 100, "</code>") . ' <a href="' . h(ME . ($row["db"] != "" ? "db=" . urlencode($row["db"]) . "&" : "") . "sql=" . urlencode($val)) . '">' . lang('Clone') . '</a>' : nbsp($val)); }
} else { $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 if (!create_database($db, $row["collation"])) { $success = false; } $last = $db; } } restart_session(); set_session("dbs", null); queries_redirect(ME . "db=" . urlencode($last), lang('Database has been created.'), $success); } } else { // alter database 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) { $name = $row["name"]; } elseif (DB != "") {
} if ($result && $_POST["tables"]) { $result = drop_tables($_POST["tables"]); } $message = lang('Tables have been dropped.'); } elseif ($jush != "sql") { $result = $jush == "sqlite" ? queries("VACUUM") : apply_queries("VACUUM" . ($_POST["optimize"] ? "" : " ANALYZE"), $_POST["tables"]); $message = lang('Tables have been optimized.'); } elseif (!$_POST["tables"]) { $message = lang('No tables.'); } elseif ($result = queries(($_POST["optimize"] ? "OPTIMIZE" : ($_POST["check"] ? "CHECK" : ($_POST["repair"] ? "REPAIR" : "ANALYZE"))) . " TABLE " . implode(", ", array_map('idf_escape', $_POST["tables"])))) { while ($row = $result->fetch_assoc()) { $message .= "<b>" . h($row["Table"]) . "</b>: " . h($row["Msg_text"]) . "<br>"; } } queries_redirect(substr(ME, 0, -1), $message, $result); } page_header($_GET["ns"] == "" ? lang('Database') . ": " . h(DB) : lang('Schema') . ": " . h($_GET["ns"]), $error, true); if ($adminer->homepage()) { if ($_GET["ns"] !== "") { echo "<h3 id='tables-views'>" . lang('Tables and views') . "</h3>\n"; $tables_list = tables_list(); if (!$tables_list) { echo "<p class='message'>" . lang('No tables.') . "\n"; } else { echo "<form action='' method='post'>\n"; if (support("table")) { echo "<fieldset><legend>" . lang('Search data in tables') . " <span id='selected2'></span></legend><div>"; echo "<input type='search' name='query' value='" . h($_POST["query"]) . "'> <input type='submit' name='search' value='" . lang('Search') . "'>\n"; echo "</div></fieldset>\n"; if ($_POST["search"] && $_POST["query"] != "") {
break; } } } if (!$error && isset($_GET["host"])) { if ($old_user != $new_user) { queries("DROP USER {$old_user}"); } elseif (!isset($_GET["grant"])) { foreach ($grants as $object => $revoke) { if (preg_match('~^(.+)(\\(.*\\))?$~U', $object, $match)) { grant("REVOKE", array_keys($revoke), $match[2], " ON {$match['1']} FROM {$new_user}"); } } } } queries_redirect(ME . "privileges=", isset($_GET["host"]) ? lang('User has been altered.') : lang('User has been created.'), !$error); if ($created) { // delete new user in case of an error $connection->query("DROP USER {$new_user}"); } } } page_header(isset($_GET["host"]) ? lang('Username') . ": " . h("{$USER}@{$_GET['host']}") : lang('Create user'), $error, array("privileges" => array('', lang('Privileges')))); if ($_POST) { $row = $_POST; $grants = $new_grants; } else { $row = $_GET + array("host" => $connection->result("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)")); // create user on the same domain by default $row["pass"] = $old_pass; if ($old_pass != "") {
<?php $EVENT = $_GET["event"]; $intervals = array("YEAR", "QUARTER", "MONTH", "DAY", "HOUR", "MINUTE", "WEEK", "SECOND", "YEAR_MONTH", "DAY_HOUR", "DAY_MINUTE", "DAY_SECOND", "HOUR_MINUTE", "HOUR_SECOND", "MINUTE_SECOND"); $statuses = array("ENABLED" => "ENABLE", "DISABLED" => "DISABLE", "SLAVESIDE_DISABLED" => "DISABLE ON SLAVE"); $row = $_POST; if ($_POST && !$error) { if ($_POST["drop"]) { query_redirect("DROP EVENT " . idf_escape($EVENT), substr(ME, 0, -1), lang('Event has been dropped.')); } elseif (in_array($row["INTERVAL_FIELD"], $intervals) && isset($statuses[$row["STATUS"]])) { $schedule = "\nON SCHEDULE " . ($row["INTERVAL_VALUE"] ? "EVERY " . q($row["INTERVAL_VALUE"]) . " {$row['INTERVAL_FIELD']}" . ($row["STARTS"] ? " STARTS " . q($row["STARTS"]) : "") . ($row["ENDS"] ? " ENDS " . q($row["ENDS"]) : "") : "AT " . q($row["STARTS"])) . " ON COMPLETION" . ($row["ON_COMPLETION"] ? "" : " NOT") . " PRESERVE"; queries_redirect(substr(ME, 0, -1), $EVENT != "" ? lang('Event has been altered.') : lang('Event has been created.'), queries(($EVENT != "" ? "ALTER EVENT " . idf_escape($EVENT) . $schedule . ($EVENT != $row["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($row["EVENT_NAME"]) : "") : "CREATE EVENT " . idf_escape($row["EVENT_NAME"]) . $schedule) . "\n" . $statuses[$row["STATUS"]] . " COMMENT " . q($row["EVENT_COMMENT"]) . rtrim(" DO\n{$row['EVENT_DEFINITION']}", ";") . ";")); } } page_header($EVENT != "" ? lang('Alter event') . ": " . h($EVENT) : lang('Create event'), $error); if (!$row && $EVENT != "") { $rows = get_rows("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . q(DB) . " AND EVENT_NAME = " . q($EVENT)); $row = reset($rows); } ?> <form action="" method="post"> <table cellspacing="0"> <tr><th><?php echo lang('Name'); ?> <td><input name="EVENT_NAME" value="<?php echo h($row["EVENT_NAME"]); ?> " maxlength="64" autocapitalize="off"> <tr><th title="datetime"><?php
/** Drop old object and create a new one * @param string drop query * @param string create query * @param string * @param string * @param string * @param string * @param string * @return bool dropped */ function drop_create($drop, $create, $location, $message_drop, $message_alter, $message_create, $name) { if ($_POST["drop"]) { return query_redirect($drop, $location, $message_drop, true, !$_POST["dropped"]); } $dropped = $name != "" && ($_POST["dropped"] || queries($drop)); $created = queries($create); if (!queries_redirect($location, $name != "" ? $message_alter : $message_create, $created) && $dropped) { redirect(null, $message_drop); } return $dropped; }
$name = $_GET["name"]; $trigger_options = trigger_options(); $row = (array) trigger($name) + array("Trigger" => $TABLE . "_bi"); if ($_POST) { if (!$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_options["Event"]) && in_array($_POST["Type"], $trigger_options["Type"])) { // don't use drop_create() because there may not be more triggers for the same action $on = " ON " . table($TABLE); $drop = "DROP TRIGGER " . idf_escape($name) . ($jush == "pgsql" ? $on : ""); $location = ME . "table=" . urlencode($TABLE); if ($_POST["drop"]) { query_redirect($drop, $location, lang('Trigger has been dropped.')); } else { if ($name != "") { queries($drop); } queries_redirect($location, $name != "" ? lang('Trigger has been altered.') : lang('Trigger has been created.'), queries(create_trigger($on, $_POST))); if ($name != "") { queries(create_trigger($on, $row + array("Type" => reset($trigger_options["Type"])))); } } } $row = $_POST; } page_header($name != "" ? lang('Alter trigger') . ": " . h($name) : lang('Create trigger'), $error, array("table" => $TABLE)); ?> <form action="" method="post" id="form"> <table cellspacing="0"> <tr><th><?php echo lang('Time'); ?>
$value = $_POST["partition_values"][$key]; $partitions[] = "\nPARTITION " . idf_escape($val) . " VALUES " . ($_POST["partition_by"] == 'RANGE' ? "LESS THAN" : "IN") . ($value != "" ? " ({$value})" : " MAXVALUE"); //! SQL injection } } $partitioning .= "\nPARTITION BY {$_POST['partition_by']}({$_POST['partition']})" . ($partitions ? " (" . implode(",", $partitions) . "\n)" : ($_POST["partitions"] ? " PARTITIONS " . +$_POST["partitions"] : "")); } elseif (support("partitioning") && ereg("partitioned", $orig_status["Create_options"])) { $partitioning .= "\nREMOVE PARTITIONING"; } $message = lang('Table has been altered.'); if ($TABLE == "") { cookie("adminer_engine", $_POST["Engine"]); $message = lang('Table has been created.'); } $name = trim($_POST["name"]); queries_redirect(ME . "table=" . urlencode($name), $message, alter_table($TABLE, $name, $jush == "sqlite" && ($use_all_fields || $foreign) ? $all_fields : $fields, $foreign, $_POST["Comment"], $_POST["Engine"] && $_POST["Engine"] != $orig_status["Engine"] ? $_POST["Engine"] : "", $_POST["Collation"] && $_POST["Collation"] != $orig_status["Collation"] ? $_POST["Collation"] : "", $_POST["Auto_increment"] != "" ? +$_POST["Auto_increment"] : "", $partitioning)); } } page_header($TABLE != "" ? lang('Alter table') : lang('Create table'), $error, array("table" => $TABLE), $TABLE); $row = array("Engine" => $_COOKIE["adminer_engine"], "fields" => array(array("field" => "", "type" => isset($types["int"]) ? "int" : (isset($types["integer"]) ? "integer" : ""))), "partition_names" => array("")); if ($_POST) { $row = $_POST; if ($row["auto_increment_col"]) { $row["fields"][$row["auto_increment_col"]]["auto_increment"] = true; } process_fields($row["fields"]); } elseif ($TABLE != "") { $row = $orig_status; $row["name"] = $TABLE; $row["fields"] = array(); if (!$_GET["auto_increment"]) {
foreach (array_filter($_POST["partition_names"]) as $key => $val) { $value = $_POST["partition_values"][$key]; $partitions[] = "\nPARTITION " . idf_escape($val) . " VALUES " . ($_POST["partition_by"] == 'RANGE' ? "LESS THAN" : "IN") . ($value != "" ? " ({$value})" : " MAXVALUE"); //! SQL injection } } $partitioning .= "\nPARTITION BY {$_POST['partition_by']}({$_POST['partition']})" . ($partitions ? " (" . implode(",", $partitions) . "\n)" : ($_POST["partitions"] ? " PARTITIONS " . +$_POST["partitions"] : "")); } elseif ($TABLE != "" && support("partitioning")) { $partitioning .= "\nREMOVE PARTITIONING"; } $message = lang('Table has been altered.'); if ($TABLE == "") { cookie("adminer_engine", $_POST["Engine"]); $message = lang('Table has been created.'); } queries_redirect(ME . "table=" . urlencode($_POST["name"]), $message, alter_table($TABLE, $_POST["name"], $fields, $foreign, $_POST["Comment"], $_POST["Engine"] && $_POST["Engine"] != $orig_status["Engine"] ? $_POST["Engine"] : "", $_POST["Collation"] && $_POST["Collation"] != $orig_status["Collation"] ? $_POST["Collation"] : "", $_POST["Auto_increment"] != "" ? +$_POST["Auto_increment"] : "", $partitioning)); } } page_header($TABLE != "" ? lang('Alter table') : lang('Create table'), $error, array("table" => $TABLE), $TABLE); $row = array("Engine" => $_COOKIE["adminer_engine"], "fields" => array(array("field" => "", "type" => isset($types["int"]) ? "int" : (isset($types["integer"]) ? "integer" : ""))), "partition_names" => array("")); if ($_POST) { $row = $_POST; if ($row["auto_increment_col"]) { $row["fields"][$row["auto_increment_col"]]["auto_increment"] = true; } process_fields($row["fields"]); } elseif ($TABLE != "") { $row = $orig_status; $row["name"] = $TABLE; $row["fields"] = array(); if (!$_GET["auto_increment"]) {
$value = $row["partition_values"][$key]; $partitions[] = "\n PARTITION " . idf_escape($val) . " VALUES " . ($row["partition_by"] == 'RANGE' ? "LESS THAN" : "IN") . ($value != "" ? " ({$value})" : " MAXVALUE"); //! SQL injection } } $partitioning .= "\nPARTITION BY {$row['partition_by']}({$row['partition']})" . ($partitions ? " (" . implode(",", $partitions) . "\n)" : ($row["partitions"] ? " PARTITIONS " . +$row["partitions"] : "")); } elseif (support("partitioning") && preg_match("~partitioned~", $table_status["Create_options"])) { $partitioning .= "\nREMOVE PARTITIONING"; } $message = lang('Table has been altered.'); if ($TABLE == "") { cookie("adminer_engine", $row["Engine"]); $message = lang('Table has been created.'); } $name = trim($row["name"]); queries_redirect(ME . (support("table") ? "table=" : "select=") . urlencode($name), $message, alter_table($TABLE, $name, $jush == "sqlite" && ($use_all_fields || $foreign) ? $all_fields : $fields, $foreign, $row["Comment"] != $table_status["Comment"] ? $row["Comment"] : null, $row["Engine"] && $row["Engine"] != $table_status["Engine"] ? $row["Engine"] : "", $row["Collation"] && $row["Collation"] != $table_status["Collation"] ? $row["Collation"] : "", $row["Auto_increment"] != "" ? number($row["Auto_increment"]) : "", $partitioning)); } } page_header($TABLE != "" ? lang('Alter table') : lang('Create table'), $error, array("table" => $TABLE), h($TABLE)); if (!$_POST) { $row = array("Engine" => $_COOKIE["adminer_engine"], "fields" => array(array("field" => "", "type" => isset($types["int"]) ? "int" : (isset($types["integer"]) ? "integer" : ""))), "partition_names" => array("")); if ($TABLE != "") { $row = $table_status; $row["name"] = $TABLE; $row["fields"] = array(); if (!$_GET["auto_increment"]) { // don't prefill by original Auto_increment for the sake of performance and not reusing deleted ids $row["Auto_increment"] = ""; } foreach ($orig_fields as $field) { $field["has_default"] = isset($field["default"]);
unset($indexes[$name]); continue; } } $alter[] = array($index["type"], $name, $set); } } } // drop removed indexes foreach ($indexes as $name => $existing) { $alter[] = array($existing["type"], $name, "DROP"); } if (!$alter) { redirect(ME . "table=" . urlencode($TABLE)); } queries_redirect(ME . "table=" . urlencode($TABLE), lang('Indexes have been altered.'), alter_indexes($TABLE, $alter)); } page_header(lang('Indexes'), $error, array("table" => $TABLE), h($TABLE)); $fields = array_keys(fields($TABLE)); if ($_POST["add"]) { foreach ($row["indexes"] as $key => $index) { if ($index["columns"][count($index["columns"])] != "") { $row["indexes"][$key]["columns"][] = ""; } } $index = end($row["indexes"]); if ($index["type"] || array_filter($index["columns"], 'strlen')) { $row["indexes"][] = array("columns" => array(1 => "")); } } if (!$row) {
$set = array(); foreach ($fields as $name => $field) { $val = process_input($field); if ($val !== false && $val !== null) { $set[idf_escape($name)] = $update ? "\n" . idf_escape($name) . " = {$val}" : $val; } } if ($update) { if (!$set) { redirect($location); } query_redirect("UPDATE" . limit1(table($TABLE) . " SET" . implode(",", $set), "\nWHERE {$where}"), $location, lang('Item has been updated.')); } else { $result = insert_into($TABLE, $set); $last_id = $result ? last_id() : 0; queries_redirect($location, lang('Item%s has been inserted.', $last_id ? " {$last_id}" : ""), $result); //! link } } } $table_name = $adminer->tableName(table_status($TABLE)); page_header($update ? lang('Edit') : lang('Insert'), $error, array("select" => array($TABLE, $table_name)), $table_name); $row = null; if ($_POST["save"]) { $row = (array) $_POST["fields"]; } elseif ($where) { $select = array(); foreach ($fields as $name => $field) { if (isset($field["privileges"]["select"])) { $as = convert_field($field); if ($_POST["clone"] && $field["auto_increment"]) {
$set = array(); foreach ($fields as $name => $field) { $val = process_input($field); if ($val !== false && $val !== null) { $set[idf_escape($name)] = $update ? "\n" . idf_escape($name) . " = {$val}" : $val; } } if ($update) { if (!$set) { redirect($location); } query_redirect("UPDATE" . limit1(table($TABLE) . " SET" . implode(",", $set), "\nWHERE {$where}"), $location, array(lang('Item has been updated.'), 'success')); } else { $result = insert_into($TABLE, $set); $last_id = $result ? last_id() : 0; queries_redirect($location, array(lang('Item%s has been inserted.', $last_id ? " {$last_id}" : ""), 'success'), $result); //! link } } } $table_name = $adminer->tableName(table_status($TABLE)); page_header($update ? lang('Edit') : lang('Insert'), $error, array("select" => array($TABLE, $table_name)), $table_name); $adminer->selectLinks($table_status, ''); // @todo are params OK? $row = null; if ($_POST["save"]) { $row = (array) $_POST["fields"]; } elseif ($where) { $select = array(); foreach ($fields as $name => $field) { if (isset($field["privileges"]["select"])) {
$TABLE = $_GET["foreign"]; $name = $_GET["name"]; $row = $_POST; if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-js"]) { $message = $_POST["drop"] ? lang('Foreign key has been dropped.') : ($name != "" ? lang('Foreign key has been altered.') : lang('Foreign key has been created.')); $location = ME . "table=" . urlencode($TABLE); $row["source"] = array_filter($row["source"], 'strlen'); ksort($row["source"]); // enforce input order $target = array(); foreach ($row["source"] as $key => $val) { $target[$key] = $row["target"][$key]; } $row["target"] = $target; if ($jush == "sqlite") { queries_redirect($location, $message, recreate_table($TABLE, $TABLE, array(), array(), array(" {$name}" => $_POST["drop"] ? "" : " " . format_foreign_key($row)))); } else { $alter = "ALTER TABLE " . table($TABLE); $drop = "\nDROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($name); if ($_POST["drop"]) { query_redirect($alter . $drop, $location, $message); } else { query_redirect($alter . ($name != "" ? "{$drop}," : "") . "\nADD" . format_foreign_key($row), $location, $message); $error = lang('Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.') . "<br>{$error}"; //! no partitioning } } } page_header(lang('Foreign key'), $error, array("table" => $TABLE), h($TABLE)); if ($_POST) { ksort($row["source"]);