/local/adminer/lib/adminer.php
PHP | 2283 lines | 2035 code | 73 blank | 175 comment | 205 complexity | b5b333ce52464e21e3b692f007c23d6a MD5 | raw file
Possible License(s): Apache-2.0, GPL-3.0, BSD-3-Clause, LGPL-2.1, AGPL-3.0, MPL-2.0-no-copyleft-exception, LGPL-3.0
Large files files are truncated, but you can click here to view the full file
- <?php
- /** Adminer - Compact database management
- * @link http://www.adminer.org/
- * @author Jakub Vrana, http://www.vrana.cz/
- * @copyright 2007 Jakub Vrana
- * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
- * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
- * @version 3.4.0-dev
- */error_reporting(6135);$hc=!ereg('^(unsafe_raw)?$',ini_get("filter.default"));if($hc||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$W){$Zf=filter_input_array(constant("INPUT$W"),FILTER_UNSAFE_RAW);if($Zf)$$W=$Zf;}}if(isset($_GET["file"])){header("Expires: ".gmdate("D, d M Y H:i:s",time()+365*24*60*60)." GMT");if($_GET["file"]=="favicon.ico"){header("Content-Type: image/x-icon");echo
- base64_decode("AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAA/wBhTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERAAAAAAETMzEQAAAAATERExAAAAABMRETEAAAAAExERMQAAAAATERExAAAAABMRETEAAAAAEzMzMREREQATERExEhEhABEzMxEhEREAAREREhERIRAAAAARIRESEAAAAAESEiEQAAAAABEREQAAAAAAAAAAD//9UAwP/VAIB/AACAf/AAgH+kAIB/gACAfwAAgH8AAIABAACAAf8AgAH/AMAA/wD+AP8A/wAIAf+B1QD//9UA");}elseif($_GET["file"]=="default.css"){header("Content-Type: text/css; charset=utf-8");echo'body{color:#000;background:#fff;font:90%/1.25 Verdana,Arial,Helvetica,sans-serif;margin:0;}a{color:blue;}a:visited{color:navy;}a:hover{color:red;}a.text{text-decoration:none;}h1{font-size:150%;margin:0;padding:.8em 1em;border-bottom:1px solid #999;font-weight:normal;color:#777;background:#eee;}h2{font-size:150%;margin:0 0 20px -18px;padding:.8em 1em;border-bottom:1px solid #000;color:#000;font-weight:normal;background:#ddf;}h3{font-weight:normal;font-size:130%;margin:1em 0 0;}form{margin:0;}table{margin:1em 20px 0 0;border:0;border-top:1px solid #999;border-left:1px solid #999;font-size:90%;}td,th{border:0;border-right:1px solid #999;border-bottom:1px solid #999;padding:.2em .3em;}th{background:#eee;text-align:left;}thead th{text-align:center;}thead td,thead th{background:#ddf;}fieldset{display:inline;vertical-align:top;padding:.5em .8em;margin:.8em .5em 0 0;border:1px solid #999;}p{margin:.8em 20px 0 0;}img{vertical-align:middle;border:0;}td img{max-width:200px;max-height:200px;}code{background:#eee;}tbody tr:hover td,tbody tr:hover th{background:#eee;}pre{margin:1em 0 0;}input[type=image]{vertical-align:middle;}.version{color:#777;font-size:67%;}.js .hidden,.nojs .jsonly{display:none;}.nowrap td,.nowrap th,td.nowrap{white-space:pre;}.wrap td{white-space:normal;}.error{color:red;background:#fee;}.error b{background:#fff;font-weight:normal;}.message{color:green;background:#efe;}.error,.message{padding:.5em .8em;margin:1em 20px 0 0;}.char{color:#007F00;}.date{color:#7F007F;}.enum{color:#007F7F;}.binary{color:red;}.odd td{background:#F5F5F5;}.js .checked td,.js .checked th{background:#ddf;}.time{color:silver;font-size:70%;}.function{text-align:right;}.number{text-align:right;}.datetime{text-align:right;}.type{width:15ex;width:auto\\9;}.options select{width:20ex;width:auto\\9;}.active{font-weight:bold;}.sqlarea{width:98%;}#menu{position:absolute;margin:10px 0 0;padding:0 0 30px 0;top:2em;left:0;width:19em;overflow:auto;overflow-y:hidden;white-space:nowrap;}#menu p{padding:.8em 1em;margin:0;border-bottom:1px solid #ccc;}#content{margin:2em 0 0 21em;padding:10px 20px 20px 0;}#lang{position:absolute;top:0;left:0;line-height:1.8em;padding:.3em 1em;}#breadcrumb{white-space:nowrap;position:absolute;top:0;left:21em;background:#eee;height:2em;line-height:1.8em;padding:0 1em;margin:0 0 0 -18px;}#h1{color:#777;text-decoration:none;font-style:italic;}#version{font-size:67%;color:red;}#schema{margin-left:60px;position:relative;-moz-user-select:none;-webkit-user-select:none;}#schema .table{border:1px solid silver;padding:0 2px;cursor:move;position:absolute;}#schema .references{position:absolute;}.rtl h2{margin:0 -18px 20px 0;}.rtl p,.rtl table,.rtl .error,.rtl .message{margin:1em 0 0 20px;}.rtl #content{margin:2em 21em 0 0;padding:10px 0 20px 20px;}.rtl #breadcrumb{left:auto;right:21em;margin:0 -18px 0 0;}.rtl #lang,.rtl #menu{left:auto;right:0;}.CodeMirror{border:1px inset #777;}.CodeMirror .error{background:#fee;}@media print{#lang,#menu{display:none;}#content{margin-left:1em;}#breadcrumb{left:1em;}.nowrap td,.nowrap th,td.nowrap{white-space:normal;}}';}elseif($_GET["file"]=="functions.js"){header("Content-Type: text/javascript; charset=utf-8");?>
- /** Toggle visibility
- * @param string
- * @return boolean
- */
- function toggle(id) {
- var el = document.getElementById(id);
- el.className = (el.className == 'hidden' ? '' : 'hidden');
- return true;
- }
- /** Set permanent cookie
- * @param string
- * @param number
- * @param string optional
- */
- function cookie(assign, days) {
- var date = new Date();
- date.setDate(date.getDate() + days);
- document.cookie = assign + '; expires=' + date;
- }
- /** Verify current Adminer version
- */
- function verifyVersion() {
- cookie('adminer_version=0', 1);
- var script = document.createElement('script');
- script.src = location.protocol + '//www.adminer.org/version.php';
- document.body.appendChild(script);
- }
- /** Get value of select
- * @param HTMLSelectElement
- * @return string
- */
- function selectValue(select) {
- var selected = select.options[select.selectedIndex];
- return ((selected.attributes.value || {}).specified ? selected.value : selected.text);
- }
- /** Set checked class
- * @param HTMLInputElement
- */
- function trCheck(el) {
- var tr = el.parentNode.parentNode;
- tr.className = tr.className.replace(/(^|\s)checked(\s|$)/, '$2') + (el.checked ? ' checked' : '');
- }
- /** Check all elements matching given name
- * @param HTMLInputElement
- * @param RegExp
- */
- function formCheck(el, name) {
- var elems = el.form.elements;
- for (var i=0; i < elems.length; i++) {
- if (name.test(elems[i].name)) {
- elems[i].checked = el.checked;
- trCheck(elems[i]);
- }
- }
- }
- /** Check all rows in <table class="checkable">
- */
- function tableCheck() {
- var tables = document.getElementsByTagName('table');
- for (var i=0; i < tables.length; i++) {
- if (/(^|\s)checkable(\s|$)/.test(tables[i].className)) {
- var trs = tables[i].getElementsByTagName('tr');
- for (var j=0; j < trs.length; j++) {
- trCheck(trs[j].firstChild.firstChild);
- }
- }
- }
- }
- /** Uncheck single element
- * @param string
- */
- function formUncheck(id) {
- var el = document.getElementById(id);
- el.checked = false;
- trCheck(el);
- }
- /** Get number of checked elements matching given name
- * @param HTMLInputElement
- * @param RegExp
- * @return number
- */
- function formChecked(el, name) {
- var checked = 0;
- var elems = el.form.elements;
- for (var i=0; i < elems.length; i++) {
- if (name.test(elems[i].name) && elems[i].checked) {
- checked++;
- }
- }
- return checked;
- }
- /** Select clicked row
- * @param MouseEvent
- */
- function tableClick(event) {
- var click = (!window.getSelection || getSelection().isCollapsed);
- var el = event.target || event.srcElement;
- while (!/^tr$/i.test(el.tagName)) {
- if (/^table$/i.test(el.tagName)) {
- return;
- }
- if (/^(a|input|textarea)$/i.test(el.tagName)) {
- click = false;
- }
- el = el.parentNode;
- }
- el = el.firstChild.firstChild;
- if (click) {
- el.click && el.click();
- el.onclick && el.onclick();
- }
- trCheck(el);
- }
- /** Set HTML code of an element
- * @param string
- * @param string undefined to set parentNode to
- */
- function setHtml(id, html) {
- var el = document.getElementById(id);
- if (el) {
- if (html == undefined) {
- el.parentNode.innerHTML = ' ';
- } else {
- el.innerHTML = html;
- }
- }
- }
- /** Find node position
- * @param Node
- * @return number
- */
- function nodePosition(el) {
- var pos = 0;
- while (el = el.previousSibling) {
- pos++;
- }
- return pos;
- }
- /** Go to the specified page
- * @param string
- * @param string
- * @param [MouseEvent]
- */
- function pageClick(href, page, event) {
- if (!isNaN(page) && page) {
- href += (page != 1 ? '&page=' + (page - 1) : '');
- location.href = href;
- }
- }
- /** Add row in select fieldset
- * @param HTMLSelectElement
- */
- function selectAddRow(field) {
- field.onchange = function () {
- selectFieldChange(field.form);
- };
- field.onchange();
- var row = field.parentNode.cloneNode(true);
- var selects = row.getElementsByTagName('select');
- for (var i=0; i < selects.length; i++) {
- selects[i].name = selects[i].name.replace(/[a-z]\[\d+/, '$&1');
- selects[i].selectedIndex = 0;
- }
- var inputs = row.getElementsByTagName('input');
- if (inputs.length) {
- inputs[0].name = inputs[0].name.replace(/[a-z]\[\d+/, '$&1');
- inputs[0].value = '';
- inputs[0].className = '';
- }
- field.parentNode.parentNode.appendChild(row);
- }
- /** Check whether the query will be executed with index
- * @param HTMLFormElement
- */
- function selectFieldChange(form) {
- var ok = (function () {
- var inputs = form.getElementsByTagName('input');
- for (var i=0; i < inputs.length; i++) {
- var input = inputs[i];
- if (/^fulltext/.test(input.name) && input.value) {
- return true;
- }
- }
- var ok = true;
- var selects = form.getElementsByTagName('select');
- for (var i=0; i < selects.length; i++) {
- var select = selects[i];
- var col = selectValue(select);
- var match = /^(where.+)col\]/.exec(select.name);
- if (match) {
- var op = selectValue(form[match[1] + 'op]']);
- var val = form[match[1] + 'val]'].value;
- if (col in indexColumns && (!/LIKE|REGEXP/.test(op) || (op == 'LIKE' && val.charAt(0) != '%'))) {
- return true;
- } else if (col || val) {
- ok = false;
- }
- }
- if (col && /^order/.test(select.name)) {
- if (!(col in indexColumns)) {
- ok = false;
- }
- break;
- }
- }
- return ok;
- })();
- setHtml('noindex', (ok ? '' : '!'));
- }
- /** Send form by Ctrl+Enter on <select> and <textarea>
- * @param KeyboardEvent
- * @param [string]
- * @return boolean
- */
- function bodyKeydown(event, button) {
- var target = event.target || event.srcElement;
- if (event.ctrlKey && (event.keyCode == 13 || event.keyCode == 10) && !event.altKey && !event.metaKey && /select|textarea|input/i.test(target.tagName)) { // 13|10 - Enter, shiftKey allowed
- target.blur();
- if (button) {
- target.form[button].click();
- } else {
- target.form.submit();
- }
- return false;
- }
- return true;
- }
- /** Change focus by Ctrl+Up or Ctrl+Down
- * @param KeyboardEvent
- * @return boolean
- */
- function editingKeydown(event) {
- if ((event.keyCode == 40 || event.keyCode == 38) && event.ctrlKey && !event.altKey && !event.metaKey) { // 40 - Down, 38 - Up, shiftKey allowed
- var target = event.target || event.srcElement;
- var sibling = (event.keyCode == 40 ? 'nextSibling' : 'previousSibling');
- var el = target.parentNode.parentNode[sibling];
- if (el && (/^tr$/i.test(el.tagName) || (el = el[sibling])) && /^tr$/i.test(el.tagName) && (el = el.childNodes[nodePosition(target.parentNode)]) && (el = el.childNodes[nodePosition(target)])) {
- el.focus();
- }
- return false;
- }
- if (event.shiftKey && !bodyKeydown(event, 'insert')) {
- eventStop(event);
- return false;
- }
- return true;
- }
- /** Disable maxlength for functions
- * @param HTMLSelectElement
- */
- function functionChange(select) {
- var input = select.form[select.name.replace(/^function/, 'fields')];
- if (selectValue(select)) {
- if (input.origMaxLength === undefined) {
- input.origMaxLength = input.maxLength;
- }
- input.removeAttribute('maxlength');
- } else if (input.origMaxLength >= 0) {
- input.maxLength = input.origMaxLength;
- }
- }
- /** Create AJAX request
- * @param string
- * @param function (XMLHttpRequest)
- * @param [string]
- * @return XMLHttpRequest or false in case of an error
- */
- function ajax(url, callback, data) {
- var request = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false));
- if (request) {
- request.open((data ? 'POST' : 'GET'), url);
- if (data) {
- request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
- }
- request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
- request.onreadystatechange = function () {
- if (request.readyState == 4) {
- callback(request);
- }
- };
- request.send(data);
- }
- return request;
- }
- /** Use setHtml(key, value) for JSON response
- * @param string
- * @return XMLHttpRequest or false in case of an error
- */
- function ajaxSetHtml(url) {
- return ajax(url, function (request) {
- if (request.status) {
- var data = eval('(' + request.responseText + ')');
- for (var key in data) {
- setHtml(key, data[key]);
- }
- }
- });
- }
- /** Display edit field
- * @param HTMLElement
- * @param MouseEvent
- * @param number display textarea instead of input, 2 - load long text
- */
- function selectDblClick(td, event, text) {
- if (/input|textarea/i.test(td.firstChild.tagName)) {
- return;
- }
- var original = td.innerHTML;
- var input = document.createElement(text ? 'textarea' : 'input');
- input.onkeydown = function (event) {
- if (!event) {
- event = window.event;
- }
- if (event.keyCode == 27 && !(event.ctrlKey || event.shiftKey || event.altKey || event.metaKey)) { // 27 - Esc
- td.innerHTML = original;
- }
- };
- var pos = event.rangeOffset;
- var value = td.firstChild.alt || td.textContent || td.innerText;
- input.style.width = Math.max(td.clientWidth - 14, 20) + 'px'; // 14 = 2 * (td.border + td.padding + input.border)
- if (text) {
- var rows = 1;
- value.replace(/\n/g, function () {
- rows++;
- });
- input.rows = rows;
- }
- if (value == '\u00A0' || td.getElementsByTagName('i').length) { // or i - NULL
- value = '';
- }
- if (document.selection) {
- var range = document.selection.createRange();
- range.moveToPoint(event.clientX, event.clientY);
- var range2 = range.duplicate();
- range2.moveToElementText(td);
- range2.setEndPoint('EndToEnd', range);
- pos = range2.text.length;
- }
- td.innerHTML = '';
- td.appendChild(input);
- input.focus();
- if (text == 2) { // long text
- return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (request) {
- if (request.status) {
- input.value = request.responseText;
- input.name = td.id;
- }
- });
- }
- input.value = value;
- input.name = td.id;
- input.selectionStart = pos;
- input.selectionEnd = pos;
- if (document.selection) {
- var range = document.selection.createRange();
- range.moveEnd('character', -input.value.length + pos);
- range.select();
- }
- }
- /** Stop event propagation
- * @param Event
- */
- function eventStop(event) {
- if (event.stopPropagation) {
- event.stopPropagation();
- } else {
- event.cancelBubble = true;
- }
- }
- // Adminer specific functions
- var jushRoot = location.protocol + '//www.adminer.org/static/'; // global variable to allow simple customization
- /** Load syntax highlighting
- * @param string first three characters of database system version
- */
- function bodyLoad(version) {
- if (jushRoot) {
- var script = document.createElement('script');
- script.src = jushRoot + 'jush.js';
- script.onload = function () {
- if (window.jush) { // IE runs in case of an error too
- jush.create_links = ' target="_blank" rel="noreferrer"';
- jush.urls.sql_sqlset = jush.urls.sql[0] = jush.urls.sqlset[0] = jush.urls.sqlstatus[0] = 'http://dev.mysql.com/doc/refman/' + version + '/en/$key';
- var pgsql = 'http://www.postgresql.org/docs/' + version + '/static/';
- jush.urls.pgsql_pgsqlset = jush.urls.pgsql[0] = pgsql + '$key';
- jush.urls.pgsqlset[0] = pgsql + 'runtime-config-$key.html#GUC-$1';
- jush.style(jushRoot + 'jush.css');
- if (window.jushLinks) {
- jush.custom_links = jushLinks;
- }
- jush.highlight_tag('code', 0);
- }
- };
- script.onreadystatechange = function () {
- if (/^(loaded|complete)$/.test(script.readyState)) {
- script.onload();
- }
- };
- document.body.appendChild(script);
- }
- }
- /** Get value of dynamically created form field
- * @param HTMLFormElement
- * @param string
- * @return HTMLElement
- */
- function formField(form, name) {
- // required in IE < 8, form.elements[name] doesn't work
- for (var i=0; i < form.length; i++) {
- if (form[i].name == name) {
- return form[i];
- }
- }
- }
- /** Try to change input type to password or to text
- * @param HTMLInputElement
- * @param boolean
- */
- function typePassword(el, disable) {
- try {
- el.type = (disable ? 'text' : 'password');
- } catch (e) {
- }
- }
- function loginDriver(driver) {
- var trs = driver.parentNode.parentNode.parentNode.rows;
- for (var i=1; i < trs.length - 1; i++) {
- trs[i].className = (/sqlite/.test(driver.value) ? 'hidden' : '');
- }
- }
- /** Handle Tab and Esc in textarea
- * @param HTMLTextAreaElement
- * @param KeyboardEvent
- * @return boolean
- */
- function textareaKeydown(target, event) {
- if (!event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {
- if (event.keyCode == 9) { // 9 - Tab
- // inspired by http://pallieter.org/Projects/insertTab/
- if (target.setSelectionRange) {
- var start = target.selectionStart;
- var scrolled = target.scrollTop;
- target.value = target.value.substr(0, start) + '\t' + target.value.substr(target.selectionEnd);
- target.setSelectionRange(start + 1, start + 1);
- target.scrollTop = scrolled;
- return false; //! still loses focus in Opera, can be solved by handling onblur
- } else if (target.createTextRange) {
- document.selection.createRange().text = '\t';
- return false;
- }
- }
- if (event.keyCode == 27) { // 27 - Esc
- var els = target.form.elements;
- for (var i=1; i < els.length; i++) {
- if (els[i-1] == target) {
- els[i].focus();
- break;
- }
- }
- return false;
- }
- }
- return true;
- }
- var added = '.', rowCount;
- /** Check if val is equal to a-delimiter-b where delimiter is '_', '' or big letter
- * @param string
- * @param string
- * @param string
- * @return boolean
- */
- function delimiterEqual(val, a, b) {
- return (val == a + '_' + b || val == a + b || val == a + b.charAt(0).toUpperCase() + b.substr(1));
- }
- /** Escape string to use as identifier
- * @param string
- * @return string
- */
- function idfEscape(s) {
- return s.replace(/`/, '``');
- }
- /** Detect foreign key
- * @param HTMLInputElement
- */
- function editingNameChange(field) {
- var name = field.name.substr(0, field.name.length - 7);
- var type = formField(field.form, name + '[type]');
- var opts = type.options;
- var candidate; // don't select anything with ambiguous match (like column `id`)
- var val = field.value;
- for (var i = opts.length; i--; ) {
- var match = /(.+)`(.+)/.exec(opts[i].value);
- if (!match) { // common type
- if (candidate && i == opts.length - 2 && val == opts[candidate].value.replace(/.+`/, '') && name == 'fields[1]') { // single target table, link to column, first field - probably `id`
- return;
- }
- break;
- }
- var table = match[1];
- var column = match[2];
- var tables = [ table, table.replace(/s$/, ''), table.replace(/es$/, '') ];
- for (var j=0; j < tables.length; j++) {
- table = tables[j];
- if (val == column || val == table || delimiterEqual(val, table, column) || delimiterEqual(val, column, table)) {
- if (candidate) {
- return;
- }
- candidate = i;
- break;
- }
- }
- }
- if (candidate) {
- type.selectedIndex = candidate;
- type.onchange();
- }
- }
- /** Add table row for next field
- * @param HTMLInputElement
- * @param boolean
- * @param boolean
- * @return boolean
- */
- function editingAddRow(button, allowed, focus) {
- if (allowed && rowCount >= allowed) {
- return false;
- }
- var match = /(\d+)(\.\d+)?/.exec(button.name);
- var x = match[0] + (match[2] ? added.substr(match[2].length) : added) + '1';
- var row = button.parentNode.parentNode;
- var row2 = row.cloneNode(true);
- var tags = row.getElementsByTagName('select');
- var tags2 = row2.getElementsByTagName('select');
- for (var i=0; i < tags.length; i++) {
- tags2[i].name = tags[i].name.replace(/([0-9.]+)/, x);
- tags2[i].selectedIndex = tags[i].selectedIndex;
- }
- tags = row.getElementsByTagName('input');
- tags2 = row2.getElementsByTagName('input');
- var input = tags2[0]; // IE loose tags2 after insertBefore()
- for (var i=0; i < tags.length; i++) {
- if (tags[i].name == 'auto_increment_col') {
- tags2[i].value = x;
- tags2[i].checked = false;
- }
- tags2[i].name = tags[i].name.replace(/([0-9.]+)/, x);
- if (/\[(orig|field|comment|default)/.test(tags[i].name)) {
- tags2[i].value = '';
- }
- if (/\[(has_default)/.test(tags[i].name)) {
- tags2[i].checked = false;
- }
- }
- tags[0].onchange = function () {
- editingNameChange(tags[0]);
- };
- row.parentNode.insertBefore(row2, row.nextSibling);
- if (focus) {
- input.onchange = function () {
- editingNameChange(input);
- };
- input.focus();
- }
- added += '0';
- rowCount++;
- return true;
- }
- /** Remove table row for field
- * @param HTMLInputElement
- * @return boolean
- */
- function editingRemoveRow(button) {
- var field = formField(button.form, button.name.replace(/drop_col(.+)/, 'fields$1[field]'));
- field.parentNode.removeChild(field);
- button.parentNode.parentNode.style.display = 'none';
- return true;
- }
- var lastType = '';
- /** Clear length and hide collation or unsigned
- * @param HTMLSelectElement
- */
- function editingTypeChange(type) {
- var name = type.name.substr(0, type.name.length - 6);
- var text = selectValue(type);
- for (var i=0; i < type.form.elements.length; i++) {
- var el = type.form.elements[i];
- if (el.name == name + '[length]' && !(
- (/(char|binary)$/.test(lastType) && /(char|binary)$/.test(text))
- || (/(enum|set)$/.test(lastType) && /(enum|set)$/.test(text))
- )) {
- el.value = '';
- }
- if (lastType == 'timestamp' && el.name == name + '[has_default]' && /timestamp/i.test(formField(type.form, name + '[default]').value)) {
- el.checked = false;
- }
- if (el.name == name + '[collation]') {
- el.className = (/(char|text|enum|set)$/.test(text) ? '' : 'hidden');
- }
- if (el.name == name + '[unsigned]') {
- el.className = (/(int|float|double|decimal)$/.test(text) ? '' : 'hidden');
- }
- if (el.name == name + '[on_delete]') {
- el.className = (/`/.test(text) ? '' : 'hidden');
- }
- }
- }
- /** Edit enum or set
- * @param HTMLInputElement
- */
- function editingLengthFocus(field) {
- var td = field.parentNode;
- if (/(enum|set)$/.test(selectValue(td.previousSibling.firstChild))) {
- var edit = document.getElementById('enum-edit');
- var val = field.value;
- edit.value = (/^'.+','.+'$/.test(val) ? val.substr(1, val.length - 2).replace(/','/g, "\n").replace(/''/g, "'") : val);
- td.appendChild(edit);
- field.style.display = 'none';
- edit.style.display = 'inline';
- edit.focus();
- }
- }
- /** Finish editing of enum or set
- * @param HTMLTextAreaElement
- */
- function editingLengthBlur(edit) {
- var field = edit.parentNode.firstChild;
- var val = edit.value;
- field.value = (/\n/.test(val) ? "'" + val.replace(/\n+$/, '').replace(/'/g, "''").replace(/\n/g, "','") + "'" : val);
- field.style.display = 'inline';
- edit.style.display = 'none';
- }
- /** Show or hide selected table column
- * @param boolean
- * @param number
- */
- function columnShow(checked, column) {
- var trs = document.getElementById('edit-fields').getElementsByTagName('tr');
- for (var i=0; i < trs.length; i++) {
- trs[i].getElementsByTagName('td')[column].className = (checked ? '' : 'hidden');
- }
- }
- /** Display partition options
- * @param HTMLSelectElement
- */
- function partitionByChange(el) {
- var partitionTable = /RANGE|LIST/.test(selectValue(el));
- el.form['partitions'].className = (partitionTable || !el.selectedIndex ? 'hidden' : '');
- document.getElementById('partition-table').className = (partitionTable ? '' : 'hidden');
- }
- /** Add next partition row
- * @param HTMLInputElement
- */
- function partitionNameChange(el) {
- var row = el.parentNode.parentNode.cloneNode(true);
- row.firstChild.firstChild.value = '';
- el.parentNode.parentNode.parentNode.appendChild(row);
- el.onchange = function () {};
- }
- /** Add row for foreign key
- * @param HTMLSelectElement
- */
- function foreignAddRow(field) {
- field.onchange = function () { };
- var row = field.parentNode.parentNode.cloneNode(true);
- var selects = row.getElementsByTagName('select');
- for (var i=0; i < selects.length; i++) {
- selects[i].name = selects[i].name.replace(/\]/, '1$&');
- selects[i].selectedIndex = 0;
- }
- field.parentNode.parentNode.parentNode.appendChild(row);
- }
- /** Add row for indexes
- * @param HTMLSelectElement
- */
- function indexesAddRow(field) {
- field.onchange = function () { };
- var parent = field.parentNode.parentNode;
- var row = parent.cloneNode(true);
- var selects = row.getElementsByTagName('select');
- for (var i=0; i < selects.length; i++) {
- selects[i].name = selects[i].name.replace(/indexes\[\d+/, '$&1');
- selects[i].selectedIndex = 0;
- }
- var inputs = row.getElementsByTagName('input');
- for (var i=0; i < inputs.length; i++) {
- inputs[i].name = inputs[i].name.replace(/indexes\[\d+/, '$&1');
- inputs[i].value = '';
- }
- parent.parentNode.appendChild(row);
- }
- /** Change column in index
- * @param HTMLSelectElement
- * @param string name prefix
- */
- function indexesChangeColumn(field, prefix) {
- var columns = field.parentNode.parentNode.getElementsByTagName('select');
- var names = [];
- for (var i=0; i < columns.length; i++) {
- var value = selectValue(columns[i]);
- if (value) {
- names.push(value);
- }
- }
- field.form[field.name.replace(/\].*/, '][name]')].value = prefix + names.join('_');
- }
- /** Add column for index
- * @param HTMLSelectElement
- * @param string name prefix
- */
- function indexesAddColumn(field, prefix) {
- field.onchange = function () {
- indexesChangeColumn(field, prefix);
- };
- var select = field.form[field.name.replace(/\].*/, '][type]')];
- if (!select.selectedIndex) {
- select.selectedIndex = 3;
- select.onchange();
- }
- var column = field.parentNode.cloneNode(true);
- select = column.getElementsByTagName('select')[0];
- select.name = select.name.replace(/\]\[\d+/, '$&1');
- select.selectedIndex = 0;
- var input = column.getElementsByTagName('input')[0];
- input.name = input.name.replace(/\]\[\d+/, '$&1');
- input.value = '';
- field.parentNode.parentNode.appendChild(column);
- field.onchange();
- }
- var that, x, y; // em and tablePos defined in schema.inc.php
- /** Get mouse position
- * @param HTMLElement
- * @param MouseEvent
- */
- function schemaMousedown(el, event) {
- if ((event.which ? event.which : event.button) == 1) {
- that = el;
- x = event.clientX - el.offsetLeft;
- y = event.clientY - el.offsetTop;
- }
- }
- /** Move object
- * @param MouseEvent
- */
- function schemaMousemove(ev) {
- if (that !== undefined) {
- ev = ev || event;
- var left = (ev.clientX - x) / em;
- var top = (ev.clientY - y) / em;
- var divs = that.getElementsByTagName('div');
- var lineSet = { };
- for (var i=0; i < divs.length; i++) {
- if (divs[i].className == 'references') {
- var div2 = document.getElementById((/^refs/.test(divs[i].id) ? 'refd' : 'refs') + divs[i].id.substr(4));
- var ref = (tablePos[divs[i].title] ? tablePos[divs[i].title] : [ div2.parentNode.offsetTop / em, 0 ]);
- var left1 = -1;
- var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1');
- if (divs[i].parentNode != div2.parentNode) {
- left1 = Math.min(0, ref[1] - left) - 1;
- divs[i].style.left = left1 + 'em';
- divs[i].getElementsByTagName('div')[0].style.width = -left1 + 'em';
- var left2 = Math.min(0, left - ref[1]) - 1;
- div2.style.left = left2 + 'em';
- div2.getElementsByTagName('div')[0].style.width = -left2 + 'em';
- }
- if (!lineSet[id]) {
- var line = document.getElementById(divs[i].id.replace(/^....(.+)-.+$/, 'refl$1'));
- var top1 = top + divs[i].offsetTop / em;
- var top2 = top + div2.offsetTop / em;
- if (divs[i].parentNode != div2.parentNode) {
- top2 += ref[0] - top;
- line.getElementsByTagName('div')[0].style.height = Math.abs(top1 - top2) + 'em';
- }
- line.style.left = (left + left1) + 'em';
- line.style.top = Math.min(top1, top2) + 'em';
- lineSet[id] = true;
- }
- }
- }
- that.style.left = left + 'em';
- that.style.top = top + 'em';
- }
- }
- /** Finish move
- * @param MouseEvent
- * @param string
- */
- function schemaMouseup(ev, db) {
- if (that !== undefined) {
- ev = ev || event;
- tablePos[that.firstChild.firstChild.firstChild.data] = [ (ev.clientY - y) / em, (ev.clientX - x) / em ];
- that = undefined;
- var s = '';
- for (var key in tablePos) {
- s += '_' + key + ':' + Math.round(tablePos[key][0] * 10000) / 10000 + 'x' + Math.round(tablePos[key][1] * 10000) / 10000;
- }
- s = encodeURIComponent(s.substr(1));
- var link = document.getElementById('schema-link');
- link.href = link.href.replace(/[^=]+$/, '') + s;
- cookie('adminer_schema-' + db + '=' + s, 30); //! special chars in db
- }
- }
- <?php
- }else{header("Content-Type: image/gif");switch($_GET["file"]){case"plus.gif":echo
- base64_decode("R0lGODdhEgASAKEAAO7u7gAAAJmZmQAAACwAAAAAEgASAAACIYSPqcvtD00I8cwqKb5v+q8pIAhxlRmhZYi17iPE8kzLBQA7");break;case"cross.gif":echo
- base64_decode("R0lGODdhEgASAKEAAO7u7gAAAJmZmQAAACwAAAAAEgASAAACI4SPqcvtDyMKYdZGb355wy6BX3dhlOEx57FK7gtHwkzXNl0AADs=");break;case"up.gif":echo
- base64_decode("R0lGODdhEgASAKEAAO7u7gAAAJmZmQAAACwAAAAAEgASAAACIISPqcvtD00IUU4K730T9J5hFTiKEXmaYcW2rgDH8hwXADs=");break;case"down.gif":echo
- base64_decode("R0lGODdhEgASAKEAAO7u7gAAAJmZmQAAACwAAAAAEgASAAACIISPqcvtD00I8cwqKb5bV/5cosdMJtmcHca2lQDH8hwXADs=");break;case"arrow.gif":echo
- base64_decode("R0lGODlhCAAKAIAAAICAgP///yH5BAEAAAEALAAAAAAIAAoAAAIPBIJplrGLnpQRqtOy3rsAADs=");break;}}exit;}function
- connection(){global$g;return$g;}function
- adminer(){global$b;return$b;}function
- idf_unescape($r){$Xc=substr($r,-1);return
- str_replace($Xc.$Xc,$Xc,substr($r,1,-1));}function
- escape_string($W){return
- substr(q($W),1,-1);}function
- remove_slashes($Ae,$hc=false){if(get_magic_quotes_gpc()){while(list($v,$W)=each($Ae)){foreach($W
- as$Tc=>$V){unset($Ae[$v][$Tc]);if(is_array($V)){$Ae[$v][stripslashes($Tc)]=$V;$Ae[]=&$Ae[$v][stripslashes($Tc)];}else$Ae[$v][stripslashes($Tc)]=($hc?$V:stripslashes($V));}}}}function
- bracket_escape($r,$Ca=false){static$Of=array(':'=>':1',']'=>':2','['=>':3');return
- strtr($r,($Ca?array_flip($Of):$Of));}function
- h($L){return
- htmlspecialchars(str_replace("\0","",$L),ENT_QUOTES);}function
- nbsp($L){return(trim($L)!=""?h($L):" ");}function
- nl_br($L){return
- str_replace("\n","<br>",$L);}function
- checkbox($_,$X,$Na,$Vc="",$Nd="",$Sc=false){static$q=0;$q++;$F="<input type='checkbox' name='$_' value='".h($X)."'".($Na?" checked":"").($Nd?' onclick="'.h($Nd).'"':'').($Sc?" class='jsonly'":"")." id='checkbox-$q'>";return($Vc!=""?"<label for='checkbox-$q'>$F".h($Vc)."</label>":$F);}function
- optionlist($Rd,$af=null,$eg=false){$F="";foreach($Rd
- as$Tc=>$V){$Sd=array($Tc=>$V);if(is_array($V)){$F.='<optgroup label="'.h($Tc).'">';$Sd=$V;}foreach($Sd
- as$v=>$W)$F.='<option'.($eg||is_string($v)?' value="'.h($v).'"':'').(($eg||is_string($v)?(string)$v:$W)===$af?' selected':'').'>'.h($W);if(is_array($V))$F.='</optgroup>';}return$F;}function
- html_select($_,$Rd,$X="",$Md=true){if($Md)return"<select name='".h($_)."'".(is_string($Md)?' onchange="'.h($Md).'"':"").">".optionlist($Rd,$X)."</select>";$F="";foreach($Rd
- as$v=>$W)$F.="<label><input type='radio' name='".h($_)."' value='".h($v)."'".($v==$X?" checked":"").">".h($W)."</label>";return$F;}function
- confirm($gb=""){return" onclick=\"return confirm('".lang(0).($gb?" (' + $gb + ')":"")."');\"";}function
- print_fieldset($q,$cd,$kg=false,$Nd=""){echo"<fieldset><legend><a href='#fieldset-$q' onclick=\"".h($Nd)."return !toggle('fieldset-$q');\">$cd</a></legend><div id='fieldset-$q'".($kg?"":" class='hidden'").">\n";}function
- bold($Ha){return($Ha?" class='active'":"");}function
- odd($F=' class="odd"'){static$p=0;if(!$F)$p=-1;return($p++%
- 2?$F:'');}function
- js_escape($L){return
- addcslashes($L,"\r\n'\\/");}function
- json_row($v,$W=null){static$ic=true;if($ic)echo"{";if($v!=""){echo($ic?"":",")."\n\t\"".addcslashes($v,"\r\n\"\\").'": '.($W!==null?'"'.addcslashes($W,"\r\n\"\\").'"':'undefined');$ic=false;}else{echo"\n}\n";$ic=true;}}function
- ini_bool($Kc){$W=ini_get($Kc);return(eregi('^(on|true|yes)$',$W)||(int)$W);}function
- sid(){static$F;if($F===null)$F=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$F;}function
- q($L){global$g;return$g->quote($L);}function
- get_vals($D,$e=0){global$g;$F=array();$E=$g->query($D);if(is_object($E)){while($G=$E->fetch_row())$F[]=$G[$e];}return$F;}function
- get_key_vals($D,$h=null){global$g;if(!is_object($h))$h=$g;$F=array();$E=$h->query($D);if(is_object($E)){while($G=$E->fetch_row())$F[$G[0]]=$G[1];}return$F;}function
- get_rows($D,$h=null,$k="<p class='error'>"){global$g;$cb=(is_object($h)?$h:$g);$F=array();$E=$cb->query($D);if(is_object($E)){while($G=$E->fetch_assoc())$F[]=$G;}elseif(!$E&&!is_object($h)&&$k&&defined("PAGE_HEADER"))echo$k.adminer_error()."\n";return$F;}function
- unique_array($G,$t){foreach($t
- as$s){if(ereg("PRIMARY|UNIQUE",$s["type"])){$F=array();foreach($s["columns"]as$v){if(!isset($G[$v]))continue
- 2;$F[$v]=$G[$v];}return$F;}}$F=array();foreach($G
- as$v=>$W){if(!preg_match('~^(COUNT\\((\\*|(DISTINCT )?`(?:[^`]|``)+`)\\)|(AVG|GROUP_CONCAT|MAX|MIN|SUM)\\(`(?:[^`]|``)+`\\))$~',$v))$F[$v]=$W;}return$F;}function
- where($Z){global$u;$F=array();foreach((array)$Z["where"]as$v=>$W)$F[]=idf_escape(bracket_escape($v,1)).(($u=="sql"&&ereg('\\.',$W))||$u=="mssql"?" LIKE ".exact_value(addcslashes($W,"%_\\")):" = ".exact_value($W));foreach((array)$Z["null"]as$v)$F[]=idf_escape($v)." IS NULL";return
- implode(" AND ",$F);}function
- where_check($W){parse_str($W,$Ma);remove_slashes(array(&$Ma));return
- where($Ma);}function
- where_link($p,$e,$X,$Od="="){return"&where%5B$p%5D%5Bcol%5D=".urlencode($e)."&where%5B$p%5D%5Bop%5D=".urlencode(($X!==null?$Od:"IS NULL"))."&where%5B$p%5D%5Bval%5D=".urlencode($X);}function
- cookie($_,$X){global$ba;$ge=array($_,(ereg("\n",$X)?"":$X),time()+2592000,preg_replace('~\\?.*~','',$_SERVER["REQUEST_URI"]),"",$ba);if(version_compare(PHP_VERSION,'5.2.0')>=0)$ge[]=true;return
- call_user_func_array('setcookie',$ge);}function
- restart_session(){if(!ini_bool("session.use_cookies"))session_start();}function&get_session($v){return$_SESSION[$v][DRIVER][SERVER][$_GET["username"]];}function
- set_session($v,$W){$_SESSION[$v][DRIVER][SERVER][$_GET["username"]]=$W;}function
- auth_url($xb,$J,$U,$j=null){global$yb;preg_match('~([^?]*)\\??(.*)~',remove_from_uri(implode("|",array_keys($yb))."|username|".($j!==null?"db|":"").session_name()),$z);return"$z[1]?".(sid()?SID."&":"").($xb!="server"||$J!=""?urlencode($xb)."=".urlencode($J)."&":"")."username=".urlencode($U).($j!=""?"&db=".urlencode($j):"").($z[2]?"&$z[2]":"");}function
- is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function
- adminer_redirect($gd,$rd=null){if($rd!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($gd!==null?$gd:$_SERVER["REQUEST_URI"]))][]=$rd;}if($gd!==null){if($gd=="")$gd=".";header("Location: $gd");exit;}}function
- query_redirect($D,$gd,$rd,$Fe=true,$Wb=true,$dc=false){global$g,$k,$b;if($Wb)$dc=!$g->query($D);$jf="";if($D)$jf=$b->messageQuery("$D;");if($dc){$k=adminer_error().$jf;return
- false;}if($Fe)adminer_redirect($gd,$rd.$jf);return
- true;}function
- queries($D=null){global$g;static$De=array();if($D===null)return
- implode(";\n",$De);$De[]=(ereg(';$',$D)?"DELIMITER ;;\n$D;\nDELIMITER ":$D);return$g->query($D);}function
- apply_queries($D,$P,$Rb='table'){foreach($P
- as$N){if(!queries("$D ".$Rb($N)))return
- false;}return
- true;}function
- queries_redirect($gd,$rd,$Fe){return
- query_redirect(queries(),$gd,$rd,$Fe,false,!$Fe);}function
- remove_from_uri($fe=""){return
- substr(preg_replace("~(?<=[?&])($fe".(SID?"":"|".session_name()).")=[^&]*&~",'',"$_SERVER[REQUEST_URI]&"),0,-1);}function
- pagination($ee,$lb){return" ".($ee==$lb?$ee+1:'<a href="'.h(remove_from_uri("page").($ee?"&page=$ee":"")).'">'.($ee+1)."</a>");}function
- get_file($v,$qb=false){$fc=$_FILES[$v];if(!$fc||$fc["error"])return$fc["error"];$F=file_get_contents($qb&&ereg('\\.gz$',$fc["name"])?"compress.zlib://$fc[tmp_name]":($qb&&ereg('\\.bz2$',$fc["name"])?"compress.bzip2://$fc[tmp_name]":$fc["tmp_name"]));if($qb){$kf=substr($F,0,3);if(function_exists("iconv")&&ereg("^\xFE\xFF|^\xFF\xFE",$kf,$Le))$F=iconv("utf-16","utf-8",$F);elseif($kf=="\xEF\xBB\xBF")$F=substr($F,3);}return$F;}function
- upload_error($k){$pd=($k==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($k?lang(1).($pd?" ".lang(2,$pd):""):lang(3));}function
- repeat_pattern($ne,$w){return
- str_repeat("$ne{0,65535}",$w/65535)."$ne{0,".($w
- %
- 65535)."}";}function
- is_utf8($W){return(preg_match('~~u',$W)&&!preg_match('~[\\0-\\x8\\xB\\xC\\xE-\\x1F]~',$W));}function
- shorten_utf8($L,$w=80,$qf=""){if(!preg_match("(^(".repeat_pattern("[\t\r\n -\x{FFFF}]",$w).")($)?)u",$L,$z))preg_match("(^(".repeat_pattern("[\t\r\n -~]",$w).")($)?)",$L,$z);return
- h($z[1]).$qf.(isset($z[2])?"":"<i>...</i>");}function
- friendly_url($W){return
- preg_replace('~[^a-z0-9_]~i','-',$W);}function
- hidden_fields($Ae,$Fc=array()){while(list($v,$W)=each($Ae)){if(is_array($W)){foreach($W
- as$Tc=>$V)$Ae[$v."[$Tc]"]=$V;}elseif(!in_array($v,$Fc))echo'<input type="hidden" name="'.h($v).'" value="'.h($W).'">';}}function
- hidden_fields_get(){echo(sid()?'<input type="hidden" name="'.session_name().'" value="'.h(session_id()).'">':''),(SERVER!==null?'<input type="hidden" name="'.DRIVER.'" value="'.h(SERVER).'">':""),'<input type="hidden" name="username" value="'.h($_GET["username"]).'">';}function
- column_foreign_keys($N){global$b;$F=array();foreach($b->foreignKeys($N)as$n){foreach($n["source"]as$W)$F[$W][]=$n;}return$F;}function
- enum_input($S,$za,$l,$X,$Ib=null){global$b;preg_match_all("~'((?:[^']|'')*)'~",$l["length"],$kd);$F=($Ib!==null?"<label><input type='$S'$za value='$Ib'".((is_array($X)?in_array($Ib,$X):$X===0)?" checked":"")."><i>".lang(4)."</i></label>":"");foreach($kd[1]as$p=>$W){$W=stripcslashes(str_replace("''","'",$W));$Na=(is_int($X)?$X==$p+1:(is_array($X)?in_array($p+1,$X):$X===$W));$F.=" <label><input type='$S'$za value='".($p+1)."'".($Na?' checked':'').'>'.h($b->editVal($W,$l)).'</label>';}return$F;}function
- input($l,$X,$o){global$T,$b,$u;$_=h(bracket_escape($l["field"]));echo"<td class='function'>";$Ne=($u=="mssql"&&$l["auto_increment"]);if($Ne&&!$_POST["save"])$o=null;$tc=(isset($_GET["select"])||$Ne?array("orig"=>lang(5)):array())+$b->editFunctions($l);$za=" name='fields[$_]'";if($l["type"]=="enum")echo
- nbsp($tc[""])."<td>".$b->editInput($_GET["edit"],$l,$za,$X);else{$ic=0;foreach($tc
- as$v=>$W){if($v===""||!$W)break;$ic++;}$Md=($ic?" onchange=\"var f = this.form['function[".h(js_escape(bracket_escape($l["field"])))."]']; if ($ic > f.selectedIndex) f.selectedIndex = $ic;\"":"");$za.=$Md;echo(count($tc)>1?html_select("function[$_]",$tc,$o===null||in_array($o,$tc)||isset($tc[$o])?$o:"","functionChange(this);"):nbsp(reset($tc))).'<td>';$Mc=$b->editInput($_GET["edit"],$l,$za,$X);if($Mc!="")echo$Mc;elseif($l["type"]=="set"){preg_match_all("~'((?:[^']|'')*)'~",$l["length"],$kd);foreach($kd[1]as$p=>$W){$W=stripcslashes(str_replace("''","'",$W));$Na=(is_int($X)?($X>>$p)&1:in_array($W,explode(",",$X),true));echo" <label><input type='checkbox' name='fields[$_][$p]' value='".(1<<$p)."'".($Na?' checked':'')."$Md>".h($b->editVal($W,$l)).'</label>';}}elseif(ereg('blob|bytea|raw|file',$l["type"])&&ini_bool("file_uploads"))echo"<input type='file' name='fields-$_'$Md>";elseif(ereg('text|lob',$l["type"]))echo"<textarea ".($u!="sqlite"||ereg("\n",$X)?"cols='50' rows='12'":"cols='30' rows='1' style='height: 1.2em;'")."$za>".h($X).'</textarea>';else{$qd=(!ereg('int',$l["type"])&&preg_match('~^(\\d+)(,(\\d+))?$~',$l["length"],$z)?((ereg("binary",$l["type"])?2:1)*$z[1]+($z[3]?1:0)+($z[2]&&!$l["unsigned"]?1:0)):($T[$l["type"]]?$T[$l["type"]]+($l["unsigned"]?0:1):0));echo"<input value='".h($X)."'".($qd?" maxlength='$qd'":"").(ereg('char|binary',$l["type"])&&$qd>20?" size='40'":"")."$za>";}}}function
- process_input($l){global$b;$r=bracket_escape($l["field"]);$o=$_POST["function"][$r];$X=$_POST["fields"][$r];if($l["type"]=="enum"){if($X==-1)return
- false;if($X=="")return"NULL";return+$X;}if($l["auto_increment"]&&$X=="")return
- null;if($o=="orig")return($l["on_update"]=="CURRENT_TIMESTAMP"?idf_escape($l["field"]):false);if($o=="NULL")return"NULL";if($l["type"]=="set")return
- array_sum((array)$X);if(ereg('blob|bytea|raw|file',$l["type"])&&ini_bool("file_uploads")){$fc=get_file("fields-$r");if(!is_string($fc))return
- false;return
- q($fc);}return$b->processInput($l,$X,$o);}function
- search_tables(){global$b,$g;$_GET["where"][0]["op"]="LIKE %%";$_GET["where"][0]["val"]=$_POST["query"];$oc=false;foreach(table_status()as$N=>$O){$_=$b->tableName($O);if(isset($O["Engine"])&&$_!=""&&(!$_POST["tables"]||in_array($N,$_POST["tables"]))){$E=$g->query("SELECT".limit("1 FROM ".table($N)," WHERE ".implode(" AND ",$b->selectSearchProcess(fields($N),array())),1));if($E->fetch_row()){if(!$oc){echo"<ul>\n";$oc=true;}echo"<li><a href='".h(ME."select=".urlencode($N)."&where[0][op]=".urlencode($_GET["where"][0]["op"])."&where[0][val]=".urlencode($_GET["where"][0]["val"]))."'>$_</a>\n";}}}echo($oc?"</ul>":"<p class='message'>".lang(6))."\n";}function
- dump_headers($Ec,$zd=false){global$b;$F=$b->dumpHeaders($Ec,$zd);$ce=$_POST["output"];if($ce!="text")header("Content-Disposition: attachment; filename=".friendly_url($Ec!=""?$Ec:(SERVER!=""?SERVER:"localhost")).".$F".($ce!="file"&&!ereg('[^0-9a-z]',$ce)?".$ce":""));session_write_close();return$F;}function
- dump_csv($G){foreach($G
- as$v=>$W){if(preg_match("~[\"\n,;\t]~",$W)||$W==="")$G[$v]='"'.str_replace('"','""',$W).'"';}echo
- implode(($_POST["format"]=="csv"?",":($_POST["format"]=="tsv"?"\t":";")),$G)."\r\n";}function
- apply_sql_function($o,$e){return($o?($o=="unixepoch"?"DATETIME($e, '$o')":($o=="count distinct"?"COUNT(DISTINCT ":strtoupper("$o("))."$e)"):$e);}function
- password_file(){$ub=ini_get("upload_tmp_dir");if(!$ub){if(function_exists('sys_get_temp_dir'))$ub=sys_get_temp_dir();else{$gc=@tempnam("","");if(!$gc)return
- false;$ub=dirname($gc);unlink($gc);}}$gc="$ub/adminer.key";$F=@file_get_contents($gc);if($F)return$F;$qc=@fopen($gc,"w");if($qc){$F=md5(uniqid(mt_rand(),true));fwrite($qc,$F);fclose($qc);}return$F;}function
- is_mail($Fb){$ya='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$wb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$ne="$ya+(\\.$ya+)*@($wb?\\.)+$wb";return
- preg_match("(^$ne(,\\s*$ne)*\$)i",$Fb);}function
- is_url($L){$wb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return(preg_match("~^(https?)://($wb?\\.)+$wb(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$L,$z)?strtolower($z[1]):"");}global$b,$g,$yb,$Db,$Mb,$k,$tc,$yc,$ba,$Lc,$u,$ca,$Wc,$Ld,$of,$Q,$R,$T,$bg,$ia;if(!$_SERVER["REQUEST_URI"])$_SERVER["REQUEST_URI"]=$_SERVER["ORIG_PATH_INFO"];if(!strpos($_SERVER["REQUEST_URI"],'?')&&$_SERVER["QUERY_STRING"]!="")$_SERVER["REQUEST_URI"].="?$_SERVER[QUERY_STRING]";$ba=$_SERVER["HTTPS"]&&strcasecmp($_SERVER["HTTPS"],"off");@ini_set("session.use_trans_sid",false);if(!defined("SID")){session_name("adminer_sid");$ge=array(0,preg_replace('~\\?.*~','',$_SERVER["REQUEST_URI"]),"",$ba);if(version_compare(PHP_VERSION,'5.2.0')>=0)$ge[]=true;call_user_func_array('session_set_cookie_params',$ge);session_start();}remove_slashes(array(&$_GET,&$_POST,&$_COOKIE),$hc);if(function_exists("set_magic_quotes_runtime"))set_magic_quotes_runtime(false);@set_time_limit(0);@ini_set("zend.ze1_compatibility_mode",false);@ini_set("precision",20);$Wc=array('en'=>'English','cs'=>'Čeština','sk'=>'Slovenčina','nl'=>'Nederlands','es'=>'Español','de'=>'Deutsch','fr'=>'Français','it'=>'Italiano','et'=>'Eesti','hu'=>'Magyar','pl'=>'Polski','ca'=>'Català','pt'=>'Português','sl'=>'Slovenski','lt'=>'Lietuvių','tr'=>'Türkçe','ro'=>'Limba Română','ru'=>'Русский язык','uk'=>'Українська','zh'=>'简体中文','zh-tw'=>'繁體中文','ja'=>'日本語','ta'=>'தமிழ்','ar'=>'العربية','fa'=>'فارسی','bn'=>'বাংলা',);function
- get_lang(){global$ca;return$ca;}function
- lang($r,$Fd=null){global$ca,$R;$Pf=$R[$r];if(is_array($Pf)){$qe=($Fd==1?0:($ca=='cs'||$ca=='sk'?($Fd&&$Fd<5?1:2):($ca=='fr'?(!$Fd?0:1):($ca=='pl'?($Fd
- %
- 10>1&&$Fd
- %
- 10<5&&$Fd/10
- %
- 10!=1?1:2):($ca=='sl'?($Fd
- %
- 100==1?0:($Fd
- %
- 100==2?1:($Fd
- %
- 100==3||$Fd
- %
- 100==4?2:3))):($ca=='lt'?($Fd
- %
- 10==1&&$Fd
- %
- 100!=11?0:($Fd
- %
- 10>1&&$Fd/10
- %
- 10!=1?1:2)):($ca=='ru'||$ca=='uk'?($Fd
- %
- 10==1&&$Fd
- %
- 100!=11?0:($Fd
- %
- 10>1&&$Fd
- %
- 10<5&&$Fd/10
- %
- 10!=1?1:2)):1)))))));$Pf=$Pf[$qe];}$xa=func_get_args();array_shift($xa);return
- vsprintf(($Pf!==null?$Pf:$r),$xa);}function
- switch_lang(){global$ca,$Wc;echo"<form action=''>\n<div id='lang'>";hidden_fields($_GET,array('lang'));echo
- lang(7).": ".html_select("lang",$Wc,$ca,"var loc = location.search.replace(/[?&]lang=[^&]*/, ''); location.search = loc + (loc ? '&' : '') + 'lang=' + this.value;")," <input type='submit' value='".lang(8)."' class='hidden'>\n","</div>\n</form>\n";}if(isset($_GET["lang"])){$_COOKIE["adminer_lang"]=$_GET["lang"];$_SESSION["lang"]=$_GET["lang"];}$ca="en";if(isset($Wc[$_COOKIE["adminer_lang"]])){cookie("adminer_lang",$_COOKIE["adminer_lang"]);$ca=$_COOKIE["adminer_lang"];}elseif(isset($Wc[$_SESSION["lang"]]))$ca=$_SESSION["lang"];else{$pa=array();preg_match_all('~([-a-z]+)(;q=([0-9.]+))?~',str_replace("_","-",strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"])),$kd,PREG_SET_ORDER);foreach($kd
- as$z)$pa[$z[1]]=(isset($z[3])?$z[3]:1);arsort($pa);foreach($pa
- as$v=>$C){if(isset($Wc[$v])){$ca=$v;break;}$v=preg_replace('~-.*~','',$v);if(!isset($pa[$v])&&isset($Wc[$v])){$ca=$v;break;}}}switch($ca){case"en":$R=array('Are you sure?','Unable to upload a file.','Maximum allowed file size is %sB.','File does not exist.','empty','original','No tables.','Language','Use','Please use one of the extensions %s.','File exists.','User types','Numbers','Date and time','Strings','Binary','Network','Geometry','Lists','System','Server','Username','Password','Database','Login','Permanent login','Select data','Show structure','Alter view','Alter table','New item','Last page','Edit',array('%d byte','%d bytes'),'Select','Functions','Aggregation','Search','anywhere','Sort','descending','Limit','Text length','Action','Full table scan','SQL command','open','save','Alter database','Alter schema','Create schema','Database schema','Privileges','Dump','Logout','database','schema','Create new table','select','ltr','Invalid CSRF token. Send the form again.','Logout successful.','Session support must be enabled.','Session expired, please login again.','Invalid credentials.','No extension','None of the supported PHP extensions (%s) are available.','Too big POST data. Reduce the data or increase the %s configuration directive.','Invalid database.','Databases have been dropped.','Select database','Create new database','Process list','Variables','Status','%s version: %s through PHP extension %s','Logged as: %s','Collation','Tables','Drop','Refresh','Schema','Invalid schema.','No rows.','%.3f s','Foreign keys','collation','ON DELETE','Column name','Parameter name','Type','Length','Options','Auto Increment','Default values','Comment','Add next','Move up','Move down','Remove','View','Table','Column','Indexes','Alter indexes','Source','Target','ON UPDATE','Alter','Add foreign key','Triggers','Add trigger','Permanent link','Export','Output','Format','Routines','Events','Data','Create user','Error in query',array('%d row','%d rows'),array('Query executed OK, %d row affected.','Query executed OK, %d rows affected.'),'No commands to execute.',array('%d query executed OK.','%d queries executed OK.'),'File upload','File uploads are disabled.','Execute','Stop on error','Show only errors','From server','Webserver file %s','Run file','History','Clear','Edit all','Item has been deleted.','Item has been updated.','Item%s has been inserted.','Insert','Save','Save and continue edit','Save and insert next','Delete','Table has been dropped.','Table has been altered.','Table has been created.','Create table','Maximum number of allowed fields exceeded. Please increase %s and %s.','Table name','engine','Partition by','Partitions','Partition name','Values','Indexes have been altered.','Index Type','Column (length)','Name','Database has been dropped.','Database has been renamed.','Database has been created.','Database has been altered.','Create database','Schema has been dropped.','Schema has been created.','Schema has been altered.','Call',array('Routine has been called, %d row affected.','Routine has been called, %d rows affected.'),'Foreign key has been dropped.','Foreign key has been altered.','Foreign key has been created.','Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.','Foreign key','Target table','Change','Add column','View has been dropped.','View has been altered.','View has been created.','Create view','Event has been dropped.','Event has been altered.','Event has been created.','Alter event','Create event','Start','End','Every','On completion preserve','Routine has been dropped.','Routine has been altered.','Routine has been created.','Alter function','Alter procedure','Create function','Create procedure','Return type','Sequence has been dropped.','Sequence has been created.','Sequence has been altered.','Alter sequence','Create sequence','Type has been dropped.','Type has been created.','Alter type','Create type','Trigger has been dropped.','Trigger has been altered.','Trigger has been created.','Alter trigger','Create trigger','Time','Event','User has been dropped.','User has been altered.','User has been created.','Hashed','Routine','Grant','Revoke',array('%d process has been killed.','%d processes have been killed.'),'%d in total','Kill',array('%d item has been affected.','%d items have been affected.'),'Double click on a value to modify it.',array('%d row has been imported.','%d rows have been imported.'),'Unable to select the table','edit','Relations','Use edit link to modify this value.','Page','last','whole result','Clone','Import',',','Tables have been truncated.','Tables have been moved.','Tables have been copied.','Tables have been dropped.','Tables have been optimized.','Tables and views','Search data in tables','Engine','Data Length','Index Length','Data Free','Rows','Analyze','Optimize','Check','Repair','Truncate','Move to other database','Move','Copy','Sequences','Schedule','At given time',array('%d e-mail has been sent.','%d e-mails have been sent.'));break;case"cs":$R=array('Opravdu?','Nepodařilo se nahr…
Large files files are truncated, but you can click here to view the full file