"PRIMARY", "columns" => array($oid)); } parse_str($_COOKIE["adminer_import"], $adminer_import); $rights = array(); // privilege => 0 $columns = array(); // selectable columns $text_length = null; foreach ($fields as $key => $field) { $name = $adminer->fieldName($field); if (isset($field["privileges"]["select"]) && $name != "") { $columns[$key] = html_entity_decode(strip_tags($name), ENT_QUOTES); if (is_shortable($field)) { $text_length = $adminer->selectLengthProcess(); } } $rights += $field["privileges"]; } list($select, $group) = $adminer->selectColumnsProcess($columns, $indexes); $is_group = count($group) < count($select); $where = $adminer->selectSearchProcess($fields, $indexes); $order = $adminer->selectOrderProcess($fields, $indexes); $limit = $adminer->selectLimitProcess(); $from = ($select ? implode(", ", $select) : "*" . ($oid ? ", $oid" : "")) . convert_fields($columns, $fields, $select) . "\nFROM " . table($TABLE); $group_by = ($group && $is_group ? "\nGROUP BY " . implode(", ", $group) : "") . ($order ? "\nORDER BY " . implode(", ", $order) : ""); if ($_GET["val"] && is_ajax()) { header("Content-Type: text/plain; charset=utf-8"); foreach ($_GET["val"] as $unique_idf => $row) { $as = convert_field($fields[key($row)]); $select = array($as ? $as : idf_escape(key($row))); $where[] = where_check($unique_idf, $fields); $return = $driver->select($TABLE, $select, $where, $select); if ($return) { echo reset($return->fetch_row()); } } exit; } if ($_POST && !$error) { $where_check = $where; if (!$_POST["all"] && is_array($_POST["check"])) { $where_check[] = "((" . implode(") OR (", array_map('where_check', $_POST["check"])) . "))"; } $where_check = ($where_check ? "\nWHERE " . implode(" AND ", $where_check) : ""); $primary = $unselected = null; foreach ($indexes as $index) { if ($index["type"] == "PRIMARY") { $primary = array_flip($index["columns"]); $unselected = ($select ? $primary : array()); break; } } foreach ((array) $unselected as $key => $val) { if (in_array(idf_escape($key), $select)) { unset($unselected[$key]); } } if ($_POST["export"]) { cookie("adminer_import", "output=" . urlencode($_POST["output"]) . "&format=" . urlencode($_POST["format"])); dump_headers($TABLE); $adminer->dumpTable($TABLE, ""); if (!is_array($_POST["check"]) || $unselected === array()) { $query = "SELECT $from$where_check$group_by"; } else { $union = array(); foreach ($_POST["check"] as $val) { // where is not unique so OR can't be used $union[] = "(SELECT" . limit($from, "\nWHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($val, $fields) . $group_by, 1) . ")"; } $query = implode(" UNION ALL ", $union); } $adminer->dumpData($TABLE, "table", $query); exit; } if (!$adminer->selectEmailProcess($where, $foreign_keys)) { if ($_POST["save"] || $_POST["delete"]) { // edit $result = true; $affected = 0; $set = array(); if (!$_POST["delete"]) { foreach ($columns as $name => $val) { //! should check also for edit or insert privileges $val = process_input($fields[$name]); if ($val !== null && ($_POST["clone"] || $val !== false)) { $set[idf_escape($name)] = ($val !== false ? $val : idf_escape($name)); } } } if ($_POST["delete"] || $set) { if ($_POST["clone"]) { $query = "INTO " . table($TABLE) . " (" . implode(", ", array_keys($set)) . ")\nSELECT " . implode(", ", $set) . "\nFROM " . table($TABLE); } if ($_POST["all"] || ($unselected === array() && is_array($_POST["check"])) || $is_group) { $result = ($_POST["delete"] ? $driver->delete($TABLE, $where_check) : ($_POST["clone"] ? queries("INSERT $query$where_check") : $driver->update($TABLE, $set, $where_check) ) ); $affected = $connection->affected_rows; } else { foreach ((array) $_POST["check"] as $val) { // where is not unique so OR can't be used $where2 = "\nWHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($val, $fields); $result = ($_POST["delete"] ? $driver->delete($TABLE, $where2, 1) : ($_POST["clone"] ? queries("INSERT" . limit1($query, $where2)) : $driver->update($TABLE, $set, $where2) ) ); if (!$result) { break; } $affected += $connection->affected_rows; } } } $message = lang('%d item(s) have been affected.', $affected); if ($_POST["clone"] && $result && $affected == 1) { $last_id = last_id(); if ($last_id) { $message = lang('Item%s has been inserted.', " $last_id"); } } queries_redirect(remove_from_uri($_POST["all"] && $_POST["delete"] ? "page" : ""), $message, $result); if (!$_POST["delete"]) { edit_form($TABLE, $fields, (array) $_POST["fields"], !$_POST["clone"]); page_footer(); exit; } } elseif (!$_POST["import"]) { // modify if (!$_POST["val"]) { $error = lang('Ctrl+click on a value to modify it.'); } else { $result = true; $affected = 0; foreach ($_POST["val"] as $unique_idf => $row) { $set = array(); foreach ($row as $key => $val) { $key = bracket_escape($key, 1); // 1 - back $set[idf_escape($key)] = (preg_match('~char|text~', $fields[$key]["type"]) || $val != "" ? $adminer->processInput($fields[$key], $val) : "NULL"); } $result = $driver->update( $TABLE, $set, " WHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($unique_idf, $fields), !($is_group || $unselected === array()), " " ); if (!$result) { break; } $affected += $connection->affected_rows; } queries_redirect(remove_from_uri(), lang('%d item(s) have been affected.', $affected), $result); } } elseif (!is_string($file = get_file("csv_file", true))) { $error = upload_error($file); } elseif (!preg_match('~~u', $file)) { $error = lang('File must be in UTF-8 encoding.'); } else { cookie("adminer_import", "output=" . urlencode($adminer_import["output"]) . "&format=" . urlencode($_POST["separator"])); $result = true; $cols = array_keys($fields); preg_match_all('~(?>"[^"]*"|[^"\\r\\n]+)+~', $file, $matches); $affected = count($matches[0]); $driver->begin(); $separator = ($_POST["separator"] == "csv" ? "," : ($_POST["separator"] == "tsv" ? "\t" : ";")); $rows = array(); foreach ($matches[0] as $key => $val) { preg_match_all("~((?>\"[^\"]*\")+|[^$separator]*)$separator~", $val . $separator, $matches2); if (!$key && !array_diff($matches2[1], $cols)) { //! doesn't work with column names containing ",\n // first row corresponds to column names - use it for table structure $cols = $matches2[1]; $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)))); } $rows[] = $set; } } $result = (!$rows || $driver->insertUpdate($TABLE, $rows, $primary)); if ($result) { $driver->commit(); } queries_redirect(remove_from_uri("page"), lang('%d row(s) have been imported.', $affected), $result); $driver->rollback(); // after queries_redirect() to not overwrite error } } } $table_name = $adminer->tableName($table_status); if (is_ajax()) { page_headers(); ob_start(); } else { page_header(lang('Select') . ": $table_name", $error); } $set = null; if (isset($rights["insert"]) || !support("table")) { $set = ""; foreach ((array) $_GET["where"] as $val) { if (count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "=" || (!$val["op"] && !preg_match('~[_%]~', $val["val"])) // LIKE in Editor )) { $set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]); } } } $adminer->selectLinks($table_status, $set); if (!$columns && support("table")) { echo "
" . lang('Unable to select the table') . ($fields ? "." : ": " . error()) . "\n"; } else { echo "
\n"; $page = $_GET["page"]; if ($page == "last") { $found_rows = $connection->result(count_rows($TABLE, $where, $is_group, $group)); $page = floor(max(0, $found_rows - 1) / $limit); } $select2 = $select; if (!$select2) { $select2[] = "*"; if ($oid) { $select2[] = $oid; } } $convert_fields = convert_fields($columns, $fields, $select); if ($convert_fields) { $select2[] = substr($convert_fields, 2); } $result = $driver->select($TABLE, $select2, $where, $group, $order, $limit, $page, true); if (!$result) { echo "" . error() . "\n"; } else { if ($jush == "mssql" && $page) { $result->seek($limit * $page); } $email_fields = array(); echo "
\n"; } } if (is_ajax()) { ob_end_clean(); exit; }