118 lines
3.3 KiB
PHP
118 lines
3.3 KiB
PHP
<?php
|
|
$TABLE = $_GET["edit"];
|
|
$fields = fields($TABLE);
|
|
$where = (isset($_GET["select"]) ? ($_POST["check"] && count($_POST["check"]) == 1 ? where_check($_POST["check"][0], $fields) : "") : where($_GET, $fields));
|
|
$update = (isset($_GET["select"]) ? $_POST["edit"] : $where);
|
|
foreach ($fields as $name => $field) {
|
|
if (!isset($field["privileges"][$update ? "update" : "insert"]) || $adminer->fieldName($field) == "" || $field["generated"]) {
|
|
unset($fields[$name]);
|
|
}
|
|
}
|
|
|
|
if ($_POST && !$error && !isset($_GET["select"])) {
|
|
$location = $_POST["referer"];
|
|
if (isset($_POST["insert"]) && $_POST["insert"]) { // continue edit or insert
|
|
$location = ($update ? null : $_SERVER["REQUEST_URI"]);
|
|
} elseif (!preg_match('~^.+&select=.+$~', $location)) {
|
|
$location = ME . "select=" . urlencode($TABLE);
|
|
}
|
|
|
|
$indexes = indexes($TABLE);
|
|
$unique_array = unique_array((isset($_GET["where"]) ? $_GET["where"] : []), $indexes);
|
|
$query_where = "\nWHERE $where";
|
|
|
|
if (isset($_POST["delete"])) {
|
|
queries_redirect(
|
|
$location,
|
|
lang('Item has been deleted.'),
|
|
$driver->delete($TABLE, $query_where, !$unique_array)
|
|
);
|
|
|
|
} else {
|
|
$set = array();
|
|
foreach ($fields as $name => $field) {
|
|
$val = process_input($field);
|
|
if ($val !== false && $val !== null) {
|
|
$set[idf_escape($name)] = $val;
|
|
}
|
|
}
|
|
|
|
if ($update) {
|
|
if (!$set) {
|
|
redirect($location);
|
|
}
|
|
queries_redirect(
|
|
$location,
|
|
lang('Item has been updated.'),
|
|
$driver->update($TABLE, $set, $query_where, !$unique_array)
|
|
);
|
|
if (is_ajax()) {
|
|
page_headers();
|
|
page_messages($error);
|
|
exit;
|
|
}
|
|
} else {
|
|
$result = $driver->insert($TABLE, $set);
|
|
$last_id = ($result ? last_id() : 0);
|
|
queries_redirect($location, lang('Item%s has been inserted.', ($last_id ? " $last_id" : "")), $result); //! link
|
|
}
|
|
}
|
|
}
|
|
|
|
$row = null;
|
|
if (isset($_POST["save"]) &&$_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 (isset($_POST["clone"]) && $_POST["clone"] && isset($field["auto_increment"]) && $field["auto_increment"]) {
|
|
$as = "''";
|
|
}
|
|
if ($jush == "sql" && preg_match("~enum|set~", $field["type"])) {
|
|
$as = "1*" . idf_escape($name);
|
|
}
|
|
$select[] = ($as ? "$as AS " : "") . idf_escape($name);
|
|
}
|
|
}
|
|
$row = array();
|
|
if (!support("table")) {
|
|
$select = array("*");
|
|
}
|
|
if ($select) {
|
|
$result = $driver->select($TABLE, $select, array($where), $select, array(), (isset($_GET["select"]) ? 2 : 1));
|
|
if (!$result) {
|
|
$error = error();
|
|
} else {
|
|
$row = $result->fetch_assoc();
|
|
if (!$row) { // MySQLi returns null
|
|
$row = false;
|
|
}
|
|
}
|
|
if (isset($_GET["select"]) && (!$row || $result->fetch_assoc())) { // $result->num_rows != 1 isn't available in all drivers
|
|
$row = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!support("table") && !$fields) {
|
|
if (!$where) { // insert
|
|
$result = $driver->select($TABLE, array("*"), $where, array("*"));
|
|
$row = ($result ? $result->fetch_assoc() : false);
|
|
if (!$row) {
|
|
$row = array($driver->primary => "");
|
|
}
|
|
}
|
|
if ($row) {
|
|
foreach ($row as $key => $val) {
|
|
if (!$where) {
|
|
$row[$key] = null;
|
|
}
|
|
$fields[$key] = array("field" => $key, "null" => ($key != $driver->primary), "auto_increment" => ($key == $driver->primary));
|
|
}
|
|
}
|
|
}
|
|
|
|
edit_form($TABLE, $fields, $row, $update);
|