Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 289 lines (273 sloc) 13.112 kb
667bfec Decomposition
jakubvrana authored
1 <?php
79d1902 Substitute table name to $TABLE
jakubvrana authored
2 $TABLE = $_GET["select"];
3 $table_status = table_status($TABLE);
4 $indexes = indexes($TABLE);
5 $fields = fields($TABLE);
dea345c Substitute foreign keys in e-mail fields
jakubvrana authored
6 $foreign_keys = column_foreign_keys($TABLE);
7
64ba924 Comments
jakubvrana authored
8 $rights = array(); // privilege => 0
9 $columns = array(); // selectable columns
02a851c Shorten texts in PHP
jakubvrana authored
10 unset($text_length);
ffcea8b Rights
jakubvrana authored
11 foreach ($fields as $key => $field) {
c64c4fd Adminer class
jakubvrana authored
12 $name = $adminer->fieldName($field);
116c873 Ignore tables and fields with empty name
jakubvrana authored
13 if (isset($field["privileges"]["select"]) && strlen($name)) {
1e4d11e Select from foreign keys in Editor
jakubvrana authored
14 $columns[$key] = html_entity_decode(strip_tags($name));
5abd943 Change simple preg_match to ereg
jakubvrana authored
15 if (ereg('text|blob', $field["type"])) {
d24ad78 Select boxes customization
jakubvrana authored
16 $text_length = $adminer->selectLengthProcess();
16c4ddb Single faster POST query with primary key
jakubvrana authored
17 }
ffcea8b Rights
jakubvrana authored
18 }
430034c Cottage homework
jakubvrana authored
19 $rights += $field["privileges"];
20 }
21
d24ad78 Select boxes customization
jakubvrana authored
22 list($select, $group) = $adminer->selectColumnsProcess($columns, $indexes);
07e1ae1 FOUND_ROWS only with GROUP BY
jakubvrana authored
23 $where = $adminer->selectSearchProcess($fields, $indexes);
24 $order = $adminer->selectOrderProcess($fields, $indexes);
d24ad78 Select boxes customization
jakubvrana authored
25 $limit = $adminer->selectLimitProcess();
79d1902 Substitute table name to $TABLE
jakubvrana authored
26 $from = ($select ? implode(", ", $select) : "*") . " FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : "");
4c736a0 Use group by in export
jakubvrana authored
27 $group_by = ($group && count($group) < count($select) ? " GROUP BY " . implode(", ", $group) : "") . ($order ? " ORDER BY " . implode(", ", $order) : "");
116faf2 Mass delete
jakubvrana authored
28
29 if ($_POST && !$error) {
56948c9 $_POST[check] may be empty
jakubvrana authored
30 $where_check = "(" . implode(") OR (", array_map('where_check', (array) $_POST["check"])) . ")";
a3d2266 Order by first index in Editor by default
jakubvrana authored
31 $primary = ($indexes["PRIMARY"] ? ($select ? array_flip($indexes["PRIMARY"]["columns"]) : array()) : null); // empty array means that all primary fields are selected
d24ad78 Select boxes customization
jakubvrana authored
32 foreach ($select as $key => $val) {
33 $val = $_GET["columns"][$key];
34 if (!$val["fun"]) {
35 unset($primary[$val["col"]]);
36 }
37 }
78639a9 Function results in edit
jakubvrana authored
38 if ($_POST["export"]) {
79d1902 Substitute table name to $TABLE
jakubvrana authored
39 dump_headers($TABLE);
40 dump_table($TABLE, "");
e4f5d17 Dump column names in CSV select export
jakubvrana authored
41 if ($_POST["format"] != "sql") { // Editor doesn't send format
b79ef09 Don't dump backticks in CSV column names
jakubvrana authored
42 $row = array_keys($fields);
43 if ($select) {
44 $row = array();
45 foreach ($select as $val) {
46 $row[] = (ereg('^`(.*)`$', $val, $match) ? idf_unescape($match[1]) : $val); //! columns looking like functions
47 }
48 }
49 dump_csv($row);
e4f5d17 Dump column names in CSV select export
jakubvrana authored
50 }
16c4ddb Single faster POST query with primary key
jakubvrana authored
51 if (!is_array($_POST["check"]) || $primary === array()) {
79d1902 Substitute table name to $TABLE
jakubvrana authored
52 dump_data($TABLE, "INSERT", "SELECT $from" . (is_array($_POST["check"]) ? ($where ? " AND " : " WHERE ") . "($where_check)" : "") . $group_by);
16c4ddb Single faster POST query with primary key
jakubvrana authored
53 } else {
fa5c952 Use extended INSERT in select export
jakubvrana authored
54 $union = array();
f7452ad Import and export
jakubvrana authored
55 foreach ($_POST["check"] as $val) {
16c4ddb Single faster POST query with primary key
jakubvrana authored
56 // where is not unique so OR can't be used
c16c57b E-mail sending
jakubvrana authored
57 $union[] = "(SELECT $from " . ($where ? "AND " : "WHERE ") . where_check($val) . $group_by . " LIMIT 1)";
116faf2 Mass delete
jakubvrana authored
58 }
79d1902 Substitute table name to $TABLE
jakubvrana authored
59 dump_data($TABLE, "INSERT", implode(" UNION ALL ", $union));
116faf2 Mass delete
jakubvrana authored
60 }
78639a9 Function results in edit
jakubvrana authored
61 exit;
62 }
dea345c Substitute foreign keys in e-mail fields
jakubvrana authored
63 if (!$adminer->selectEmailProcess($where, $foreign_keys)) {
00d9b36 E-mail sending only in Editor
jakubvrana authored
64 if (!$_POST["import"]) { // edit
65 $result = true;
66 $affected = 0;
a705b66 Truncate requires DROP privilege since MySQL 5.1.16 and is available on ...
jakubvrana authored
67 $command = ($_POST["delete"] ? "DELETE FROM " : ($_POST["clone"] ? "INSERT INTO " : "UPDATE ")) . idf_escape($TABLE);
28b2b8d Readable variable initialization
jakubvrana authored
68 $set = array();
00d9b36 E-mail sending only in Editor
jakubvrana authored
69 if (!$_POST["delete"]) {
70 foreach ($columns as $name => $val) { //! should check also for edit or insert privileges
a0def47 Date localization
jakubvrana authored
71 $val = process_input($fields[$name]);
00d9b36 E-mail sending only in Editor
jakubvrana authored
72 if ($_POST["clone"]) {
45e0de7 Include columns list in clone
jakubvrana authored
73 $set[idf_escape($name)] = ($val !== false ? $val : idf_escape($name));
00d9b36 E-mail sending only in Editor
jakubvrana authored
74 } elseif ($val !== false) {
75 $set[] = idf_escape($name) . " = $val";
76 }
e7eb28d CSV import
jakubvrana authored
77 }
45e0de7 Include columns list in clone
jakubvrana authored
78 $command .= ($_POST["clone"] ? " (" . implode(", ", array_keys($set)) . ")\nSELECT " . implode(", ", $set) . "\nFROM " . idf_escape($TABLE) : " SET\n" . implode(",\n", $set));
e7eb28d CSV import
jakubvrana authored
79 }
00d9b36 E-mail sending only in Editor
jakubvrana authored
80 if ($_POST["delete"] || $set) {
81 if ($_POST["all"] || ($primary === array() && $_POST["check"])) {
82 $result = queries($command . ($_POST["all"] ? ($where ? "\nWHERE " . implode(" AND ", $where) : "") : "\nWHERE $where_check"));
64d616c Rename get_dbh to connection
jakubvrana authored
83 $affected = $connection->affected_rows;
00d9b36 E-mail sending only in Editor
jakubvrana authored
84 } else {
85 foreach ((array) $_POST["check"] as $val) {
86 // where is not unique so OR can't be used
988a29f Don't use aggregation functions in unique_idf
jakubvrana authored
87 $result = queries($command . "\nWHERE " . where_check($val) . (count($group) < count($select) ? "" : "\nLIMIT 1"));
00d9b36 E-mail sending only in Editor
jakubvrana authored
88 if (!$result) {
89 break;
90 }
64d616c Rename get_dbh to connection
jakubvrana authored
91 $affected += $connection->affected_rows;
38059b6 Remove empty if
jakubvrana authored
92 }
e7eb28d CSV import
jakubvrana authored
93 }
78639a9 Function results in edit
jakubvrana authored
94 }
dbdd40a Introduce queries_redirect function
jakubvrana authored
95 queries_redirect(remove_from_uri("page"), lang('%d item(s) have been affected.', $affected), $result);
00d9b36 E-mail sending only in Editor
jakubvrana authored
96 //! display edit page in case of an error
25f01d3 Compress export and import
jakubvrana authored
97 } elseif (is_string($file = get_file("csv_file", true))) {
00d9b36 E-mail sending only in Editor
jakubvrana authored
98 $file = preg_replace("~^\xEF\xBB\xBF~", '', $file); //! character set
cb370a8 Respect max_allowed_packet in CSV import
jakubvrana authored
99 $result = true;
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
100 $cols = array_keys($fields);
17a3c5b NULL and \r in CSV import
jakubvrana authored
101 preg_match_all('~("[^"]*"|[^"\\r\\n])+~', $file, $matches);
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
102 $affected = count($matches[0]);
96ee5db Import CSV in transaction
jakubvrana authored
103 queries("START TRANSACTION");
00d9b36 E-mail sending only in Editor
jakubvrana authored
104 foreach ($matches[0] as $key => $val) {
cb370a8 Respect max_allowed_packet in CSV import
jakubvrana authored
105 preg_match_all('~(("[^"]*")+|[^,]*),~', "$val,", $matches2);
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
106 if (!$key && !array_diff($matches2[1], $cols)) { //! doesn't work with column names containing ",\n
00d9b36 E-mail sending only in Editor
jakubvrana authored
107 // first row corresponds to column names - use it for table structure
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
108 $cols = $matches2[1];
109 $affected--;
00d9b36 E-mail sending only in Editor
jakubvrana authored
110 } else {
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
111 $set = "";
112 foreach ($matches2[1] as $i => $col) {
64d616c Rename get_dbh to connection
jakubvrana authored
113 $set .= ", " . idf_escape($cols[$i]) . " = " . (!strlen($col) && $fields[$cols[$i]]["null"] ? "NULL" : $connection->quote(str_replace('""', '"', preg_replace('~^"|"$~', '', $col))));
00d9b36 E-mail sending only in Editor
jakubvrana authored
114 }
2c76578 Reduce size
jakubvrana authored
115 $set = substr($set, 1);
116 $result = queries("INSERT INTO " . idf_escape($_GET["select"]) . " SET$set ON DUPLICATE KEY UPDATE$set");
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
117 if (!$result) {
118 break;
cb370a8 Respect max_allowed_packet in CSV import
jakubvrana authored
119 }
120 }
121 }
96ee5db Import CSV in transaction
jakubvrana authored
122 queries("COMMIT");
dbdd40a Introduce queries_redirect function
jakubvrana authored
123 queries_redirect(remove_from_uri("page"), lang('%d row(s) have been imported.', $affected), $result);
00d9b36 E-mail sending only in Editor
jakubvrana authored
124 } else {
125 $error = upload_error($file);
d83b654 Detect import errors
jakubvrana authored
126 }
ec23248 Exportable select
jakubvrana authored
127 }
116faf2 Mass delete
jakubvrana authored
128 }
c16c57b E-mail sending
jakubvrana authored
129
b9ffd64 Remove common prefix in backward key
jakubvrana authored
130 $table_name = $adminer->tableName($table_status);
131 page_header(lang('Select') . ": $table_name", $error);
116faf2 Mass delete
jakubvrana authored
132
f2ed237 Display table links above table structure
jakubvrana authored
133 $set = null;
430034c Cottage homework
jakubvrana authored
134 if (isset($rights["insert"])) {
98507da Function verify_version doesn't use version parameter
jakubvrana authored
135 $set = "";
136 foreach ((array) $_GET["where"] as $val) {
137 if (count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "="
a1609c7 Align numbers to right in select
jakubvrana authored
138 || (!$val["op"] && !ereg('[_%]', $val["val"])) // LIKE in Editor
98507da Function verify_version doesn't use version parameter
jakubvrana authored
139 )) {
140 $set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]);
141 }
142 }
667bfec Decomposition
jakubvrana authored
143 }
f2ed237 Display table links above table structure
jakubvrana authored
144 $adminer->selectLinks($table_status, $set);
667bfec Decomposition
jakubvrana authored
145
ffcea8b Rights
jakubvrana authored
146 if (!$columns) {
c1130ed Simplify SQL syntax errors everywhere
jakubvrana authored
147 echo "<p class='error'>" . lang('Unable to select the table') . ($fields ? "" : ": " . error()) . ".\n";
ffcea8b Rights
jakubvrana authored
148 } else {
5ee29cb Select columns, aggregation
jakubvrana authored
149 echo "<form action='' id='form'>\n";
d24ad78 Select boxes customization
jakubvrana authored
150 echo "<div style='display: none;'>";
689699a Shortcut for htmlspecialchars
jakubvrana authored
151 echo (strlen($_GET["server"]) ? '<input type="hidden" name="server" value="' . h($_GET["server"]) . '">' : "");
3022dcb Define DB
jakubvrana authored
152 echo (strlen(DB) ? '<input type="hidden" name="db" value="' . h(DB) . '">' : ""); // not used in Editor
79d1902 Substitute table name to $TABLE
jakubvrana authored
153 echo '<input type="hidden" name="select" value="' . h($TABLE) . '">';
d24ad78 Select boxes customization
jakubvrana authored
154 echo "</div>\n";
155 $adminer->selectColumnsPrint($select, $columns);
156 $adminer->selectSearchPrint($where, $columns, $indexes);
157 $adminer->selectOrderPrint($order, $columns, $indexes);
158 $adminer->selectLimitPrint($limit);
159 $adminer->selectLengthPrint($text_length);
160 $adminer->selectActionPrint($text_length);
ffcea8b Rights
jakubvrana authored
161 echo "</form>\n";
162
ddb0a34 Remove intval
jakubvrana authored
163 $query = "SELECT " . (intval($limit) && $group && count($group) < count($select) ? "SQL_CALC_FOUND_ROWS " : "") . $from . $group_by . (strlen($limit) ? " LIMIT " . intval($limit) . ($_GET["page"] ? " OFFSET " . ($limit * $_GET["page"]) : "") : "");
c64c4fd Adminer class
jakubvrana authored
164 echo $adminer->selectQuery($query);
8b74511 Print SQL query (fixes #2082448)
jakubvrana authored
165
64d616c Rename get_dbh to connection
jakubvrana authored
166 $result = $connection->query($query);
21ea4ae Check errors
jakubvrana authored
167 if (!$result) {
c1130ed Simplify SQL syntax errors everywhere
jakubvrana authored
168 echo "<p class='error'>" . error() . "\n";
ffcea8b Rights
jakubvrana authored
169 } else {
f2365d0 Typo
jakubvrana authored
170 $email_fields = array();
e7eb28d CSV import
jakubvrana authored
171 echo "<form action='' method='post' enctype='multipart/form-data'>\n";
21ea4ae Check errors
jakubvrana authored
172 if (!$result->num_rows) {
ace55ed HTML instead of XHTML
jakubvrana authored
173 echo "<p class='message'>" . lang('No rows.') . "\n";
21ea4ae Check errors
jakubvrana authored
174 } else {
ba90d60 Introduce adminer_select_val
jakubvrana authored
175 $rows = array();
176 while ($row = $result->fetch_assoc()) {
177 $rows[] = $row;
178 }
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
179 // use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)
07e1ae1 FOUND_ROWS only with GROUP BY
jakubvrana authored
180 $found_rows = (intval($limit) && $group && count($group) < count($select)
64d616c Rename get_dbh to connection
jakubvrana authored
181 ? $connection->result($connection->query(" SELECT FOUND_ROWS()")) // space to allow mysql.trace_mode
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
182 : count($rows)
183 );
ba90d60 Introduce adminer_select_val
jakubvrana authored
184
09e93de Move backward keys to Editor
jakubvrana authored
185 $backward_keys = $adminer->backwardKeys($TABLE, $table_name);
c42c46a Table relations
jakubvrana authored
186
3c5c0f0 Use camelCase in JavaScript
jakubvrana authored
187 echo "<table cellspacing='0' class='nowrap' onclick='tableClick(event);'>\n";
188 echo "<thead><tr><td><input type='checkbox' id='all-page' onclick='formCheck(this, /check/);'>";
5034123 Apply field name with functions
jakubvrana authored
189 $names = array();
190 reset($select);
23df820 Distinguish no column order in fieldName
jakubvrana authored
191 $order = 1;
ba90d60 Introduce adminer_select_val
jakubvrana authored
192 foreach ($rows[0] as $key => $val) {
5034123 Apply field name with functions
jakubvrana authored
193 $val = $_GET["columns"][key($select)];
ba9c9a5 Display SQL function with braces in select heading
jakubvrana authored
194 $field = $fields[$select ? $val["col"] : $key];
6c97b80 Display only first five columns in Editor example
jakubvrana authored
195 $name = ($field ? $adminer->fieldName($field, $order) : "*");
116c873 Ignore tables and fields with empty name
jakubvrana authored
196 if (strlen($name)) {
6c97b80 Display only first five columns in Editor example
jakubvrana authored
197 $order++;
5034123 Apply field name with functions
jakubvrana authored
198 $names[$key] = $name;
381c053 Add DESC to column click if equal to first column in order
jakubvrana authored
199 echo '<th><a href="' . h(remove_from_uri('(order|desc)[^=]*') . '&order%5B0%5D=' . urlencode($key) . ($_GET["order"][0] == $key && !$_GET["desc"][0] ? '&desc%5B0%5D=1' : '')) . '">' . apply_sql_function($val["fun"], $name) . "</a>"; //! columns looking like functions
116c873 Ignore tables and fields with empty name
jakubvrana authored
200 }
5034123 Apply field name with functions
jakubvrana authored
201 next($select);
ba90d60 Introduce adminer_select_val
jakubvrana authored
202 }
09e93de Move backward keys to Editor
jakubvrana authored
203 echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n";
dea345c Substitute foreign keys in e-mail fields
jakubvrana authored
204 foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) {
6b30cfa Separate checkbox
jakubvrana authored
205 $unique_idf = implode('&', unique_idf($rows[$n], $indexes));
3c5c0f0 Use camelCase in JavaScript
jakubvrana authored
206 echo "<tr" . odd() . "><td>" . checkbox("check[]", $unique_idf, in_array($unique_idf, (array) $_POST["check"]), "", "this.form['all'].checked = false; formUncheck('all-page');") . (count($select) != count($group) || information_schema(DB) ? '' : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . "&$unique_idf") . "'>" . lang('edit') . "</a>");
21ea4ae Check errors
jakubvrana authored
207 foreach ($row as $key => $val) {
78e49f0 Pass $field to select_val
jakubvrana authored
208 if (isset($names[$key])) {
a1609c7 Align numbers to right in select
jakubvrana authored
209 $field = $fields[$key];
d6e3fc7 Link e-mails
jakubvrana authored
210 if (strlen($val) && (!isset($email_fields[$key]) || strlen($email_fields[$key]))) {
5034123 Apply field name with functions
jakubvrana authored
211 $email_fields[$key] = (is_email($val) ? $names[$key] : ""); //! filled e-mails may be contained on other pages
116c873 Ignore tables and fields with empty name
jakubvrana authored
212 }
5911cf1 Always call select_val
jakubvrana authored
213 $link = "";
a1609c7 Align numbers to right in select
jakubvrana authored
214 $val = $adminer->editVal($val, $field);
116c873 Ignore tables and fields with empty name
jakubvrana authored
215 if (!isset($val)) {
216 $val = "<i>NULL</i>";
21ea4ae Check errors
jakubvrana authored
217 } else {
a1609c7 Align numbers to right in select
jakubvrana authored
218 if (ereg('blob|binary', $field["type"]) && strlen($val)) {
6b30cfa Separate checkbox
jakubvrana authored
219 $link = h(ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . "&$unique_idf");
97b8c7b Display images in Editor
jakubvrana authored
220 }
24801a0 Display whitespace in texts (bug #2858042)
jakubvrana authored
221 if (!strlen($val)) {
116c873 Ignore tables and fields with empty name
jakubvrana authored
222 $val = "&nbsp;";
a1609c7 Align numbers to right in select
jakubvrana authored
223 } elseif (strlen($text_length) && ereg('text|blob', $field["type"]) && is_utf8($val)) {
50881f8 Move whitespace to CSS
jakubvrana authored
224 $val = shorten_utf8($val, max(0, intval($text_length))); // usage of LEFT() would reduce traffic but complicate query
116c873 Ignore tables and fields with empty name
jakubvrana authored
225 } else {
50881f8 Move whitespace to CSS
jakubvrana authored
226 $val = h($val);
21ea4ae Check errors
jakubvrana authored
227 }
116c873 Ignore tables and fields with empty name
jakubvrana authored
228
db46fc2 Maintain insert prefill value
jakubvrana authored
229 if (!$link) { // link related items
230 foreach ((array) $foreign_keys[$key] as $foreign_key) {
231 if (count($foreign_keys[$key]) == 1 || count($foreign_key["source"]) == 1) {
232 foreach ($foreign_key["source"] as $i => $source) {
233 $link .= where_link($i, $foreign_key["target"][$i], $rows[$n][$source]);
234 }
235 $link = h((strlen($foreign_key["db"]) ? preg_replace('~([?&]db=)[^&]+~', '\\1' . urlencode($foreign_key["db"]), ME) : ME) . 'select=' . urlencode($foreign_key["table"]) . $link); // InnoDB supports non-UNIQUE keys
236 break;
116c873 Ignore tables and fields with empty name
jakubvrana authored
237 }
21ea4ae Check errors
jakubvrana authored
238 }
ffcea8b Rights
jakubvrana authored
239 }
fa3dd55 Parent
jakubvrana authored
240 }
d6e3fc7 Link e-mails
jakubvrana authored
241 if (!$link && is_email($val)) {
242 $link = "mailto:$val";
243 }
ecb56e6 Link unescaped URL
jakubvrana authored
244 if (!$link && is_url($row[$key])) {
245 $link = "http://www.adminer.org/redirect/?url=" . urlencode($row[$key]); // intermediate page to hide Referer
bc78866 Link URLs in select
jakubvrana authored
246 }
a1609c7 Align numbers to right in select
jakubvrana authored
247 $val = $adminer->selectVal($val, $link, $field);
116c873 Ignore tables and fields with empty name
jakubvrana authored
248 echo "<td>$val";
667bfec Decomposition
jakubvrana authored
249 }
250 }
09e93de Move backward keys to Editor
jakubvrana authored
251 $adminer->backwardKeysPrint($backward_keys, $rows[$n]);
26e8ab9 Close </tr> because of white-space: pre
jakubvrana authored
252 echo "</tr>\n"; // close to allow white-space: pre
5ab708a Compact pages
jakubvrana authored
253 }
21ea4ae Check errors
jakubvrana authored
254 echo "</table>\n";
e4b188c Display found rows
jakubvrana authored
255
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
256 if (intval($limit) && count($group) >= count($select)) {
257 // slow with big tables
258 ob_flush();
259 flush();
64d616c Rename get_dbh to connection
jakubvrana authored
260 $found_rows = $connection->result($connection->query("SELECT COUNT(*) FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : "")));
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
261 }
fde1171 Add CSS classes (thanks to cvicebni ubor)
jakubvrana authored
262 echo "<p class='pages'>";
e4b188c Display found rows
jakubvrana authored
263 if (intval($limit) && $found_rows > $limit) {
64ba924 Comments
jakubvrana authored
264 // display first, previous 3, next 3 and last page
21ea4ae Check errors
jakubvrana authored
265 $max_page = floor(($found_rows - 1) / $limit);
c565c54 Let pagination function return
jakubvrana authored
266 echo lang('Page') . ":" . pagination(0) . ($_GET["page"] > 3 ? " ..." : "");
21ea4ae Check errors
jakubvrana authored
267 for ($i = max(1, $_GET["page"] - 2); $i < min($max_page, $_GET["page"] + 3); $i++) {
c565c54 Let pagination function return
jakubvrana authored
268 echo pagination($i);
21ea4ae Check errors
jakubvrana authored
269 }
c565c54 Let pagination function return
jakubvrana authored
270 echo ($_GET["page"] + 3 < $max_page ? " ..." : "") . pagination($max_page);
5ab708a Compact pages
jakubvrana authored
271 }
6b30cfa Separate checkbox
jakubvrana authored
272 echo " (" . lang('%d row(s)', $found_rows) . ") " . checkbox("all", 1, 0, lang('whole result')) . "\n";
8b74511 Print SQL query (fixes #2082448)
jakubvrana authored
273
3c5c0f0 Use camelCase in JavaScript
jakubvrana authored
274 echo (information_schema(DB) ? "" : "<fieldset><legend>" . lang('Edit') . "</legend><div><input type='submit' name='edit' value='" . lang('Edit') . "'> <input type='submit' name='clone' value='" . lang('Clone') . "'> <input type='submit' name='delete' value='" . lang('Delete') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + (this.form['all'].checked ? $found_rows : formChecked(this, /check/)) + ')');\"></div></fieldset>\n");
dc667ea Hide select export and import
jakubvrana authored
275 print_fieldset("export", lang('Export'));
e40612a Use radio in export
jakubvrana authored
276 echo $adminer->dumpOutput(1) . " " . $adminer->dumpFormat(1); // 1 - select
277 echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
dc667ea Hide select export and import
jakubvrana authored
278 echo "</div></fieldset>\n";
667bfec Decomposition
jakubvrana authored
279 }
dc667ea Hide select export and import
jakubvrana authored
280 print_fieldset("import", lang('CSV Import'), !$result->num_rows);
281 echo "<input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> <input type='submit' name='import' value='" . lang('Import') . "'>\n";
282 echo "</div></fieldset>\n";
c16c57b E-mail sending
jakubvrana authored
283
1e55d47 User interface for e-mail {$name}
jakubvrana authored
284 $adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns);
c16c57b E-mail sending
jakubvrana authored
285
e7eb28d CSV import
jakubvrana authored
286 echo "</form>\n";
667bfec Decomposition
jakubvrana authored
287 }
288 }
Something went wrong with that request. Please try again.