Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 297 lines (281 sloc) 13.414 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
42 dump_csv($select ? $select : array_keys($fields));
43 }
16c4ddb Single faster POST query with primary key
jakubvrana authored
44 if (!is_array($_POST["check"]) || $primary === array()) {
79d1902 Substitute table name to $TABLE
jakubvrana authored
45 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
46 } else {
fa5c952 Use extended INSERT in select export
jakubvrana authored
47 $union = array();
f7452ad Import and export
jakubvrana authored
48 foreach ($_POST["check"] as $val) {
16c4ddb Single faster POST query with primary key
jakubvrana authored
49 // where is not unique so OR can't be used
c16c57b E-mail sending
jakubvrana authored
50 $union[] = "(SELECT $from " . ($where ? "AND " : "WHERE ") . where_check($val) . $group_by . " LIMIT 1)";
116faf2 Mass delete
jakubvrana authored
51 }
79d1902 Substitute table name to $TABLE
jakubvrana authored
52 dump_data($TABLE, "INSERT", implode(" UNION ALL ", $union));
116faf2 Mass delete
jakubvrana authored
53 }
702e949 Bzip2 compression
jakubvrana authored
54 dump();
78639a9 Function results in edit
jakubvrana authored
55 exit;
56 }
dea345c Substitute foreign keys in e-mail fields
jakubvrana authored
57 if (!$adminer->selectEmailProcess($where, $foreign_keys)) {
00d9b36 E-mail sending only in Editor
jakubvrana authored
58 if (!$_POST["import"]) { // edit
59 $result = true;
60 $affected = 0;
79d1902 Substitute table name to $TABLE
jakubvrana authored
61 $command = ($_POST["delete"] ? ($_POST["all"] && !$where ? "TRUNCATE " : "DELETE FROM ") : ($_POST["clone"] ? "INSERT INTO " : "UPDATE ")) . idf_escape($TABLE);
28b2b8d Readable variable initialization
jakubvrana authored
62 $set = array();
00d9b36 E-mail sending only in Editor
jakubvrana authored
63 if (!$_POST["delete"]) {
64 foreach ($columns as $name => $val) { //! should check also for edit or insert privileges
a0def47 Date localization
jakubvrana authored
65 $val = process_input($fields[$name]);
00d9b36 E-mail sending only in Editor
jakubvrana authored
66 if ($_POST["clone"]) {
45e0de7 Include columns list in clone
jakubvrana authored
67 $set[idf_escape($name)] = ($val !== false ? $val : idf_escape($name));
00d9b36 E-mail sending only in Editor
jakubvrana authored
68 } elseif ($val !== false) {
69 $set[] = idf_escape($name) . " = $val";
70 }
e7eb28d CSV import
jakubvrana authored
71 }
45e0de7 Include columns list in clone
jakubvrana authored
72 $command .= ($_POST["clone"] ? " (" . implode(", ", array_keys($set)) . ")\nSELECT " . implode(", ", $set) . "\nFROM " . idf_escape($TABLE) : " SET\n" . implode(",\n", $set));
e7eb28d CSV import
jakubvrana authored
73 }
00d9b36 E-mail sending only in Editor
jakubvrana authored
74 if ($_POST["delete"] || $set) {
75 if ($_POST["all"] || ($primary === array() && $_POST["check"])) {
76 $result = queries($command . ($_POST["all"] ? ($where ? "\nWHERE " . implode(" AND ", $where) : "") : "\nWHERE $where_check"));
64d616c Rename get_dbh to connection
jakubvrana authored
77 $affected = $connection->affected_rows;
00d9b36 E-mail sending only in Editor
jakubvrana authored
78 } else {
79 foreach ((array) $_POST["check"] as $val) {
80 // where is not unique so OR can't be used
988a29f Don't use aggregation functions in unique_idf
jakubvrana authored
81 $result = queries($command . "\nWHERE " . where_check($val) . (count($group) < count($select) ? "" : "\nLIMIT 1"));
00d9b36 E-mail sending only in Editor
jakubvrana authored
82 if (!$result) {
83 break;
84 }
64d616c Rename get_dbh to connection
jakubvrana authored
85 $affected += $connection->affected_rows;
38059b6 Remove empty if
jakubvrana authored
86 }
e7eb28d CSV import
jakubvrana authored
87 }
78639a9 Function results in edit
jakubvrana authored
88 }
00d9b36 E-mail sending only in Editor
jakubvrana authored
89 query_redirect(queries(), remove_from_uri("page"), lang('%d item(s) have been affected.', $affected), $result, false, !$result);
90 //! display edit page in case of an error
25f01d3 Compress export and import
jakubvrana authored
91 } elseif (is_string($file = get_file("csv_file", true))) {
00d9b36 E-mail sending only in Editor
jakubvrana authored
92 $file = preg_replace("~^\xEF\xBB\xBF~", '', $file); //! character set
cb370a8 Respect max_allowed_packet in CSV import
jakubvrana authored
93 $result = true;
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
94 $cols = array_keys($fields);
17a3c5b NULL and \r in CSV import
jakubvrana authored
95 preg_match_all('~("[^"]*"|[^"\\r\\n])+~', $file, $matches);
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
96 $affected = count($matches[0]);
00d9b36 E-mail sending only in Editor
jakubvrana authored
97 foreach ($matches[0] as $key => $val) {
cb370a8 Respect max_allowed_packet in CSV import
jakubvrana authored
98 preg_match_all('~(("[^"]*")+|[^,]*),~', "$val,", $matches2);
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
99 if (!$key && !array_diff($matches2[1], $cols)) { //! doesn't work with column names containing ",\n
00d9b36 E-mail sending only in Editor
jakubvrana authored
100 // first row corresponds to column names - use it for table structure
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
101 $cols = $matches2[1];
102 $affected--;
00d9b36 E-mail sending only in Editor
jakubvrana authored
103 } else {
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
104 $set = "";
105 foreach ($matches2[1] as $i => $col) {
64d616c Rename get_dbh to connection
jakubvrana authored
106 $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
107 }
2c76578 Reduce size
jakubvrana authored
108 $set = substr($set, 1);
109 $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
110 if (!$result) {
111 break;
cb370a8 Respect max_allowed_packet in CSV import
jakubvrana authored
112 }
113 }
114 }
115 query_redirect(queries(), remove_from_uri("page"), lang('%d row(s) have been imported.', $affected), $result, false, !$result);
00d9b36 E-mail sending only in Editor
jakubvrana authored
116 } else {
117 $error = upload_error($file);
d83b654 Detect import errors
jakubvrana authored
118 }
ec23248 Exportable select
jakubvrana authored
119 }
116faf2 Mass delete
jakubvrana authored
120 }
c16c57b E-mail sending
jakubvrana authored
121
b9ffd64 Remove common prefix in backward key
jakubvrana authored
122 $table_name = $adminer->tableName($table_status);
123 page_header(lang('Select') . ": $table_name", $error);
116faf2 Mass delete
jakubvrana authored
124
f2ed237 Display table links above table structure
jakubvrana authored
125 $set = null;
430034c Cottage homework
jakubvrana authored
126 if (isset($rights["insert"])) {
98507da Function verify_version doesn't use version parameter
jakubvrana authored
127 $set = "";
128 foreach ((array) $_GET["where"] as $val) {
129 if (count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "="
130 || ($val["op"] == "" && !ereg('[_%]', $val["val"])) // LIKE in Editor
131 )) {
132 $set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]);
133 }
134 }
667bfec Decomposition
jakubvrana authored
135 }
f2ed237 Display table links above table structure
jakubvrana authored
136 $adminer->selectLinks($table_status, $set);
667bfec Decomposition
jakubvrana authored
137
ffcea8b Rights
jakubvrana authored
138 if (!$columns) {
64d616c Rename get_dbh to connection
jakubvrana authored
139 echo "<p class='error'>" . lang('Unable to select the table') . ($fields ? "" : ": " . h($connection->error)) . ".\n";
ffcea8b Rights
jakubvrana authored
140 } else {
5ee29cb Select columns, aggregation
jakubvrana authored
141 echo "<form action='' id='form'>\n";
d24ad78 Select boxes customization
jakubvrana authored
142 echo "<div style='display: none;'>";
689699a Shortcut for htmlspecialchars
jakubvrana authored
143 echo (strlen($_GET["server"]) ? '<input type="hidden" name="server" value="' . h($_GET["server"]) . '">' : "");
3022dcb Define DB
jakubvrana authored
144 echo (strlen(DB) ? '<input type="hidden" name="db" value="' . h(DB) . '">' : ""); // not used in Editor
79d1902 Substitute table name to $TABLE
jakubvrana authored
145 echo '<input type="hidden" name="select" value="' . h($TABLE) . '">';
d24ad78 Select boxes customization
jakubvrana authored
146 echo "</div>\n";
147 $adminer->selectColumnsPrint($select, $columns);
148 $adminer->selectSearchPrint($where, $columns, $indexes);
149 $adminer->selectOrderPrint($order, $columns, $indexes);
150 $adminer->selectLimitPrint($limit);
151 $adminer->selectLengthPrint($text_length);
152 $adminer->selectActionPrint($text_length);
ffcea8b Rights
jakubvrana authored
153 echo "</form>\n";
154
07e1ae1 FOUND_ROWS only with GROUP BY
jakubvrana authored
155 $query = "SELECT " . (intval($limit) && $group && count($group) < count($select) ? "SQL_CALC_FOUND_ROWS " : "") . $from . $group_by . (strlen($limit) ? " LIMIT " . intval($limit) . (intval($_GET["page"]) ? " OFFSET " . ($limit * $_GET["page"]) : "") : "");
c64c4fd Adminer class
jakubvrana authored
156 echo $adminer->selectQuery($query);
8b74511 Print SQL query (fixes #2082448)
jakubvrana authored
157
64d616c Rename get_dbh to connection
jakubvrana authored
158 $result = $connection->query($query);
21ea4ae Check errors
jakubvrana authored
159 if (!$result) {
64d616c Rename get_dbh to connection
jakubvrana authored
160 echo "<p class='error'>" . h($connection->error) . "\n";
ffcea8b Rights
jakubvrana authored
161 } else {
f2365d0 Typo
jakubvrana authored
162 $email_fields = array();
e7eb28d CSV import
jakubvrana authored
163 echo "<form action='' method='post' enctype='multipart/form-data'>\n";
21ea4ae Check errors
jakubvrana authored
164 if (!$result->num_rows) {
ace55ed HTML instead of XHTML
jakubvrana authored
165 echo "<p class='message'>" . lang('No rows.') . "\n";
21ea4ae Check errors
jakubvrana authored
166 } else {
ba90d60 Introduce adminer_select_val
jakubvrana authored
167 $rows = array();
168 while ($row = $result->fetch_assoc()) {
169 $rows[] = $row;
170 }
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
171 // use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)
07e1ae1 FOUND_ROWS only with GROUP BY
jakubvrana authored
172 $found_rows = (intval($limit) && $group && count($group) < count($select)
64d616c Rename get_dbh to connection
jakubvrana authored
173 ? $connection->result($connection->query(" SELECT FOUND_ROWS()")) // space to allow mysql.trace_mode
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
174 : count($rows)
175 );
ba90d60 Introduce adminer_select_val
jakubvrana authored
176
79d1902 Substitute table name to $TABLE
jakubvrana authored
177 $backward_keys = $adminer->backwardKeys($TABLE);
dc4fcf4 PHP 4 compatibility
jakubvrana authored
178 $table_names = array();
179 if ($backward_keys) {
180 foreach ($backward_keys as $key => $val) {
181 $val = $adminer->tableName(table_status($key));
182 if (strlen($val)) {
b9ffd64 Remove common prefix in backward key
jakubvrana authored
183 $table_names[$key] = (preg_match('(^' . preg_quote($table_name) . '(:|\\s*-)?\\s+(.+))', $val, $match) ? $match[2] : $val);
dc4fcf4 PHP 4 compatibility
jakubvrana authored
184 }
185 }
336f521 Get table names of backward keys only once
jakubvrana authored
186 }
c42c46a Table relations
jakubvrana authored
187
bcff025 Click on row selects it (fixes #2844098)
jakubvrana authored
188 echo "<table cellspacing='0' class='nowrap' onclick='table_click(event);'>\n";
ba90d60 Introduce adminer_select_val
jakubvrana authored
189 echo "<thead><tr><td><input type='checkbox' id='all-page' onclick='form_check(this, /check/);'>";
5034123 Apply field name with functions
jakubvrana authored
190 $names = array();
191 reset($select);
23df820 Distinguish no column order in fieldName
jakubvrana authored
192 $order = 1;
ba90d60 Introduce adminer_select_val
jakubvrana authored
193 foreach ($rows[0] as $key => $val) {
5034123 Apply field name with functions
jakubvrana authored
194 $val = $_GET["columns"][key($select)];
ba9c9a5 Display SQL function with braces in select heading
jakubvrana authored
195 $field = $fields[$select ? $val["col"] : $key];
6c97b80 Display only first five columns in Editor example
jakubvrana authored
196 $name = ($field ? $adminer->fieldName($field, $order) : "*");
116c873 Ignore tables and fields with empty name
jakubvrana authored
197 if (strlen($name)) {
6c97b80 Display only first five columns in Editor example
jakubvrana authored
198 $order++;
5034123 Apply field name with functions
jakubvrana authored
199 $names[$key] = $name;
689699a Shortcut for htmlspecialchars
jakubvrana authored
200 echo '<th><a href="' . h(remove_from_uri('(order|desc)[^=]*') . '&order%5B0%5D=' . urlencode($key) . ($_GET["order"] == array($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
201 }
5034123 Apply field name with functions
jakubvrana authored
202 next($select);
ba90d60 Introduce adminer_select_val
jakubvrana authored
203 }
8f525c4 Hide empty table names in Relations
jakubvrana authored
204 echo ($table_names ? "<th>" . lang('Relations') : "") . "</thead>\n";
dea345c Substitute foreign keys in e-mail fields
jakubvrana authored
205 foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) {
988a29f Don't use aggregation functions in unique_idf
jakubvrana authored
206 $unique_idf = implode('&amp;', unique_idf($rows[$n], $indexes));
81f91c0 Check previously checked rows
jakubvrana authored
207 echo "<tr" . odd() . "><td><input type='checkbox' name='check[]' value='$unique_idf'" . (in_array(str_replace("&amp;", "&", $unique_idf), (array) $_POST["check"]) ? " checked" : "") . " onclick=\"this.form['all'].checked = false; form_uncheck('all-page');\">" . (count($select) != count($group) || information_schema(DB) ? '' : " <a href='" . h(ME) . "edit=" . urlencode($TABLE) . "&amp;$unique_idf'>" . lang('edit') . "</a>");
21ea4ae Check errors
jakubvrana authored
208 foreach ($row as $key => $val) {
78e49f0 Pass $field to select_val
jakubvrana authored
209 if (isset($names[$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 = "";
a0def47 Date localization
jakubvrana authored
214 $val = $adminer->editVal($val, $fields[$key]);
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 {
97b8c7b Display images in Editor
jakubvrana authored
218 if (ereg('blob|binary', $fields[$key]["type"]) && strlen($val)) {
79d1902 Substitute table name to $TABLE
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;";
97b8c7b Display images in Editor
jakubvrana authored
223 } elseif (strlen($text_length) && ereg('blob|text', $fields[$key]["type"]) && is_utf8($val)) {
24801a0 Display whitespace in texts (bug #2858042)
jakubvrana authored
224 $val = whitespace(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 {
24801a0 Display whitespace in texts (bug #2858042)
jakubvrana authored
226 $val = whitespace(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 }
c64c4fd Adminer class
jakubvrana authored
244 $val = $adminer->selectVal($val, $link, $fields[$key]);
116c873 Ignore tables and fields with empty name
jakubvrana authored
245 echo "<td>$val";
667bfec Decomposition
jakubvrana authored
246 }
247 }
8f525c4 Hide empty table names in Relations
jakubvrana authored
248 if ($table_names) {
c42c46a Table relations
jakubvrana authored
249 echo "<td>";
8f525c4 Hide empty table names in Relations
jakubvrana authored
250 foreach ($table_names as $table => $name) {
d4e7cda Overwritten variable
jakubvrana authored
251 foreach ($backward_keys[$table] as $cols) {
db46fc2 Maintain insert prefill value
jakubvrana authored
252 $link = ME . 'select=' . urlencode($table);
c42c46a Table relations
jakubvrana authored
253 $i = 0;
d4e7cda Overwritten variable
jakubvrana authored
254 foreach ($cols as $column => $val) {
db46fc2 Maintain insert prefill value
jakubvrana authored
255 $link .= where_link($i++, $column, $rows[$n][$val]);
c42c46a Table relations
jakubvrana authored
256 }
db46fc2 Maintain insert prefill value
jakubvrana authored
257 echo " <a href='" . h($link) . "'>$name</a>";
c42c46a Table relations
jakubvrana authored
258 }
259 }
260 }
ba90d60 Introduce adminer_select_val
jakubvrana authored
261 echo "\n";
5ab708a Compact pages
jakubvrana authored
262 }
21ea4ae Check errors
jakubvrana authored
263 echo "</table>\n";
e4b188c Display found rows
jakubvrana authored
264
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
265 if (intval($limit) && count($group) >= count($select)) {
266 // slow with big tables
267 ob_flush();
268 flush();
64d616c Rename get_dbh to connection
jakubvrana authored
269 $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
270 }
e4b188c Display found rows
jakubvrana authored
271 echo "<p>";
272 if (intval($limit) && $found_rows > $limit) {
64ba924 Comments
jakubvrana authored
273 // display first, previous 3, next 3 and last page
21ea4ae Check errors
jakubvrana authored
274 $max_page = floor(($found_rows - 1) / $limit);
c565c54 Let pagination function return
jakubvrana authored
275 echo lang('Page') . ":" . pagination(0) . ($_GET["page"] > 3 ? " ..." : "");
21ea4ae Check errors
jakubvrana authored
276 for ($i = max(1, $_GET["page"] - 2); $i < min($max_page, $_GET["page"] + 3); $i++) {
c565c54 Let pagination function return
jakubvrana authored
277 echo pagination($i);
21ea4ae Check errors
jakubvrana authored
278 }
c565c54 Let pagination function return
jakubvrana authored
279 echo ($_GET["page"] + 3 < $max_page ? " ..." : "") . pagination($max_page);
5ab708a Compact pages
jakubvrana authored
280 }
ace55ed HTML instead of XHTML
jakubvrana authored
281 echo " (" . lang('%d row(s)', $found_rows) . ') <label><input type="checkbox" name="all" value="1">' . lang('whole result') . "</label>\n";
8b74511 Print SQL query (fixes #2082448)
jakubvrana authored
282
3022dcb Define DB
jakubvrana authored
283 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') . "'$confirm></div></fieldset>\n");
dc667ea Hide select export and import
jakubvrana authored
284 print_fieldset("export", lang('Export'));
285 echo "$dump_output $dump_format $dump_compress <input type='submit' name='export' value='" . lang('Export') . "'>\n";
286 echo "</div></fieldset>\n";
667bfec Decomposition
jakubvrana authored
287 }
dc667ea Hide select export and import
jakubvrana authored
288 print_fieldset("import", lang('CSV Import'), !$result->num_rows);
289 echo "<input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> <input type='submit' name='import' value='" . lang('Import') . "'>\n";
290 echo "</div></fieldset>\n";
c16c57b E-mail sending
jakubvrana authored
291
1e55d47 User interface for e-mail {$name}
jakubvrana authored
292 $adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns);
c16c57b E-mail sending
jakubvrana authored
293
e7eb28d CSV import
jakubvrana authored
294 echo "</form>\n";
667bfec Decomposition
jakubvrana authored
295 }
296 }
Something went wrong with that request. Please try again.