Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 513 lines (478 sloc) 16.007 kb
667bfec Decomposition
jakubvrana authored
1 <?php
9a176b0 Comments
jakubvrana authored
2 /** Get database connection
3 * @return Min_DB
4 */
64d616c Rename get_dbh to connection
jakubvrana authored
5 function connection() {
6 // can be used in customization, $connection is minified
7 global $connection;
8 return $connection;
c64c4fd Adminer class
jakubvrana authored
9 }
10
9a176b0 Comments
jakubvrana authored
11 /** Escape database identifier
12 * @param string
13 * @return string
14 */
667bfec Decomposition
jakubvrana authored
15 function idf_escape($idf) {
16 return "`" . str_replace("`", "``", $idf) . "`";
17 }
18
9a176b0 Comments
jakubvrana authored
19 /** Unescape database identifier
20 * @param string text inside ``
21 * @return string
22 */
667bfec Decomposition
jakubvrana authored
23 function idf_unescape($idf) {
24 return str_replace("``", "`", $idf);
25 }
26
9a176b0 Comments
jakubvrana authored
27 /** Escape or unescape string to use inside form []
28 * @param string
29 * @param bool
30 * @return string
31 */
667bfec Decomposition
jakubvrana authored
32 function bracket_escape($idf, $back = false) {
64ba924 Comments
jakubvrana authored
33 // escape brackets inside name="x[]"
73e8631 Move stuff to functions.inc.php
jakubvrana authored
34 static $trans = array(':' => ':1', ']' => ':2', '[' => ':3');
667bfec Decomposition
jakubvrana authored
35 return strtr($idf, ($back ? array_flip($trans) : $trans));
36 }
37
9a176b0 Comments
jakubvrana authored
38 /** Escape for HTML
39 * @param string
40 * @return string
41 */
689699a Shortcut for htmlspecialchars
jakubvrana authored
42 function h($string) {
43 return htmlspecialchars($string, ENT_QUOTES);
44 }
45
24801a0 Display whitespace in texts (bug #2858042)
jakubvrana authored
46 /** Convert text whitespace to HTML
47 * @param string
48 * @return string
49 */
50 function whitespace($string) {
51 return nl2br(preg_replace('~(^| ) ~m', '\\1&nbsp;', str_replace("\t", " ", $string)));
52 }
53
9a176b0 Comments
jakubvrana authored
54 /** Escape for TD
55 * @param string
56 * @return string
57 */
c196985 Function nbsp
jakubvrana authored
58 function nbsp($string) {
59 return (strlen(trim($string)) ? h($string) : "&nbsp;");
60 }
61
6b30cfa Separate checkbox
jakubvrana authored
62 /** Generate HTML checkbox
63 * @param string
64 * @param string
65 * @param bool
66 * @param string
67 * @param string
68 * @return string
69 */
70 function checkbox($name, $value, $checked, $label = "", $onclick = "") {
c4fe12a Clickable labels in IE6
jakubvrana authored
71 static $id = 0;
72 $id++;
73 $return = "<input type='checkbox' name='$name' value='" . h($value) . "'" . ($checked ? " checked" : "") . ($onclick ? " onclick=\"$onclick\"" : "") . " id='checkbox-$id'>";
74 return (strlen($label) ? "<label for='checkbox-$id'>$return" . h($label) . "</label>" : $return);
6b30cfa Separate checkbox
jakubvrana authored
75 }
76
e40612a Use radio in export
jakubvrana authored
77 /** Generate HTML radio list
78 * @param string
79 * @param array
80 * @param string
0698409 Utilize html_select
jakubvrana authored
81 * @param string true for no onchange, false for radio
e40612a Use radio in export
jakubvrana authored
82 * @return string
83 */
0698409 Utilize html_select
jakubvrana authored
84 function html_select($name, $options, $value = "", $onchange = true) {
85 if ($onchange) {
86 return "<select name='" . h($name) . "'" . (is_string($onchange) ? " onchange=\"$onchange\"" : "") . ">" . optionlist($options, $value) . "</select>";
e40612a Use radio in export
jakubvrana authored
87 }
88 $return = "";
89 foreach ($options as $key => $val) {
90 $return .= "<label><input type='radio' name='" . h($name) . "' value='" . h($key) . "'" . ($key == $value ? " checked" : "") . ">" . h($val) . "</label>";
91 }
92 return $return;
93 }
94
9a176b0 Comments
jakubvrana authored
95 /** Generate list of HTML options
96 * @param array array of strings or arrays (creates optgroup)
97 * @param mixed
98 * @param bool always use array keys for value="", otherwise only string keys are used
99 * @return string
100 */
1e4d11e Select from foreign keys in Editor
jakubvrana authored
101 function optionlist($options, $selected = null, $use_keys = false) {
667bfec Decomposition
jakubvrana authored
102 $return = "";
103 foreach ($options as $k => $v) {
104 if (is_array($v)) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
105 $return .= '<optgroup label="' . h($k) . '">';
667bfec Decomposition
jakubvrana authored
106 }
ced9de9 Create single column foreign key in table structure
jakubvrana authored
107 foreach ((is_array($v) ? $v : array($k => $v)) as $key => $val) {
cb6d36c HTML instead of XHTML
jakubvrana authored
108 $return .= '<option' . ($use_keys || is_string($key) ? ' value="' . h($key) . '"' : '') . (($use_keys || is_string($key) ? (string) $key : $val) === $selected ? ' selected' : '') . '>' . h($val);
667bfec Decomposition
jakubvrana authored
109 }
110 if (is_array($v)) {
111 $return .= '</optgroup>';
112 }
113 }
114 return $return;
115 }
116
9a176b0 Comments
jakubvrana authored
117 /** Get list of values from database
118 * @param string
119 * @param mixed
120 * @return array
121 */
0bd864e Allow specifying column in get_vals
jakubvrana authored
122 function get_vals($query, $column = 0) {
64d616c Rename get_dbh to connection
jakubvrana authored
123 global $connection;
7769f2c Separate get_vals
jakubvrana authored
124 $return = array();
64d616c Rename get_dbh to connection
jakubvrana authored
125 $result = $connection->query($query);
49f7886 SHOW DATABASES can be revoked
jakubvrana authored
126 if ($result) {
127 while ($row = $result->fetch_row()) {
0bd864e Allow specifying column in get_vals
jakubvrana authored
128 $return[] = $row[$column];
49f7886 SHOW DATABASES can be revoked
jakubvrana authored
129 }
7769f2c Separate get_vals
jakubvrana authored
130 }
131 return $return;
132 }
133
9a176b0 Comments
jakubvrana authored
134 /** Find unique identifier of a row
135 * @param array
136 * @param array result of indexes()
137 * @return string query string
138 */
667bfec Decomposition
jakubvrana authored
139 function unique_idf($row, $indexes) {
720f5fc Restructure indexes
jakubvrana authored
140 foreach ($indexes as $index) {
141 if ($index["type"] == "PRIMARY" || $index["type"] == "UNIQUE") {
142 $return = array();
143 foreach ($index["columns"] as $key) {
64ba924 Comments
jakubvrana authored
144 if (!isset($row[$key])) { // NULL is ambiguous
720f5fc Restructure indexes
jakubvrana authored
145 continue 2;
667bfec Decomposition
jakubvrana authored
146 }
430034c Cottage homework
jakubvrana authored
147 $return[] = urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($row[$key]);
667bfec Decomposition
jakubvrana authored
148 }
720f5fc Restructure indexes
jakubvrana authored
149 return $return;
667bfec Decomposition
jakubvrana authored
150 }
151 }
152 $return = array();
153 foreach ($row as $key => $val) {
26c9d64 Fix long SQL query crash (bug #2839231)
jakubvrana authored
154 if (!preg_match('~^(COUNT\\((\\*|(DISTINCT )?`(?:[^`]|``)+`)\\)|(AVG|GROUP_CONCAT|MAX|MIN|SUM)\\(`(?:[^`]|``)+`\\))$~', $key)) { //! columns looking like functions
988a29f Don't use aggregation functions in unique_idf
jakubvrana authored
155 $return[] = (isset($val) ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));
156 }
430034c Cottage homework
jakubvrana authored
157 }
158 return $return;
159 }
160
9a176b0 Comments
jakubvrana authored
161 /** Create SQL condition from parsed query string
162 * @param array parsed query string
163 * @return string
164 */
9ea3112 Mandatory $where in where()
jakubvrana authored
165 function where($where) {
64d616c Rename get_dbh to connection
jakubvrana authored
166 global $connection;
430034c Cottage homework
jakubvrana authored
167 $return = array();
116faf2 Mass delete
jakubvrana authored
168 foreach ((array) $where["where"] as $key => $val) {
581bd35 Respect function results in where()
jakubvrana authored
169 $key = bracket_escape($key, "back");
64d616c Rename get_dbh to connection
jakubvrana authored
170 $return[] = (preg_match('~^[A-Z0-9_]+\\(`(?:[^`]|``)+`\\)$~', $key) ? $key : idf_escape($key)) . " = BINARY " . $connection->quote($val); //! enum and set, columns looking like functions
430034c Cottage homework
jakubvrana authored
171 }
116faf2 Mass delete
jakubvrana authored
172 foreach ((array) $where["null"] as $key) {
581bd35 Respect function results in where()
jakubvrana authored
173 $key = bracket_escape($key, "back");
26c9d64 Fix long SQL query crash (bug #2839231)
jakubvrana authored
174 $return[] = (preg_match('~^[A-Z0-9_]+\\(`(?:[^`]|``)+`\\)$~', $key) ? $key : idf_escape($key)) . " IS NULL";
667bfec Decomposition
jakubvrana authored
175 }
c16c57b E-mail sending
jakubvrana authored
176 return implode(" AND ", $return);
667bfec Decomposition
jakubvrana authored
177 }
178
9a176b0 Comments
jakubvrana authored
179 /** Create SQL condition from query string
180 * @param string
181 * @return string
182 */
0cd2afb Remove single item clone
jakubvrana authored
183 function where_check($val) {
184 parse_str($val, $check);
185 return where($check);
186 }
187
9a176b0 Comments
jakubvrana authored
188 /** Create query string where condition from value
189 * @param int condition order
190 * @param string column identifier
191 * @param string
192 * @return string
193 */
c42c46a Table relations
jakubvrana authored
194 function where_link($i, $column, $value) {
db46fc2 Maintain insert prefill value
jakubvrana authored
195 return "&where%5B$i%5D%5Bcol%5D=" . urlencode($column) . "&where%5B$i%5D%5Bop%5D=%3D&where%5B$i%5D%5Bval%5D=" . urlencode($value);
c42c46a Table relations
jakubvrana authored
196 }
197
319cba4 Save e-mail from to cookie
jakubvrana authored
198 /** Set cookie valid for 1 month
199 * @param string
200 * @param string
201 * @return bool
202 */
203 function cookie($name, $value) {
3675fe6 Simplify cookie expiration
jakubvrana authored
204 return setcookie($name, $value, time() + 2592000, preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"])); // 2592000 = 30 * 24 * 60 * 60
319cba4 Save e-mail from to cookie
jakubvrana authored
205 }
206
9a176b0 Comments
jakubvrana authored
207 /** Send Location header and exit
208 * @param string
209 * @param string
210 * @return null
211 */
430034c Cottage homework
jakubvrana authored
212 function redirect($location, $message = null) {
213 if (isset($message)) {
ff74bf0 Allow multiple messages
jakubvrana authored
214 $_SESSION["messages"][] = $message;
430034c Cottage homework
jakubvrana authored
215 }
216 header("Location: " . (strlen($location) ? $location : "."));
217 exit;
218 }
219
9a176b0 Comments
jakubvrana authored
220 /** Execute query and redirect if successful
221 * @param string
222 * @param string
223 * @param string
224 * @param bool
225 * @param bool
226 * @param bool
227 * @return bool
228 */
748ee83 Print SQL command with multiple queries
jakubvrana authored
229 function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false) {
64d616c Rename get_dbh to connection
jakubvrana authored
230 global $connection, $error, $adminer;
10bdbed Save queries to history
jakubvrana authored
231 $sql = "";
232 if ($query) {
c64c4fd Adminer class
jakubvrana authored
233 $sql = $adminer->messageQuery($query);
10bdbed Save queries to history
jakubvrana authored
234 }
748ee83 Print SQL command with multiple queries
jakubvrana authored
235 if ($execute) {
64d616c Rename get_dbh to connection
jakubvrana authored
236 $failed = !$connection->query($query);
748ee83 Print SQL command with multiple queries
jakubvrana authored
237 }
238 if ($failed) {
64d616c Rename get_dbh to connection
jakubvrana authored
239 $error = h($connection->error) . $sql;
c48a017 Print SQL query by error
jakubvrana authored
240 return false;
f91b2c4 Print SQL query by message
jakubvrana authored
241 }
c48a017 Print SQL query by error
jakubvrana authored
242 if ($redirect) {
243 redirect($location, $message . $sql);
244 }
245 return true;
f91b2c4 Print SQL query by message
jakubvrana authored
246 }
247
9a176b0 Comments
jakubvrana authored
248 /** Execute and remember query
249 * @param string null to return remembered queries
250 * @return Min_Result
251 */
748ee83 Print SQL command with multiple queries
jakubvrana authored
252 function queries($query = null) {
64d616c Rename get_dbh to connection
jakubvrana authored
253 global $connection;
748ee83 Print SQL command with multiple queries
jakubvrana authored
254 static $queries = array();
255 if (!isset($query)) {
64ba924 Comments
jakubvrana authored
256 // return executed queries without parameter
36950eb Tables and views
jakubvrana authored
257 return implode(";\n", $queries);
748ee83 Print SQL command with multiple queries
jakubvrana authored
258 }
259 $queries[] = $query;
64d616c Rename get_dbh to connection
jakubvrana authored
260 return $connection->query($query);
748ee83 Print SQL command with multiple queries
jakubvrana authored
261 }
262
9a176b0 Comments
jakubvrana authored
263 /** Remove parameter from query string
264 * @param string
265 * @return string
266 */
d41d446 remove_from_uri()
jakubvrana authored
267 function remove_from_uri($param = "") {
6272cae Unconditionally remove session_name() in remove_from_uri()
jakubvrana authored
268 $param = "($param|" . session_name() . ")";
d41d446 remove_from_uri()
jakubvrana authored
269 return preg_replace("~\\?$param=[^&]*&~", '?', preg_replace("~\\?$param=[^&]*\$|&$param=[^&]*~", '', $_SERVER["REQUEST_URI"]));
270 }
271
9a176b0 Comments
jakubvrana authored
272 /** Generate page number for pagination
273 * @param int
274 * @return string
275 */
c565c54 Let pagination function return
jakubvrana authored
276 function pagination($page) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
277 return " " . ($page == $_GET["page"] ? $page + 1 : '<a href="' . h(remove_from_uri("page") . ($page ? "&page=$page" : "")) . '">' . ($page + 1) . "</a>");
1456283 Pages on last page
jakubvrana authored
278 }
279
9a176b0 Comments
jakubvrana authored
280 /** Get file contents from $_FILES or $_POST["files"]
281 * @param string
282 * @param bool
283 * @return string
284 */
25f01d3 Compress export and import
jakubvrana authored
285 function get_file($key, $decompress = false) {
64ba924 Comments
jakubvrana authored
286 // returns int for error, string otherwise
25f01d3 Compress export and import
jakubvrana authored
287 $file = $_POST["files"][$key];
288 if (isset($file)) {
64ba924 Comments
jakubvrana authored
289 // get the file from hidden field if the user was logged out
25f01d3 Compress export and import
jakubvrana authored
290 $length = strlen($file);
291 if ($length && $length < 4) {
292 return intval($file);
293 }
294 return base64_decode($file);
295 }
296 $file = $_FILES[$key];
297 if (!$file || $file["error"]) {
298 return $file["error"];
430034c Cottage homework
jakubvrana authored
299 }
0a2d81d Bzip2 import
jakubvrana authored
300 return file_get_contents($decompress && ereg('\\.gz$', $file["name"]) ? "compress.zlib://$file[tmp_name]"
301 : ($decompress && ereg('\\.bz2$', $file["name"]) ? "compress.bzip2://$file[tmp_name]"
302 : $file["tmp_name"]
303 )); //! may not be reachable because of open_basedir
430034c Cottage homework
jakubvrana authored
304 }
305
9a176b0 Comments
jakubvrana authored
306 /** Determine upload error
307 * @param int
308 * @return string
309 */
e2a03c0 Show upload_max_filesize
jakubvrana authored
310 function upload_error($error) {
311 $max_size = ($error == UPLOAD_ERR_INI_SIZE ? ini_get("upload_max_filesize") : null); // post_max_size is checked in index.php
b2a7c7a Execute SQL file stored on server disk
jakubvrana authored
312 return ($error ? lang('Unable to upload a file.') . ($max_size ? " " . lang('Maximum allowed file size is %sB.', $max_size) : "") : lang('File does not exist.'));
e2a03c0 Show upload_max_filesize
jakubvrana authored
313 }
314
9a176b0 Comments
jakubvrana authored
315 /** Generate class for odd rows
316 * @param string return this for odd rows, empty to reset counter
317 * @return string
318 */
319 function odd($return = ' class="odd"') {
4e5b126 Highlight odd and hover rows
jakubvrana authored
320 static $i = 0;
9a176b0 Comments
jakubvrana authored
321 if (!$return) { // reset counter
1b97f48 Reset odd() for each result
jakubvrana authored
322 $i = -1;
4e5b126 Highlight odd and hover rows
jakubvrana authored
323 }
9a176b0 Comments
jakubvrana authored
324 return ($i++ % 2 ? $return : '');
4e5b126 Highlight odd and hover rows
jakubvrana authored
325 }
326
9a176b0 Comments
jakubvrana authored
327 /** Check whether the string is in UTF-8
328 * @param string
329 * @return bool
330 */
017ffb5 Better UTF-8 detection
jakubvrana authored
331 function is_utf8($val) {
64ba924 Comments
jakubvrana authored
332 // don't print control chars except \t\r\n
017ffb5 Better UTF-8 detection
jakubvrana authored
333 return (preg_match('~~u', $val) && !preg_match('~[\\0-\\x8\\xB\\xC\\xE-\\x1F]~', $val));
334 }
335
9a176b0 Comments
jakubvrana authored
336 /** Shorten UTF-8 string
337 * @param string
338 * @param int
339 * @param string
340 * @return string escaped string with appended ...
341 */
cd07584 Save SQL query to history
jakubvrana authored
342 function shorten_utf8($string, $length = 80, $suffix = "") {
11982f1 Shorten printed SQL query
jakubvrana authored
343 if (!preg_match("(^([\t\r\n -\x{FFFF}]{0,$length})($)?)u", $string, $match)) { // ~s causes trash in $match[2] under some PHP versions, (.|\n) is slow
344 preg_match("(^([\t\r\n -~]{0,$length})($)?)", $string, $match);
95764b0 Shorten binary strings
jakubvrana authored
345 }
11982f1 Shorten printed SQL query
jakubvrana authored
346 return h($match[1]) . $suffix . (isset($match[2]) ? "" : "<em>...</em>");
02a851c Shorten texts in PHP
jakubvrana authored
347 }
3920ebb Remove InnoDB table comment in Tables and views
jakubvrana authored
348
9a176b0 Comments
jakubvrana authored
349 /** Generate friendly URL
350 * @param string
351 * @return string
352 */
8251896 Downloaded file name
jakubvrana authored
353 function friendly_url($val) {
64ba924 Comments
jakubvrana authored
354 // used for blobs and export
8251896 Downloaded file name
jakubvrana authored
355 return preg_replace('~[^a-z0-9_]~i', '-', $val);
356 }
357
9a176b0 Comments
jakubvrana authored
358 /** Print hidden fields
359 * @param array
360 * @param array
361 * @return null
362 */
820c882 Bulk clone
jakubvrana authored
363 function hidden_fields($process, $ignore = array()) {
5d7071a Choose language through option-list
jakubvrana authored
364 while (list($key, $val) = each($process)) {
365 if (is_array($val)) {
366 foreach ($val as $k => $v) {
367 $process[$key . "[$k]"] = $v;
368 }
369 } elseif (!in_array($key, $ignore)) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
370 echo '<input type="hidden" name="' . h($key) . '" value="' . h($val) . '">';
5d7071a Choose language through option-list
jakubvrana authored
371 }
372 }
373 }
61640ee Move common functions
jakubvrana authored
374
9a176b0 Comments
jakubvrana authored
375 /** Find out foreign keys for each column
376 * @param string
377 * @return array array($col => array())
378 */
1e4d11e Select from foreign keys in Editor
jakubvrana authored
379 function column_foreign_keys($table) {
380 $return = array();
381 foreach (foreign_keys($table) as $foreign_key) {
382 foreach ($foreign_key["source"] as $val) {
383 $return[$val][] = $foreign_key;
384 }
385 }
386 return $return;
387 }
388
9a176b0 Comments
jakubvrana authored
389 /** Print edit input field
390 * @param array one field from fields()
391 * @param mixed
392 * @param string
393 * @return null
394 */
1e4d11e Select from foreign keys in Editor
jakubvrana authored
395 function input($field, $value, $function) {
c64c4fd Adminer class
jakubvrana authored
396 global $types, $adminer;
689699a Shortcut for htmlspecialchars
jakubvrana authored
397 $name = h(bracket_escape($field["field"]));
61640ee Move common functions
jakubvrana authored
398 echo "<td class='function'>";
399 if ($field["type"] == "enum") {
cb6d36c HTML instead of XHTML
jakubvrana authored
400 echo "&nbsp;<td>" . (isset($_GET["select"]) ? " <label><input type='radio' name='fields[$name]' value='-1' checked><em>" . lang('original') . "</em></label>" : "");
4cead56 Edit default values directly in table creation
jakubvrana authored
401 if ($field["null"]) {
cb6d36c HTML instead of XHTML
jakubvrana authored
402 echo " <label><input type='radio' name='fields[$name]' value=''" . (($field["null"] ? isset($value) : strlen($value)) || isset($_GET["select"]) ? '' : ' checked') . '>' . ($field["null"] ? '<em>NULL</em>' : '') . '</label>';
61640ee Move common functions
jakubvrana authored
403 }
4cead56 Edit default values directly in table creation
jakubvrana authored
404 echo "<input type='radio' name='fields[$name]' value='0'" . ($value === 0 ? ' checked' : '') . '>';
26c9d64 Fix long SQL query crash (bug #2839231)
jakubvrana authored
405 preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
61640ee Move common functions
jakubvrana authored
406 foreach ($matches[1] as $i => $val) {
407 $val = stripcslashes(str_replace("''", "'", $val));
408 $checked = (is_int($value) ? $value == $i+1 : $value === $val);
4cead56 Edit default values directly in table creation
jakubvrana authored
409 echo " <label><input type='radio' name='fields[$name]' value='" . ($i+1) . "'" . ($checked ? ' checked' : '') . '>' . h($val) . '</label>';
61640ee Move common functions
jakubvrana authored
410 }
411 } else {
9fc052b Unselect original after value input
jakubvrana authored
412 $functions = (isset($_GET["select"]) ? array("orig" => lang('original')) : array()) + $adminer->editFunctions($field);
9903946 Use original values in Editor multi edit
jakubvrana authored
413 $first = 0;
414 foreach ($functions as $key => $val) {
415 if ($key === "" || !$val) {
416 break;
417 }
418 $first++;
419 }
689699a Shortcut for htmlspecialchars
jakubvrana authored
420 $onchange = ($first ? " onchange=\"var f = this.form['function[" . addcslashes($name, "\r\n'\\") . "]']; if ($first > f.selectedIndex) f.selectedIndex = $first;\"" : "");
0698409 Utilize html_select
jakubvrana authored
421 echo (count($functions) > 1 ? html_select("function[$name]", $functions, !isset($function) || in_array($function, $functions) ? $function : "") : nbsp(reset($functions))) . '<td>';
689699a Shortcut for htmlspecialchars
jakubvrana authored
422 $input = $adminer->editInput($_GET["edit"], $field, " name='fields[$name]'$onchange", $value); // usage in call is without a table
e1abcda Treat tinyint(1) as boolean
jakubvrana authored
423 if (strlen($input)) {
424 echo $input;
1e4d11e Select from foreign keys in Editor
jakubvrana authored
425 } elseif ($field["type"] == "set") { //! 64 bits
26c9d64 Fix long SQL query crash (bug #2839231)
jakubvrana authored
426 preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
61640ee Move common functions
jakubvrana authored
427 foreach ($matches[1] as $i => $val) {
428 $val = stripcslashes(str_replace("''", "'", $val));
429 $checked = (is_int($value) ? ($value >> $i) & 1 : in_array($val, explode(",", $value), true));
4cead56 Edit default values directly in table creation
jakubvrana authored
430 echo " <label><input type='checkbox' name='fields[$name][$i]' value='" . (1 << $i) . "'" . ($checked ? ' checked' : '') . "$onchange>" . h($val) . '</label>';
61640ee Move common functions
jakubvrana authored
431 }
432 } elseif (strpos($field["type"], "text") !== false) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
433 echo "<textarea name='fields[$name]' cols='50' rows='12'$onchange>" . h($value) . '</textarea>';
5abd943 Change simple preg_match to ereg
jakubvrana authored
434 } elseif (ereg('binary|blob', $field["type"])) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
435 echo (ini_get("file_uploads") ? "<input type='file' name='$name'$onchange>" : lang('File uploads are disabled.'));
61640ee Move common functions
jakubvrana authored
436 } else {
437 // int(3) is only a display hint
438 $maxlength = (!ereg('int', $field["type"]) && preg_match('~^([0-9]+)(,([0-9]+))?$~', $field["length"], $match) ? ($match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field["unsigned"] ? 1 : 0)) : ($types[$field["type"]] ? $types[$field["type"]] + ($field["unsigned"] ? 0 : 1) : 0));
689699a Shortcut for htmlspecialchars
jakubvrana authored
439 echo "<input name='fields[$name]' value='" . h($value) . "'" . ($maxlength ? " maxlength='$maxlength'" : "") . "$onchange>";
61640ee Move common functions
jakubvrana authored
440 }
441 }
442 }
443
9a176b0 Comments
jakubvrana authored
444 /** Process edit input field
445 * @param one field from fields()
446 * @return string
447 */
a0def47 Date localization
jakubvrana authored
448 function process_input($field) {
64d616c Rename get_dbh to connection
jakubvrana authored
449 global $connection, $adminer;
a0def47 Date localization
jakubvrana authored
450 $idf = bracket_escape($field["field"]);
61640ee Move common functions
jakubvrana authored
451 $function = $_POST["function"][$idf];
452 $value = $_POST["fields"][$idf];
453 if ($field["type"] == "enum" ? $value == -1 : $function == "orig") {
454 return false;
455 } elseif ($field["type"] == "enum" || $field["auto_increment"] ? !strlen($value) : $function == "NULL") {
456 return "NULL";
457 } elseif ($field["type"] == "enum") {
4cead56 Edit default values directly in table creation
jakubvrana authored
458 return intval($value);
61640ee Move common functions
jakubvrana authored
459 } elseif ($field["type"] == "set") {
4cead56 Edit default values directly in table creation
jakubvrana authored
460 return array_sum((array) $value);
5abd943 Change simple preg_match to ereg
jakubvrana authored
461 } elseif (ereg('binary|blob', $field["type"])) {
61640ee Move common functions
jakubvrana authored
462 $file = get_file($idf);
463 if (!is_string($file)) {
464 return false; //! report errors
465 }
64d616c Rename get_dbh to connection
jakubvrana authored
466 return "_binary" . $connection->quote($file);
61640ee Move common functions
jakubvrana authored
467 } else {
a0def47 Date localization
jakubvrana authored
468 return $adminer->processInput($field, $value, $function);
61640ee Move common functions
jakubvrana authored
469 }
470 }
471
9a176b0 Comments
jakubvrana authored
472 /** Print CSV row
473 * @param array
474 * @return null
475 */
61640ee Move common functions
jakubvrana authored
476 function dump_csv($row) {
477 foreach ($row as $key => $val) {
478 if (preg_match("~[\"\n,]~", $val) || (isset($val) && !strlen($val))) {
479 $row[$key] = '"' . str_replace('"', '""', $val) . '"';
480 }
481 }
89a60e7 Use output buffering for dump compression
jakubvrana authored
482 echo implode(",", $row) . "\n";
61640ee Move common functions
jakubvrana authored
483 }
c16c57b E-mail sending
jakubvrana authored
484
9a176b0 Comments
jakubvrana authored
485 /** Apply SQL function
486 * @param string
487 * @param string escaped column identifier
488 * @return string
489 */
e331067 Move apply_sql_function
jakubvrana authored
490 function apply_sql_function($function, $column) {
491 return ($function ? ($function == "count distinct" ? "COUNT(DISTINCT " : strtoupper("$function(")) . "$column)" : $column);
492 }
493
9a176b0 Comments
jakubvrana authored
494 /** Check whether the string is e-mail address
495 * @param string
496 * @return bool
497 */
c16c57b E-mail sending
jakubvrana authored
498 function is_email($email) {
499 $atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]'; // characters of local-name
500 $domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component
501 return eregi("^$atom+(\\.$atom+)*@($domain?\\.)+$domain\$", $email);
502 }
dc667ea Hide select export and import
jakubvrana authored
503
504 /** Print header for hidden fieldset (close by </div></fieldset>)
505 * @param string
506 * @param string
507 * @param bool
508 * @return null
509 */
510 function print_fieldset($id, $legend, $visible = false) {
511 echo "<fieldset><legend><a href='#fieldset-$id' onclick=\"return !toggle('fieldset-$id');\">$legend</a></legend><div id='fieldset-$id'" . ($visible ? "" : " class='hidden'") . ">\n";
512 }
Something went wrong with that request. Please try again.