Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 294 lines (278 sloc) 13.322 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"));
77 $affected = $dbh->affected_rows;
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 }
85 $affected += $dbh->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) {
17a3c5b NULL and \r in CSV import
jakubvrana authored
106 $set .= ", " . idf_escape($cols[$i]) . " = " . (!strlen($col) && $fields[$cols[$i]]["null"] ? "NULL" : $dbh->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
4099271 Cross links to select and table (bug #2236232)
jakubvrana authored
125 echo "<p>";
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 }
79d1902 Substitute table name to $TABLE
jakubvrana authored
135 echo '<a href="' . h(ME . 'edit=' . urlencode($TABLE) . $set) . '">' . lang('New item') . '</a> ';
667bfec Decomposition
jakubvrana authored
136 }
c64c4fd Adminer class
jakubvrana authored
137 echo $adminer->selectLinks($table_status);
667bfec Decomposition
jakubvrana authored
138
ffcea8b Rights
jakubvrana authored
139 if (!$columns) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
140 echo "<p class='error'>" . lang('Unable to select the table') . ($fields ? "" : ": " . h($dbh->error)) . ".\n";
ffcea8b Rights
jakubvrana authored
141 } else {
5ee29cb Select columns, aggregation
jakubvrana authored
142 echo "<form action='' id='form'>\n";
d24ad78 Select boxes customization
jakubvrana authored
143 echo "<div style='display: none;'>";
689699a Shortcut for htmlspecialchars
jakubvrana authored
144 echo (strlen($_GET["server"]) ? '<input type="hidden" name="server" value="' . h($_GET["server"]) . '">' : "");
3022dcb Define DB
jakubvrana authored
145 echo (strlen(DB) ? '<input type="hidden" name="db" value="' . h(DB) . '">' : ""); // not used in Editor
79d1902 Substitute table name to $TABLE
jakubvrana authored
146 echo '<input type="hidden" name="select" value="' . h($TABLE) . '">';
d24ad78 Select boxes customization
jakubvrana authored
147 echo "</div>\n";
148 $adminer->selectColumnsPrint($select, $columns);
149 $adminer->selectSearchPrint($where, $columns, $indexes);
150 $adminer->selectOrderPrint($order, $columns, $indexes);
151 $adminer->selectLimitPrint($limit);
152 $adminer->selectLengthPrint($text_length);
153 $adminer->selectActionPrint($text_length);
ffcea8b Rights
jakubvrana authored
154 echo "</form>\n";
155
07e1ae1 FOUND_ROWS only with GROUP BY
jakubvrana authored
156 $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
157 echo $adminer->selectQuery($query);
8b74511 Print SQL query (fixes #2082448)
jakubvrana authored
158
5f16c75 Prepare for version 2
jakubvrana authored
159 $result = $dbh->query($query);
21ea4ae Check errors
jakubvrana authored
160 if (!$result) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
161 echo "<p class='error'>" . h($dbh->error) . "\n";
ffcea8b Rights
jakubvrana authored
162 } else {
f2365d0 Typo
jakubvrana authored
163 $email_fields = array();
e7eb28d CSV import
jakubvrana authored
164 echo "<form action='' method='post' enctype='multipart/form-data'>\n";
21ea4ae Check errors
jakubvrana authored
165 if (!$result->num_rows) {
ace55ed HTML instead of XHTML
jakubvrana authored
166 echo "<p class='message'>" . lang('No rows.') . "\n";
21ea4ae Check errors
jakubvrana authored
167 } else {
ba90d60 Introduce adminer_select_val
jakubvrana authored
168 $rows = array();
169 while ($row = $result->fetch_assoc()) {
170 $rows[] = $row;
171 }
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
172 // use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)
07e1ae1 FOUND_ROWS only with GROUP BY
jakubvrana authored
173 $found_rows = (intval($limit) && $group && count($group) < count($select)
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
174 ? $dbh->result($dbh->query(" SELECT FOUND_ROWS()")) // space to allow mysql.trace_mode
175 : count($rows)
176 );
ba90d60 Introduce adminer_select_val
jakubvrana authored
177
79d1902 Substitute table name to $TABLE
jakubvrana authored
178 $backward_keys = $adminer->backwardKeys($TABLE);
dc4fcf4 PHP 4 compatibility
jakubvrana authored
179 $table_names = array();
180 if ($backward_keys) {
181 foreach ($backward_keys as $key => $val) {
182 $val = $adminer->tableName(table_status($key));
183 if (strlen($val)) {
b9ffd64 Remove common prefix in backward key
jakubvrana authored
184 $table_names[$key] = (preg_match('(^' . preg_quote($table_name) . '(:|\\s*-)?\\s+(.+))', $val, $match) ? $match[2] : $val);
dc4fcf4 PHP 4 compatibility
jakubvrana authored
185 }
186 }
336f521 Get table names of backward keys only once
jakubvrana authored
187 }
c42c46a Table relations
jakubvrana authored
188
bcff025 Click on row selects it (fixes #2844098)
jakubvrana authored
189 echo "<table cellspacing='0' class='nowrap' onclick='table_click(event);'>\n";
ba90d60 Introduce adminer_select_val
jakubvrana authored
190 echo "<thead><tr><td><input type='checkbox' id='all-page' onclick='form_check(this, /check/);'>";
5034123 Apply field name with functions
jakubvrana authored
191 $names = array();
192 reset($select);
23df820 Distinguish no column order in fieldName
jakubvrana authored
193 $order = 1;
ba90d60 Introduce adminer_select_val
jakubvrana authored
194 foreach ($rows[0] as $key => $val) {
5034123 Apply field name with functions
jakubvrana authored
195 $val = $_GET["columns"][key($select)];
ba9c9a5 Display SQL function with braces in select heading
jakubvrana authored
196 $field = $fields[$select ? $val["col"] : $key];
6c97b80 Display only first five columns in Editor example
jakubvrana authored
197 $name = ($field ? $adminer->fieldName($field, $order) : "*");
116c873 Ignore tables and fields with empty name
jakubvrana authored
198 if (strlen($name)) {
6c97b80 Display only first five columns in Editor example
jakubvrana authored
199 $order++;
5034123 Apply field name with functions
jakubvrana authored
200 $names[$key] = $name;
689699a Shortcut for htmlspecialchars
jakubvrana authored
201 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
202 }
5034123 Apply field name with functions
jakubvrana authored
203 next($select);
ba90d60 Introduce adminer_select_val
jakubvrana authored
204 }
8f525c4 Hide empty table names in Relations
jakubvrana authored
205 echo ($table_names ? "<th>" . lang('Relations') : "") . "</thead>\n";
dea345c Substitute foreign keys in e-mail fields
jakubvrana authored
206 foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) {
988a29f Don't use aggregation functions in unique_idf
jakubvrana authored
207 $unique_idf = implode('&amp;', unique_idf($rows[$n], $indexes));
79d1902 Substitute table name to $TABLE
jakubvrana authored
208 echo "<tr" . odd() . "><td><input type='checkbox' name='check[]' value='$unique_idf' 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
209 foreach ($row as $key => $val) {
78e49f0 Pass $field to select_val
jakubvrana authored
210 if (isset($names[$key])) {
d6e3fc7 Link e-mails
jakubvrana authored
211 if (strlen($val) && (!isset($email_fields[$key]) || strlen($email_fields[$key]))) {
5034123 Apply field name with functions
jakubvrana authored
212 $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
213 }
5911cf1 Always call select_val
jakubvrana authored
214 $link = "";
a0def47 Date localization
jakubvrana authored
215 $val = $adminer->editVal($val, $fields[$key]);
116c873 Ignore tables and fields with empty name
jakubvrana authored
216 if (!isset($val)) {
217 $val = "<i>NULL</i>";
21ea4ae Check errors
jakubvrana authored
218 } else {
97b8c7b Display images in Editor
jakubvrana authored
219 if (ereg('blob|binary', $fields[$key]["type"]) && strlen($val)) {
79d1902 Substitute table name to $TABLE
jakubvrana authored
220 $link = h(ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . '&') . $unique_idf;
97b8c7b Display images in Editor
jakubvrana authored
221 }
116c873 Ignore tables and fields with empty name
jakubvrana authored
222 if (!strlen(trim($val, " \t"))) {
223 $val = "&nbsp;";
97b8c7b Display images in Editor
jakubvrana authored
224 } elseif (strlen($text_length) && ereg('blob|text', $fields[$key]["type"]) && is_utf8($val)) {
35c8c6b Respect zero text length
jakubvrana authored
225 $val = nl2br(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
226 } else {
689699a Shortcut for htmlspecialchars
jakubvrana authored
227 $val = nl2br(h($val));
21ea4ae Check errors
jakubvrana authored
228 }
116c873 Ignore tables and fields with empty name
jakubvrana authored
229
db46fc2 Maintain insert prefill value
jakubvrana authored
230 if (!$link) { // link related items
231 foreach ((array) $foreign_keys[$key] as $foreign_key) {
232 if (count($foreign_keys[$key]) == 1 || count($foreign_key["source"]) == 1) {
233 foreach ($foreign_key["source"] as $i => $source) {
234 $link .= where_link($i, $foreign_key["target"][$i], $rows[$n][$source]);
235 }
236 $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
237 break;
116c873 Ignore tables and fields with empty name
jakubvrana authored
238 }
21ea4ae Check errors
jakubvrana authored
239 }
ffcea8b Rights
jakubvrana authored
240 }
fa3dd55 Parent
jakubvrana authored
241 }
d6e3fc7 Link e-mails
jakubvrana authored
242 if (!$link && is_email($val)) {
243 $link = "mailto:$val";
244 }
c64c4fd Adminer class
jakubvrana authored
245 $val = $adminer->selectVal($val, $link, $fields[$key]);
116c873 Ignore tables and fields with empty name
jakubvrana authored
246 echo "<td>$val";
667bfec Decomposition
jakubvrana authored
247 }
248 }
8f525c4 Hide empty table names in Relations
jakubvrana authored
249 if ($table_names) {
c42c46a Table relations
jakubvrana authored
250 echo "<td>";
8f525c4 Hide empty table names in Relations
jakubvrana authored
251 foreach ($table_names as $table => $name) {
252 foreach ($backward_keys[$table] as $columns) {
db46fc2 Maintain insert prefill value
jakubvrana authored
253 $link = ME . 'select=' . urlencode($table);
c42c46a Table relations
jakubvrana authored
254 $i = 0;
255 foreach ($columns as $column => $val) {
db46fc2 Maintain insert prefill value
jakubvrana authored
256 $link .= where_link($i++, $column, $rows[$n][$val]);
c42c46a Table relations
jakubvrana authored
257 }
db46fc2 Maintain insert prefill value
jakubvrana authored
258 echo " <a href='" . h($link) . "'>$name</a>";
c42c46a Table relations
jakubvrana authored
259 }
260 }
261 }
ba90d60 Introduce adminer_select_val
jakubvrana authored
262 echo "\n";
5ab708a Compact pages
jakubvrana authored
263 }
21ea4ae Check errors
jakubvrana authored
264 echo "</table>\n";
e4b188c Display found rows
jakubvrana authored
265
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
266 if (intval($limit) && count($group) >= count($select)) {
267 // slow with big tables
268 ob_flush();
269 flush();
79d1902 Substitute table name to $TABLE
jakubvrana authored
270 $found_rows = $dbh->result($dbh->query("SELECT COUNT(*) FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : "")));
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
271 }
e4b188c Display found rows
jakubvrana authored
272 echo "<p>";
273 if (intval($limit) && $found_rows > $limit) {
64ba924 Comments
jakubvrana authored
274 // display first, previous 3, next 3 and last page
21ea4ae Check errors
jakubvrana authored
275 $max_page = floor(($found_rows - 1) / $limit);
c565c54 Let pagination function return
jakubvrana authored
276 echo lang('Page') . ":" . pagination(0) . ($_GET["page"] > 3 ? " ..." : "");
21ea4ae Check errors
jakubvrana authored
277 for ($i = max(1, $_GET["page"] - 2); $i < min($max_page, $_GET["page"] + 3); $i++) {
c565c54 Let pagination function return
jakubvrana authored
278 echo pagination($i);
21ea4ae Check errors
jakubvrana authored
279 }
c565c54 Let pagination function return
jakubvrana authored
280 echo ($_GET["page"] + 3 < $max_page ? " ..." : "") . pagination($max_page);
5ab708a Compact pages
jakubvrana authored
281 }
ace55ed HTML instead of XHTML
jakubvrana authored
282 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
283
3022dcb Define DB
jakubvrana authored
284 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");
25f01d3 Compress export and import
jakubvrana authored
285 echo "<fieldset><legend>" . lang('Export') . "</legend><div>$dump_output $dump_format $dump_compress <input type='submit' name='export' value='" . lang('Export') . "'></div></fieldset>\n";
667bfec Decomposition
jakubvrana authored
286 }
ace55ed HTML instead of XHTML
jakubvrana authored
287 echo "<fieldset><legend>" . lang('CSV Import') . "</legend><div><input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> <input type='submit' name='import' value='" . lang('Import') . "'></div></fieldset>\n";
c16c57b E-mail sending
jakubvrana authored
288
1e55d47 User interface for e-mail {$name}
jakubvrana authored
289 $adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns);
c16c57b E-mail sending
jakubvrana authored
290
e7eb28d CSV import
jakubvrana authored
291 echo "</form>\n";
667bfec Decomposition
jakubvrana authored
292 }
293 }
Something went wrong with that request. Please try again.