$field) { if (strlen($field["field"]) && isset($types[$field["type"]])) { $fields[] = (!strlen($_GET["create"]) ? "" : (strlen($field["orig"]) ? "CHANGE " . idf_escape($field["orig"]) . " " : "ADD ")) . idf_escape($field["field"]) . process_type($field) . ($field["null"] ? " NULL" : " NOT NULL") // NULL for timestamp . (strlen($_GET["create"]) && strlen($field["orig"]) && isset($orig_fields[$field["orig"]]["default"]) && $field["type"] != "timestamp" ? " DEFAULT '" . $mysql->escape_string($orig_fields[$field["orig"]]["default"]) . "'" : "") //! timestamp . ($key == $_POST["auto_increment_col"] ? " AUTO_INCREMENT$auto_increment_index" : "") . " COMMENT '" . $mysql->escape_string($field["comment"]) . "'" . (strlen($_GET["create"]) ? " $after" : "") ; $after = "AFTER " . idf_escape($field["field"]); } elseif (strlen($field["orig"])) { $fields[] = "DROP " . idf_escape($field["orig"]); } } $status = ($_POST["Engine"] ? " ENGINE='" . $mysql->escape_string($_POST["Engine"]) . "'" : "") . ($_POST["Collation"] ? " COLLATE '" . $mysql->escape_string($_POST["Collation"]) . "'" : "") . (strlen($_POST["Auto_increment"]) ? " AUTO_INCREMENT=" . intval($_POST["Auto_increment"]) : "") . " COMMENT='" . $mysql->escape_string($_POST["Comment"]) . "'" ; if (in_array($_POST["partition_by"], $partition_by)) { $partitions = array(); if ($_POST["partition_by"] == 'RANGE' || $_POST["partition_by"] == 'LIST') { foreach (array_filter($_POST["partition_names"]) as $key => $val) { $value = $_POST["partition_values"][$key]; $partitions[] = "PARTITION $val VALUES " . ($_POST["partition_by"] == 'RANGE' ? "LESS THAN" : "IN") . (strlen($value) ? " ($value)" : " MAXVALUE"); //! SQL injection } } $status .= " PARTITION BY $_POST[partition_by]($_POST[partition])" . ($partitions ? " (" . implode(", ", $partitions) . ")" : ($_POST["partitions"] ? " PARTITIONS " . intval($_POST["partitions"]) : "")); } elseif ($mysql->server_info >= 5.1 && strlen($_GET["create"])) { $status .= " REMOVE PARTITIONING"; } $location = $SELF . "table=" . urlencode($_POST["name"]); if (strlen($_GET["create"])) { query_redirect("ALTER TABLE " . idf_escape($_GET["create"]) . " " . implode(", ", $fields) . ", RENAME TO " . idf_escape($_POST["name"]) . ", $status", $location, lang('Table has been altered.')); } else { query_redirect("CREATE TABLE " . idf_escape($_POST["name"]) . " (" . implode(", ", $fields) . ")$status", $location, lang('Table has been created.')); } } } page_header((strlen($_GET["create"]) ? lang('Alter table') : lang('Create table')), $error, array("table" => $_GET["create"]), $_GET["create"]); $engines = array(); $result = $mysql->query("SHOW ENGINES"); while ($row = $result->fetch_assoc()) { if ($row["Support"] == "YES" || $row["Support"] == "DEFAULT") { $engines[] = $row["Engine"]; } } $result->free(); if ($_POST) { $row = $_POST; if ($row["auto_increment_col"]) { $row["fields"][$row["auto_increment_col"]]["auto_increment"] = true; } process_fields($row["fields"]); } elseif (strlen($_GET["create"])) { $row = table_status($_GET["create"]); table_comment($row); $row["name"] = $_GET["create"]; $row["fields"] = array_values($orig_fields); if ($mysql->server_info >= 5.1) { $from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = '" . $mysql->escape_string($_GET["db"]) . "' AND TABLE_NAME = '" . $mysql->escape_string($_GET["create"]) . "'"; $result = $mysql->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1"); list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row(); $result->free(); $row["partition_names"] = array(); $row["partition_values"] = array(); $result = $mysql->query("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION"); while ($row1 = $result->fetch_assoc()) { $row["partition_names"][] = $row1["PARTITION_NAME"]; $row["partition_values"][] = $row1["PARTITION_DESCRIPTION"]; } $row["partition_names"][] = ""; $row["partition_values"][] = ""; $result->free(); } } else { $row = array("fields" => array(array("field" => "")), "partition_names" => array()); } $collations = collations(); $suhosin = floor(extension_loaded("suhosin") ? (min(ini_get("suhosin.request.max_vars"), ini_get("suhosin.post.max_vars")) - 13) / 8 : 0); if ($suhosin && count($row["fields"]) > $suhosin) { echo "

" . htmlspecialchars(lang('Maximum number of allowed fields exceeded. Please increase %s and %s.', 'suhosin.post.max_vars', 'suhosin.request.max_vars')) . "

\n"; } ?>

: " />

: " /> : " maxlength="60" />

/>

server_info >= 5.1) { $partition_table = ereg('RANGE|LIST', $row["partition_by"]); ?>

(" />) : " />

> $val) { echo '\n"; } ?>