From 98507da3ea0917ec46510bb0bf819b2ed3be49c2 Mon Sep 17 00:00:00 2001 From: jakubvrana Date: Thu, 30 Jul 2009 08:12:54 +0000 Subject: [PATCH] Function verify_version doesn't use version parameter Don't preselect first option in foreign key edit Prefill insert by foreign key searches REQUEST_URI is used earlier Change variable $SELF to constant ME Denote required fields in Editor git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@944 7c3ca157-0c34-0410-bff1-cbf682f78f5c --- adminer/create.inc.php | 2 +- adminer/database.inc.php | 10 +++++----- adminer/db.inc.php | 24 ++++++++++++------------ adminer/edit.inc.php | 8 ++++++-- adminer/event.inc.php | 4 ++-- adminer/foreign.inc.php | 4 ++-- adminer/functions.js | 2 +- adminer/include/adminer.inc.php | 21 +++++++++------------ adminer/include/auth.inc.php | 2 +- adminer/include/bootstrap.inc.php | 9 +++++---- adminer/include/connect.inc.php | 4 ++-- adminer/include/design.inc.php | 10 +++++----- adminer/include/functions.inc.php | 15 ++++----------- adminer/indexes.inc.php | 4 ++-- adminer/privileges.inc.php | 4 ++-- adminer/procedure.inc.php | 4 ++-- adminer/processlist.inc.php | 2 +- adminer/schema.inc.php | 2 +- adminer/select.inc.php | 21 ++++++++++++++------- adminer/sql.inc.php | 2 +- adminer/table.inc.php | 22 +++++++++++----------- adminer/trigger.inc.php | 4 ++-- adminer/user.inc.php | 4 ++-- adminer/view.inc.php | 4 ++-- changes.txt | 1 + editor/include/adminer.inc.php | 10 +++------- released.js | 1 + 27 files changed, 100 insertions(+), 100 deletions(-) diff --git a/adminer/create.inc.php b/adminer/create.inc.php index 2176250b..eb37ad48 100644 --- a/adminer/create.inc.php +++ b/adminer/create.inc.php @@ -69,7 +69,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] } elseif ($dbh->server_info >= 5.1 && strlen($_GET["create"])) { $status .= "\nREMOVE PARTITIONING"; } - $location = $SELF . "table=" . urlencode($_POST["name"]); + $location = ME . "table=" . urlencode($_POST["name"]); if (strlen($_GET["create"])) { query_redirect("ALTER TABLE " . idf_escape($_GET["create"]) . implode(",", $fields) . ",\nRENAME TO " . idf_escape($_POST["name"]) . ",\n$status", $location, lang('Table has been altered.')); } else { diff --git a/adminer/database.inc.php b/adminer/database.inc.php index d70e37a3..b7bc6f67 100644 --- a/adminer/database.inc.php +++ b/adminer/database.inc.php @@ -2,7 +2,7 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP changes add.x to add_x if ($_POST["drop"]) { unset($_SESSION["databases"][$_GET["server"]]); - query_redirect("DROP DATABASE " . idf_escape($_GET["db"]), substr(preg_replace('~db=[^&]*&~', '', $SELF), 0, -1), lang('Database has been dropped.')); + query_redirect("DROP DATABASE " . idf_escape($_GET["db"]), substr(preg_replace('~db=[^&]*&~', '', ME), 0, -1), lang('Database has been dropped.')); } elseif ($_GET["db"] !== $_POST["name"]) { // create or rename database unset($_SESSION["databases"][$_GET["server"]]); // clear cache @@ -17,7 +17,7 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP c $last = $db; } } - if (query_redirect(queries(), $SELF . "db=" . urlencode($last), lang('Database has been created.'), !strlen($_GET["db"]), false, $failed)) { + if (query_redirect(queries(), ME . "db=" . urlencode($last), lang('Database has been created.'), !strlen($_GET["db"]), false, $failed)) { $result = $dbh->query("SHOW TABLES"); while ($row = $result->fetch_row()) { if (!queries("RENAME TABLE " . idf_escape($row[0]) . " TO " . idf_escape($_POST["name"]) . "." . idf_escape($row[0]))) { @@ -28,14 +28,14 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP c if (!$row) { queries("DROP DATABASE " . idf_escape($_GET["db"])); } - query_redirect(queries(), preg_replace('~db=[^&]*&~', '', $SELF) . "db=" . urlencode($_POST["name"]), lang('Database has been renamed.'), !$row, false, $row); + query_redirect(queries(), preg_replace('~db=[^&]*&~', '', ME) . "db=" . urlencode($_POST["name"]), lang('Database has been renamed.'), !$row, false, $row); } } else { // alter database if (!$_POST["collation"]) { - redirect(substr($SELF, 0, -1)); + redirect(substr(ME, 0, -1)); } - query_redirect("ALTER DATABASE " . idf_escape($_POST["name"]) . " COLLATE " . $dbh->quote($_POST["collation"]), substr($SELF, 0, -1), lang('Database has been altered.')); + query_redirect("ALTER DATABASE " . idf_escape($_POST["name"]) . " COLLATE " . $dbh->quote($_POST["collation"]), substr(ME, 0, -1), lang('Database has been altered.')); } } diff --git a/adminer/db.inc.php b/adminer/db.inc.php index d72f21d8..758c0c84 100644 --- a/adminer/db.inc.php +++ b/adminer/db.inc.php @@ -35,12 +35,12 @@ if ($tables_views && !$error) { } } } - query_redirect(queries(), substr($SELF, 0, -1), $message, $result, false, !$result); + query_redirect(queries(), substr(ME, 0, -1), $message, $result, false, !$result); } page_header(lang('Database') . ": " . h($_GET["db"]), $error, false); -echo '

' . lang('Alter database') . "\n"; -echo '

' . lang('Database schema') . "\n"; +echo '

' . lang('Alter database') . "\n"; +echo '

' . lang('Database schema') . "\n"; echo "

" . lang('Tables and views') . "

\n"; $table_status = table_status(); @@ -54,16 +54,16 @@ if (!$table_status) { $name = $row["Name"]; table_comment($row); echo ''; - echo '' . h($name) . ''; + echo '' . h($name) . ''; if (isset($row["Rows"])) { echo "$row[Engine]$row[Collation]"; foreach (array("Data_length" => "create", "Index_length" => "indexes", "Data_free" => "edit", "Auto_increment" => "create", "Rows" => "select") as $key => $link) { $val = number_format($row[$key], 0, '.', lang(',')); - echo '' . (strlen($row[$key]) ? '' . str_replace(" ", " ", ($key == "Rows" && $row["Engine"] == "InnoDB" && $val ? lang('~ %s', $val) : $val)) . '' : ' '); + echo '' . (strlen($row[$key]) ? '' . str_replace(" ", " ", ($key == "Rows" && $row["Engine"] == "InnoDB" && $val ? lang('~ %s', $val) : $val)) . '' : ' '); } echo "" . (strlen(trim($row["Comment"])) ? h($row["Comment"]) : " "); } else { - echo '' . lang('View') . ''; + echo '' . lang('View') . ''; } } echo "\n"; @@ -77,7 +77,7 @@ if (!$table_status) { } if ($dbh->server_info >= 5) { - echo '

' . lang('Create view') . "\n"; + echo '

' . lang('Create view') . "\n"; echo "

" . lang('Routines') . "

\n"; $result = $dbh->query("SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . $dbh->quote($_GET["db"])); if ($result->num_rows) { @@ -85,13 +85,13 @@ if ($dbh->server_info >= 5) { while ($row = $result->fetch_assoc()) { echo ""; echo "" . h($row["ROUTINE_TYPE"]); - echo '' . h($row["ROUTINE_NAME"]) . ''; - echo '' . lang('Alter') . ""; + echo '' . h($row["ROUTINE_NAME"]) . ''; + echo '' . lang('Alter') . ""; } echo "\n"; } $result->free(); - echo '

' . lang('Create procedure') . ' ' . lang('Create function') . "\n"; + echo '

' . lang('Create procedure') . ' ' . lang('Create function') . "\n"; } if ($dbh->server_info >= 5.1 && ($result = $dbh->query("SHOW EVENTS"))) { @@ -101,12 +101,12 @@ if ($dbh->server_info >= 5.1 && ($result = $dbh->query("SHOW EVENTS"))) { echo "" . lang('Name') . "" . lang('Schedule') . "" . lang('Start') . "" . lang('End') . "\n"; while ($row = $result->fetch_assoc()) { echo ""; - echo '' . h($row["Name"]) . ""; + echo '' . h($row["Name"]) . ""; echo "" . ($row["Execute at"] ? lang('At given time') . "" . $row["Execute at"] : lang('Every') . " " . $row["Interval value"] . " " . $row["Interval field"] . "$row[Starts]"); echo "$row[Ends]"; } echo "\n"; } $result->free(); - echo '

' . lang('Create event') . "\n"; + echo '

' . lang('Create event') . "\n"; } diff --git a/adminer/edit.inc.php b/adminer/edit.inc.php index 03358e2f..a193a5d5 100644 --- a/adminer/edit.inc.php +++ b/adminer/edit.inc.php @@ -8,7 +8,10 @@ foreach ($fields as $name => $field) { } } if ($_POST && !$error && !isset($_GET["select"])) { - $location = ($_POST["insert"] ? $_SERVER["REQUEST_URI"] : $SELF . (isset($_GET["default"]) ? "table=" : "select=") . urlencode($_GET["edit"])); // "insert" to continue edit or insert + $location = ($_POST["insert"] // continue edit or insert + ? $_SERVER["REQUEST_URI"] + : ME . (isset($_GET["default"]) ? "table=" : "select=") . urlencode($_GET["edit"]) //! append &set converted to &where + ); $set = array(); foreach ($fields as $name => $field) { $val = process_input($field); @@ -70,9 +73,10 @@ if ($fields) { echo "\n"; foreach ($fields as $name => $field) { echo "
" . $adminer->fieldName($field); + $default = $_GET["set"][bracket_escape($name)]; $value = (isset($row) ? (strlen($row[$name]) && ($field["type"] == "enum" || $field["type"] == "set") ? intval($row[$name]) : $row[$name]) - : ($_POST["clone"] && $field["auto_increment"] ? "" : (isset($_GET["select"]) ? false : $field["default"])) + : ($_POST["clone"] && $field["auto_increment"] ? "" : (isset($_GET["select"]) ? false : (isset($default) ? $default : $field["default"]))) ); if (!$_POST["save"] && is_string($value)) { $value = $adminer->editVal($value, $field); diff --git a/adminer/event.inc.php b/adminer/event.inc.php index 3e239899..b83730f7 100644 --- a/adminer/event.inc.php +++ b/adminer/event.inc.php @@ -4,7 +4,7 @@ $statuses = array("ENABLED" => "ENABLE", "DISABLED" => "DISABLE", "SLAVESIDE_DIS if ($_POST && !$error) { if ($_POST["drop"]) { - query_redirect("DROP EVENT " . idf_escape($_GET["event"]), substr($SELF, 0, -1), lang('Event has been dropped.')); + query_redirect("DROP EVENT " . idf_escape($_GET["event"]), substr(ME, 0, -1), lang('Event has been dropped.')); } elseif (in_array($_POST["INTERVAL_FIELD"], $intervals) && isset($statuses[$_POST["STATUS"]])) { $schedule = "\nON SCHEDULE " . ($_POST["INTERVAL_VALUE"] ? "EVERY " . $dbh->quote($_POST["INTERVAL_VALUE"]) . " $_POST[INTERVAL_FIELD]" @@ -19,7 +19,7 @@ if ($_POST && !$error) { : "CREATE EVENT " . idf_escape($_POST["EVENT_NAME"]) . $schedule ) . "\n" . $statuses[$_POST["STATUS"]] . " COMMENT " . $dbh->quote($_POST["EVENT_COMMENT"]) . " DO\n$_POST[EVENT_DEFINITION]" - , substr($SELF, 0, -1), (strlen($_GET["event"]) ? lang('Event has been altered.') : lang('Event has been created.'))); + , substr(ME, 0, -1), (strlen($_GET["event"]) ? lang('Event has been altered.') : lang('Event has been created.'))); } } diff --git a/adminer/foreign.inc.php b/adminer/foreign.inc.php index 709eda63..b3ceb687 100644 --- a/adminer/foreign.inc.php +++ b/adminer/foreign.inc.php @@ -1,7 +1,7 @@ $error"; //! no partitioning } } diff --git a/adminer/functions.js b/adminer/functions.js index bbc89b63..d3620f2f 100644 --- a/adminer/functions.js +++ b/adminer/functions.js @@ -6,7 +6,7 @@ function toggle(id) { return true; } -function verify_version(version) { +function verify_version() { document.cookie = 'adminer_version=0'; var script = document.createElement('script'); script.src = 'https://adminer.svn.sourceforge.net/svnroot/adminer/trunk/released.js'; diff --git a/adminer/include/adminer.inc.php b/adminer/include/adminer.inc.php index f7ce3452..1c22e782 100644 --- a/adminer/include/adminer.inc.php +++ b/adminer/include/adminer.inc.php @@ -71,8 +71,7 @@ class Adminer { * @return string */ function selectLinks($tableStatus) { - global $SELF; - return '' . lang('Table structure') . ''; + return '' . lang('Table structure') . ''; } /** Find backward keys for table @@ -88,9 +87,8 @@ class Adminer { * @return string */ function selectQuery($query) { - global $SELF; // it would be nice if $query can be passed by reference and printed value would be returned but call_user() doesn't allow reference parameters - return "

" . h($query) . " " . lang('Edit') . "\n"; + return "

" . h($query) . " " . lang('Edit') . "\n"; } /** Description of a row in a table @@ -337,10 +335,9 @@ class Adminer { * @return string */ function messageQuery($query) { - global $SELF; $id = "sql-" . count($_SESSION["messages"]); $_SESSION["history"][$_GET["server"]][$_GET["db"]][] = $query; - return " " . lang('SQL command') . "

'; + return " " . lang('SQL command') . "'; } /** Functions displayed in edit form @@ -416,14 +413,14 @@ class Adminer { * @return null */ function navigation($missing) { - global $SELF, $dbh; + global $dbh; if ($missing != "auth") { $databases = get_databases(); ?>

- -"> + +"> ">

@@ -449,12 +446,12 @@ class Adminer { } else { echo "

\n"; while ($row = $result->fetch_row()) { - echo '' . lang('select') . ' '; - echo '' . $this->tableName(array("Name" => $row[0])) . "
\n"; //! Adminer::tableName may work with full table status + echo '' . lang('select') . ' '; + echo '' . $this->tableName(array("Name" => $row[0])) . "
\n"; //! Adminer::tableName may work with full table status } } $result->free(); - echo '

' . lang('Create new table') . "\n"; + echo '

' . lang('Create new table') . "\n"; } } } diff --git a/adminer/include/auth.inc.php b/adminer/include/auth.inc.php index 9be6903b..29ad81ce 100644 --- a/adminer/include/auth.inc.php +++ b/adminer/include/auth.inc.php @@ -32,7 +32,7 @@ if (isset($_POST["server"])) { foreach (array("usernames", "passwords", "databases", "tokens", "history") as $val) { unset($_SESSION[$val][$_GET["server"]]); } - redirect(substr($SELF, 0, -1), lang('Logout successful.')); + redirect(substr(ME, 0, -1), lang('Logout successful.')); } } diff --git a/adminer/include/bootstrap.inc.php b/adminer/include/bootstrap.inc.php index 843551f3..35b64940 100644 --- a/adminer/include/bootstrap.inc.php +++ b/adminer/include/bootstrap.inc.php @@ -39,6 +39,10 @@ if (isset($_GET["file"])) { exit; } +if (!isset($_SERVER["REQUEST_URI"])) { + $_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"] . (strlen($_SERVER["QUERY_STRING"]) ? "?$_SERVER[QUERY_STRING]" : ""); +} + if (!ini_get("session.auto_start")) { // use specific session name to get own namespace session_name("adminer_sid"); @@ -64,10 +68,7 @@ if (get_magic_quotes_gpc()) { } set_magic_quotes_runtime(false); -if (!isset($_SERVER["REQUEST_URI"])) { - $_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"] . (strlen($_SERVER["QUERY_STRING"]) ? "?$_SERVER[QUERY_STRING]" : ""); -} -$SELF = preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"]) . '?' . (strlen($_GET["server"]) ? 'server=' . urlencode($_GET["server"]) . '&' : '') . (strlen($_GET["db"]) ? 'db=' . urlencode($_GET["db"]) . '&' : ''); +define("ME", preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"]) . '?' . (strlen($_GET["server"]) ? 'server=' . urlencode($_GET["server"]) . '&' : '') . (strlen($_GET["db"]) ? 'db=' . urlencode($_GET["db"]) . '&' : '')); $on_actions = array("RESTRICT", "CASCADE", "SET NULL", "NO ACTION"); // used in foreign_keys() include "../adminer/include/version.inc.php"; diff --git a/adminer/include/connect.inc.php b/adminer/include/connect.inc.php index ffe05339..84b25214 100644 --- a/adminer/include/connect.inc.php +++ b/adminer/include/connect.inc.php @@ -1,6 +1,6 @@ lang('Process list'), 'variables' => lang('Variables'), ) as $key => $val) { - echo '

$val\n"; + echo '

$val\n"; } echo "

" . lang('MySQL version: %s through PHP extension %s', "server_info < 4.1 ? " class='binary'" : "") . ">$dbh->server_info", "$dbh->extension") . "\n"; echo "

" . lang('Logged as: %s', "" . h($dbh->result($dbh->query("SELECT USER()"))) . "") . "\n"; diff --git a/adminer/include/design.inc.php b/adminer/include/design.inc.php index 060db123..9b7c751d 100644 --- a/adminer/include/design.inc.php +++ b/adminer/include/design.inc.php @@ -1,6 +1,6 @@ @@ -15,23 +15,23 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") { -"> +">

' . (isset($_GET["server"]) ? h($_GET["server"]) : lang('Server')) . ' » '; if (is_array($breadcrumb)) { if (strlen($_GET["db"])) { - echo '' . h($_GET["db"]) . ' » '; + echo '' . h($_GET["db"]) . ' » '; } foreach ($breadcrumb as $key => $val) { $desc = (is_array($val) ? $val[1] : $val); if (strlen($desc)) { - echo '' . h($desc) . ' » '; + echo '' . h($desc) . ' » '; } } } diff --git a/adminer/include/functions.inc.php b/adminer/include/functions.inc.php index 4c5dc74b..f4a43da3 100644 --- a/adminer/include/functions.inc.php +++ b/adminer/include/functions.inc.php @@ -1,10 +1,4 @@ messageQuery($query); @@ -178,7 +172,6 @@ function odd($s = ' class="odd"') { } function select($result, $dbh2 = null) { - global $SELF; if (!$result->num_rows) { echo "

" . lang('No rows.') . "\n"; } else { @@ -238,9 +231,9 @@ function select($result, $dbh2 = null) { if (isset($links[$key]) && !$columns[$links[$key]]) { $link = "edit=" . urlencode($links[$key]); foreach ($indexes[$links[$key]] as $col => $j) { - $link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]); + $link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]); } - $val = "$val"; + $val = "$val"; } } echo "

$val"; @@ -310,7 +303,7 @@ function input($field, $value, $function) { $functions = (isset($_GET["select"]) ? array("orig" => lang('original')) : array()) + $adminer->editFunctions($field); $first = array_search("", $functions) + (isset($_GET["select"]) ? 1 : 0); $onchange = ($first ? " onchange=\"var f = this.form['function[" . addcslashes($name, "\r\n'\\") . "]']; if ($first > f.selectedIndex) f.selectedIndex = $first;\"" : ""); - echo (count($functions) > 1 ? "" : " ") . ''; + echo (count($functions) > 1 ? "" : (strlen($functions[0]) ? $functions[0] : " ")) . ''; $input = $adminer->editInput($_GET["edit"], $field, " name='fields[$name]'$onchange", $value); // usage in call is without a table if (strlen($input)) { echo $input; diff --git a/adminer/indexes.inc.php b/adminer/indexes.inc.php index 7bf43600..0d99db3a 100644 --- a/adminer/indexes.inc.php +++ b/adminer/indexes.inc.php @@ -34,9 +34,9 @@ if ($_POST && !$error && !$_POST["add"]) { $alter[] = "\nDROP INDEX " . idf_escape($name); } if (!$alter) { - redirect($SELF . "table=" . urlencode($_GET["indexes"])); + redirect(ME . "table=" . urlencode($_GET["indexes"])); } - query_redirect("ALTER TABLE " . idf_escape($_GET["indexes"]) . implode(",", $alter), $SELF . "table=" . urlencode($_GET["indexes"]), lang('Indexes has been altered.')); + query_redirect("ALTER TABLE " . idf_escape($_GET["indexes"]) . implode(",", $alter), ME . "table=" . urlencode($_GET["indexes"]), lang('Indexes has been altered.')); } page_header(lang('Indexes'), $error, array("table" => $_GET["indexes"]), $_GET["indexes"]); diff --git a/adminer/privileges.inc.php b/adminer/privileges.inc.php index 0342fd7a..7872147e 100644 --- a/adminer/privileges.inc.php +++ b/adminer/privileges.inc.php @@ -1,6 +1,6 @@ ' . lang('Create user') . ""; +echo '

' . lang('Create user') . ""; $result = $dbh->query("SELECT User, Host FROM mysql.user ORDER BY Host, User"); if (!$result) { @@ -19,7 +19,7 @@ if (!$result) { echo "\n"; echo "\n"; while ($row = $result->fetch_assoc()) { - echo '
 " . lang('Username') . "" . lang('Server') . "
' . lang('edit') . '' . h($row["User"]) . "" . h($row["Host"]) . "\n"; + echo '' . lang('edit') . '' . h($row["User"]) . "" . h($row["Host"]) . "\n"; } echo "
\n"; $result->free(); diff --git a/adminer/procedure.inc.php b/adminer/procedure.inc.php index a939f42e..275e9abd 100644 --- a/adminer/procedure.inc.php +++ b/adminer/procedure.inc.php @@ -4,7 +4,7 @@ $routine = (isset($_GET["function"]) ? "FUNCTION" : "PROCEDURE"); $dropped = false; if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] && !$_POST["down"]) { if (strlen($_GET["procedure"])) { - $dropped = query_redirect("DROP $routine " . idf_escape($_GET["procedure"]), substr($SELF, 0, -1), lang('Routine has been dropped.'), $_POST["drop"], !$_POST["dropped"]); + $dropped = query_redirect("DROP $routine " . idf_escape($_GET["procedure"]), substr(ME, 0, -1), lang('Routine has been dropped.'), $_POST["drop"], !$_POST["dropped"]); } if (!$_POST["drop"]) { $set = array(); @@ -19,7 +19,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] . " (" . implode(", ", $set) . ")" . (isset($_GET["function"]) ? " RETURNS" . process_type($_POST["returns"], "CHARACTER SET") : "") . "\n$_POST[definition]" - , substr($SELF, 0, -1), (strlen($_GET["procedure"]) ? lang('Routine has been altered.') : lang('Routine has been created.'))); + , substr(ME, 0, -1), (strlen($_GET["procedure"]) ? lang('Routine has been altered.') : lang('Routine has been created.'))); } } diff --git a/adminer/processlist.inc.php b/adminer/processlist.inc.php index 76d29955..91413402 100644 --- a/adminer/processlist.inc.php +++ b/adminer/processlist.inc.php @@ -6,7 +6,7 @@ if ($_POST && !$error) { $killed++; } } - query_redirect(queries(), $SELF . "processlist=", lang('%d process(es) has been killed.', $killed), $killed || !$_POST["kill"], false, !$killed && $_POST["kill"]); + query_redirect(queries(), ME . "processlist=", lang('%d process(es) has been killed.', $killed), $killed || !$_POST["kill"], false, !$killed && $_POST["kill"]); } page_header(lang('Process list'), $error); diff --git a/adminer/schema.inc.php b/adminer/schema.inc.php index c2f7cad3..f594aaf9 100644 --- a/adminer/schema.inc.php +++ b/adminer/schema.inc.php @@ -60,7 +60,7 @@ document.onmouseup = schema_mouseup; $table) { echo "

"; - echo '' . h($name) . "
\n"; + echo '' . h($name) . "
\n"; foreach ($table["fields"] as $field) { $val = '' . h($field["field"]) . ''; echo ($field["primary"] ? "$val" : $val) . "
\n"; diff --git a/adminer/select.inc.php b/adminer/select.inc.php index 944520b5..0f23685b 100644 --- a/adminer/select.inc.php +++ b/adminer/select.inc.php @@ -116,10 +116,18 @@ if ($_POST && !$error) { page_header(lang('Select') . ": " . $adminer->tableName($table_status), $error); +$foreign_keys = column_foreign_keys($_GET["select"]); echo "

"; if (isset($rights["insert"])) { - //! pass search values forth and back - echo '' . lang('New item') . ' '; + $set = ""; + foreach ((array) $_GET["where"] as $val) { + if (count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "=" + || ($val["op"] == "" && !ereg('[_%]', $val["val"])) // LIKE in Editor + )) { + $set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]); + } + } + echo '' . lang('New item') . ' '; } echo $adminer->selectLinks($table_status); @@ -163,7 +171,6 @@ if (!$columns) { : count($rows) ); - $foreign_keys = column_foreign_keys($_GET["select"]); $descriptions = $adminer->rowDescriptions($rows, $foreign_keys); $backward_keys = $adminer->backwardKeys($_GET["select"]); @@ -191,7 +198,7 @@ if (!$columns) { echo ($table_names ? "

" . lang('Relations') : "") . "\n"; foreach ($descriptions as $n => $row) { $unique_idf = implode('&', unique_idf($rows[$n], $indexes)); - echo "" . (count($select) != count($group) || information_schema($_GET["db"]) ? '' : " " . lang('edit') . ""); + echo "" . (count($select) != count($group) || information_schema($_GET["db"]) ? '' : " " . lang('edit') . ""); foreach ($row as $key => $val) { if (isset($names[$key])) { if (strlen($val) && (!isset($email_fields[$key]) || strlen($email_fields[$key]))) { @@ -203,7 +210,7 @@ if (!$columns) { $val = "NULL"; } else { if (ereg('blob|binary', $fields[$key]["type"]) && strlen($val)) { - $link = h($SELF . 'download=' . urlencode($_GET["select"]) . '&field=' . urlencode($key) . '&') . $unique_idf; + $link = h(ME . 'download=' . urlencode($_GET["select"]) . '&field=' . urlencode($key) . '&') . $unique_idf; } if (!strlen(trim($val, " \t"))) { $val = " "; @@ -219,7 +226,7 @@ if (!$columns) { foreach ($foreign_key["source"] as $i => $source) { $link .= where_link($i, $foreign_key["target"][$i], $rows[$n][$source]); } - $link = h((strlen($foreign_key["db"]) ? preg_replace('~([?&]db=)[^&]+~', '\\1' . urlencode($foreign_key["db"]), $SELF) : $SELF) . 'select=' . urlencode($foreign_key["table"])) . $link; // InnoDB supports non-UNIQUE keys + $link = h((strlen($foreign_key["db"]) ? preg_replace('~([?&]db=)[^&]+~', '\\1' . urlencode($foreign_key["db"]), ME) : ME) . 'select=' . urlencode($foreign_key["table"])) . $link; // InnoDB supports non-UNIQUE keys break; } } @@ -235,7 +242,7 @@ if (!$columns) { echo ""; foreach ($table_names as $table => $name) { foreach ($backward_keys[$table] as $columns) { - echo " \n"; foreach ($history as $key => $val) { //! save and display timestamp - echo '' . lang('Edit') . ' ' . shorten_utf8(ltrim(str_replace("\n", " ", preg_replace('~^(#|-- ).*~m', '', $val))), 80, "") . "
\n"; + echo '' . lang('Edit') . ' ' . shorten_utf8(ltrim(str_replace("\n", " ", preg_replace('~^(#|-- ).*~m', '', $val))), 80, "") . "
\n"; } echo "\n"; echo "\n"; diff --git a/adminer/table.inc.php b/adminer/table.inc.php index e6ca6081..c437c84f 100644 --- a/adminer/table.inc.php +++ b/adminer/table.inc.php @@ -22,13 +22,13 @@ if ($result) { echo "

"; if ($is_view) { - echo '' . lang('Alter view') . ''; + echo '' . lang('Alter view') . ''; } else { - echo '' . lang('Alter table') . ''; - echo ($auto_increment_only ? '' : ' ' . lang('Default values') . ''); + echo '' . lang('Alter table') . ''; + echo ($auto_increment_only ? '' : ' ' . lang('Default values') . ''); } - echo ' ' . lang('Select table') . ''; - echo ' ' . lang('New item') . ''; + echo ' ' . lang('Select table') . ''; + echo ' ' . lang('New item') . ''; if (!$is_view) { echo "

" . lang('Indexes') . "

\n"; @@ -45,7 +45,7 @@ if ($result) { } echo "
\n"; } - echo '

' . lang('Alter indexes') . "\n"; + echo '

' . lang('Alter indexes') . "\n"; if ($table_status["Engine"] == "InnoDB") { echo "

" . lang('Foreign keys') . "

\n"; @@ -56,13 +56,13 @@ if ($result) { $link = (strlen($foreign_key["db"]) ? "" . h($foreign_key["db"]) . "." : "") . h($foreign_key["table"]); echo ""; echo "" . implode(", ", array_map('h', $foreign_key["source"])) . ""; - echo "$link"; + echo "$link"; echo "(" . implode(", ", array_map('h', $foreign_key["target"])) . ")"; - echo "" . (!strlen($foreign_key["db"]) ? '' . lang('Alter') . '' : ' '); + echo "" . (!strlen($foreign_key["db"]) ? '' . lang('Alter') . '' : ' '); } echo "\n"; } - echo '

' . lang('Add foreign key') . "\n"; + echo '

' . lang('Add foreign key') . "\n"; } if ($dbh->server_info >= 5) { @@ -71,12 +71,12 @@ if ($result) { if ($result->num_rows) { echo "\n"; while ($row = $result->fetch_assoc()) { - echo "
$row[Timing]$row[Event]" . h($row["Trigger"]) . "' . lang('Alter') . "\n"; + echo "
$row[Timing]$row[Event]" . h($row["Trigger"]) . "' . lang('Alter') . "\n"; } echo "
\n"; } $result->free(); - echo '

' . lang('Add trigger') . "\n"; + echo '

' . lang('Add trigger') . "\n"; } } } diff --git a/adminer/trigger.inc.php b/adminer/trigger.inc.php index 825a05e7..3bc6cbba 100644 --- a/adminer/trigger.inc.php +++ b/adminer/trigger.inc.php @@ -5,11 +5,11 @@ $trigger_event = array("INSERT", "UPDATE", "DELETE"); $dropped = false; if ($_POST && !$error) { if (strlen($_GET["name"])) { - $dropped = query_redirect("DROP TRIGGER " . idf_escape($_GET["name"]), $SELF . "table=" . urlencode($_GET["trigger"]), lang('Trigger has been dropped.'), $_POST["drop"], !$_POST["dropped"]); + $dropped = query_redirect("DROP TRIGGER " . idf_escape($_GET["name"]), ME . "table=" . urlencode($_GET["trigger"]), lang('Trigger has been dropped.'), $_POST["drop"], !$_POST["dropped"]); } if (!$_POST["drop"]) { if (in_array($_POST["Timing"], $trigger_time) && in_array($_POST["Event"], $trigger_event)) { - query_redirect("CREATE TRIGGER " . idf_escape($_POST["Trigger"]) . " $_POST[Timing] $_POST[Event] ON " . idf_escape($_GET["trigger"]) . " FOR EACH ROW\n$_POST[Statement]", $SELF . "table=" . urlencode($_GET["trigger"]), (strlen($_GET["name"]) ? lang('Trigger has been altered.') : lang('Trigger has been created.'))); + query_redirect("CREATE TRIGGER " . idf_escape($_POST["Trigger"]) . " $_POST[Timing] $_POST[Event] ON " . idf_escape($_GET["trigger"]) . " FOR EACH ROW\n$_POST[Statement]", ME . "table=" . urlencode($_GET["trigger"]), (strlen($_GET["name"]) ? lang('Trigger has been altered.') : lang('Trigger has been created.'))); } } } diff --git a/adminer/user.inc.php b/adminer/user.inc.php index 7984344f..ff09ca1f 100644 --- a/adminer/user.inc.php +++ b/adminer/user.inc.php @@ -63,7 +63,7 @@ if ($_POST && !$error) { $new_user = $dbh->quote($_POST["user"]) . "@" . $dbh->quote($_POST["host"]); // if $_GET["host"] is not set then $new_user is always different $pass = $dbh->quote($_POST["pass"]); if ($_POST["drop"]) { - query_redirect("DROP USER $old_user", $SELF . "privileges=", lang('User has been dropped.')); + query_redirect("DROP USER $old_user", ME . "privileges=", lang('User has been dropped.')); } else { if ($old_user == $new_user) { queries("SET PASSWORD FOR $new_user = " . ($_POST["hashed"] ? $pass : "PASSWORD($pass)")); @@ -106,7 +106,7 @@ if ($_POST && !$error) { } } } - query_redirect(queries(), $SELF . "privileges=", (isset($_GET["host"]) ? lang('User has been altered.') : lang('User has been created.')), !$error, false, $error); + query_redirect(queries(), ME . "privileges=", (isset($_GET["host"]) ? lang('User has been altered.') : lang('User has been created.')), !$error, false, $error); if ($old_user != $new_user) { // delete new user in case of an error $dbh->query("DROP USER $new_user"); diff --git a/adminer/view.inc.php b/adminer/view.inc.php index 3db85e18..42161020 100644 --- a/adminer/view.inc.php +++ b/adminer/view.inc.php @@ -2,9 +2,9 @@ $dropped = false; if ($_POST && !$error) { if (strlen($_GET["view"])) { - $dropped = query_redirect("DROP VIEW " . idf_escape($_GET["view"]), substr($SELF, 0, -1), lang('View has been dropped.'), false, !$_POST["dropped"]); + $dropped = query_redirect("DROP VIEW " . idf_escape($_GET["view"]), substr(ME, 0, -1), lang('View has been dropped.'), false, !$_POST["dropped"]); } - query_redirect("CREATE VIEW " . idf_escape($_POST["name"]) . " AS\n$_POST[select]", $SELF . "table=" . urlencode($_POST["name"]), (strlen($_GET["view"]) ? lang('View has been altered.') : lang('View has been created.'))); + query_redirect("CREATE VIEW " . idf_escape($_POST["name"]) . " AS\n$_POST[select]", ME . "table=" . urlencode($_POST["name"]), (strlen($_GET["view"]) ? lang('View has been altered.') : lang('View has been created.'))); } page_header((strlen($_GET["view"]) ? lang('Alter view') : lang('Create view')), $error, array("table" => $_GET["view"]), $_GET["view"]); diff --git a/changes.txt b/changes.txt index a77d993e..650a54a9 100644 --- a/changes.txt +++ b/changes.txt @@ -12,6 +12,7 @@ Link e-mails in select Show type in field name title (thanks to Jakub Sochor) Preselect now() for timestamp columns (thanks to paranoiq) Clear history (thanks to paranoiq) +Prefill insert by foreign key searches Remove Delete button from Edit page - use mass operation for it Faster multiple update, clone and delete Faster table list in navigation diff --git a/editor/include/adminer.inc.php b/editor/include/adminer.inc.php index 6b3454c5..9d6fa753 100644 --- a/editor/include/adminer.inc.php +++ b/editor/include/adminer.inc.php @@ -285,7 +285,7 @@ ORDER BY ORDINAL_POSITION"); //! requires MySQL 5 } function editFunctions($field) { - return array(""); + return array($field["null"] || $field["auto_increment"] ? "" : "*"); } function editInput($table, $field, $attrs, $value) { @@ -296,11 +296,8 @@ ORDER BY ORDINAL_POSITION"); //! requires MySQL 5 $id = idf_escape($foreign_key["target"][0]); $name = $this->rowDescription($foreign_key["table"]); if (strlen($name) && $dbh->result($dbh->query("SELECT COUNT(*) FROM " . idf_escape($foreign_key["table"]))) <= 1000) { // optionlist with more than 1000 options would be too big - $return = array(); + $return = array("" => ""); $result = $dbh->query("SELECT $id, $name FROM " . idf_escape($foreign_key["table"]) . " ORDER BY 2"); - if ($field["null"] || !$result->num_rows) { // empty