':1', ']' => ':2');
return strtr($idf, ($back ? array_flip($trans) : $trans));
}
function optionlist($options, $selected = array(), $not_vals = false) {
$return = "";
foreach ($options as $key => $val) {
$checked = in_array(($not_vals ? $val : $key), (array) $selected);
$return .= '';
}
return $return;
}
function fields($table) {
$return = array();
$result = mysql_query("SHOW COLUMNS FROM " . idf_escape($table));
while ($row = mysql_fetch_assoc($result)) {
preg_match('~^(.*?)(?:\\((.+)\\))?$~', $row["Type"], $match);
$return[$row["Field"]] = array(
"type" => $match[1],
"length" => $match[2],
"default" => $row["Default"],
"null" => ($row["Null"] != "NO"),
);
}
mysql_free_result($result);
return $return;
}
function indexes($table) {
$return = array();
$result = mysql_query("SHOW INDEX FROM " . idf_escape($table));
while ($row = mysql_fetch_assoc($result)) {
$type = ($row["Key_name"] == "PRIMARY" ? "PRIMARY" : ($row["Index_type"] == "FULLTEXT" ? "FULLTEXT" : ($row["Non_unique"] ? "INDEX" : "UNIQUE")));
$return[$type][$row["Key_name"]][$row["Seq_in_index"]] = $row["Column_name"];
}
mysql_free_result($result);
return $return;
}
function foreign_keys($table) {
static $pattern = '~`((?:[^`]*|``)+)`~';
$return = array();
$create_table = mysql_result(mysql_query("SHOW CREATE TABLE " . idf_escape($table)), 0, 1);
preg_match_all('~FOREIGN KEY \\((.*)\\) REFERENCES (.*) \\((.*)\\)~', $create_table, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
preg_match_all($pattern, $match[1], $source);
preg_match_all($pattern, $match[3], $target);
foreach ($source[1] as $val) {
$return[idf_unescape($val)][] = array(idf_unescape(substr($match[2], 1, -1)), array_map('idf_unescape', $source[1]), array_map('idf_unescape', $target[1]));
}
}
return $return;
}
function unique_idf($row, $indexes) {
foreach ($indexes as $type => $index) {
if ($type == "PRIMARY" || $type == "UNIQUE") {
foreach ($index as $columns) {
$return = array();
foreach ($columns as $key) {
if (!isset($row[$key])) {
continue 2;
}
$return[] = urlencode("where[$key]") . "=" . urlencode($row[$key]);
}
return $return;
}
}
}
$return = array();
foreach ($row as $key => $val) {
$return[] = (isset($val) ? urlencode("where[$key]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));
}
return $return;
}
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
if (isset($_POST["server"])) {
$_SESSION["username"] = $_POST["username"];
$_SESSION["password"] = $_POST["password"];
header("Location: " . ($_GET["server"] == $_POST["server"] ? $_SERVER["REQUEST_URI"] : preg_replace('~^[^?]*/([^?]*).*~', '\\1' . (strlen($_POST["server"]) ? '?server=' . urlencode($_POST["server"]) : ''), $_SERVER["REQUEST_URI"])));
exit;
}
?>
" . lang('SQL command') . "\n";
if ($_SESSION["message"]) {
echo "
$_SESSION[message]
\n";
$_SESSION["message"] = "";
}
if ($_POST) {
$result = mysql_query($_POST["query"]);
if (!$result) {
echo "
" . lang('Error in query') . ": " . mysql_error() . "
\n";
} elseif (mysql_num_rows($result)) {
while ($row = mysql_fetch_assoc($result)) {
//! select
}
mysql_free_result($result);
} else {
mysql_free_result($result);
$_SESSION["message"] = sprintf(lang('Query executed OK, %d row(s) affected.'), mysql_affected_rows());
header("Location: " . $SELF . "sql=");
exit;
}
}
?>
" . lang('Table') . ": " . htmlspecialchars($_GET["table"]) . "\n";
$result = mysql_query("SHOW FULL COLUMNS FROM " . idf_escape($_GET["table"]));
echo "
\n";
while ($row = mysql_fetch_assoc($result)) {
echo "| " . htmlspecialchars($row["Field"]) . " | $row[Type]" . ($row["Null"] == "NO" ? " NOT NULL" : "") . " |
\n";
}
echo "
\n";
mysql_free_result($result);
$indexes = indexes($_GET["table"]);
if ($indexes) {
echo "
" . lang('Indexes') . "
\n";
echo "
\n";
foreach ($indexes as $type => $index) {
foreach ($index as $columns) {
sort($columns);
echo "| $type | " . implode(", ", $columns) . " |
\n";
}
}
echo "
\n";
}
} elseif (isset($_GET["select"])) {
ob_end_flush();
echo "
" . lang('Select') . ": " . htmlspecialchars($_GET["select"]) . "
\n";
if ($_SESSION["message"]) {
echo "
$_SESSION[message]
\n";
$_SESSION["message"] = "";
}
echo "
" . lang('New item') . "
\n";
$limit = 30;
echo "
\n";
$result = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM " . idf_escape($_GET["select"]) . ($where ? " WHERE " . implode(" AND ", $where) : "") . " LIMIT $limit OFFSET " . ($limit * $_GET["page"]));
$found_rows = mysql_result(mysql_query(" SELECT FOUND_ROWS()"), 0);
if (!mysql_num_rows($result)) {
echo "
" . lang('No rows.') . "
\n";
} else {
$indexes = indexes($_GET["select"]);
$foreign_keys = foreign_keys($_GET["select"]);
echo "
\n";
$first = true;
while ($row = mysql_fetch_assoc($result)) {
if ($first) {
echo "| " . implode(" | ", array_map('htmlspecialchars', array_keys($row))) . " | " . lang('Action') . " |
\n";
$first = false;
}
echo "";
foreach ($row as $key => $val) {
if (!isset($val)) {
$val = "NULL";
} else {
$val = htmlspecialchars($val);
if (count($foreign_keys[$key]) == 1) {
$foreign_key = $foreign_keys[$key][0];
$val = '">' . "$val";
foreach ($foreign_key[1] as $i => $source) {
$val = "&where[$i][col]=" . urlencode($foreign_key[2][$i]) . "&where[$i][op]=%3D&where[$i][val]=" . urlencode($row[$source]) . $val;
}
$val = '$val";
}
echo "| edit | "; //! links to referencing tables
echo "
\n";
}
echo "
\n";
if ($found_rows > $limit) {
echo "
" . lang('Page') . ":\n";
for ($i=0; $i < $found_rows / $limit; $i++) {
echo ($i == $_GET["page"] ? $i + 1 : "" . ($i + 1) . "") . "\n";
}
echo "
\n";
}
}
mysql_free_result($result);
} elseif (isset($_GET["edit"])) {
echo "
" . lang('Edit') . ": " . htmlspecialchars($_GET["edit"]) . "
\n";
$where = array();
if (is_array($_GET["where"])) {
foreach ($_GET["where"] as $key => $val) {
$where[] = idf_escape($key) . " = BINARY '" . mysql_real_escape_string($val) . "'";
}
}
if (is_array($_GET["null"])) {
foreach ($_GET["null"] as $key) {
$where[] = idf_escape($key) . " IS NULL";
}
}
$fields = fields($_GET["edit"]);
if ($_POST) {
if (isset($_POST["delete"])) {
$query = "DELETE FROM " . idf_escape($_GET["edit"]) . " WHERE " . implode(" AND ", $where) . " LIMIT 1";
$message = lang('Item has been deleted.');
} else {
$set = array();
foreach ($fields as $key => $field) {
if (preg_match('~char|text|set~', $field["type"]) ? $_POST["null"][$key] : !strlen($_POST["fields"][$key])) {
$value = "NULL";
} elseif ($field["type"] == "enum") {
$value = intval($_POST["fields"][$key]);
} elseif ($field["type"] == "set") {
$value = array_sum((array) $_POST["fields"][$key]);
} else {
$value = "'" . mysql_real_escape_string($_POST["fields"][$key]) . "'";
}
$set[] = idf_escape(bracket_escape($key, "back")) . " = $value";
}
if ($where) {
$query = "UPDATE " . idf_escape($_GET["edit"]) . " SET " . implode(", ", $set) . " WHERE " . implode(" AND ", $where) . " LIMIT 1";
$message = lang('Item has been updated.');
} else {
$query = "INSERT INTO " . idf_escape($_GET["edit"]) . " SET " . implode(", ", $set);
$message = lang('Item has been inserted.');
}
}
if (mysql_query($query)) {
$_SESSION["message"] = $message;
header("Location: " . $SELF . "select=" . urlencode($_GET["edit"]));
exit;
} else {
echo "
" . lang('Error during saving') . ": " . htmlspecialchars(mysql_error()) . "
\n";
}
}
if ($_POST) {
$data = $_POST["fields"];
} elseif ($where) {
$select = array("*");
foreach ($fields as $name => $field) {
if ($field["type"] == "enum" || $field["type"] == "set") {
$select[] = "1*" . idf_escape($name) . " AS " . idf_escape($name);
}
}
$data = mysql_fetch_assoc(mysql_query("SELECT " . implode(", ", $select) . " FROM " . idf_escape($_GET["edit"]) . " WHERE " . implode(" AND ", $where) . " LIMIT 1"));
} else {
$data = array();
}
?>