summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Save <savetheinternet@tinyboard.org>2013-01-25 23:56:55 +1100
committerMichael Save <savetheinternet@tinyboard.org>2013-01-25 23:56:55 +1100
commit9a2c33736aeee1016e45ef655d8c58690555152c (patch)
tree85bf7a94b04682647e817c74694318b81e835b7b
parent764d718f8426da1c1161ddf82a5dd8a82fd4b935 (diff)
New debug page: ?/debug/sql
-rw-r--r--inc/config.php3
-rw-r--r--inc/mod/pages.php24
-rw-r--r--templates/mod/debug/sql.html26
3 files changed, 53 insertions, 0 deletions
diff --git a/inc/config.php b/inc/config.php
index e7ca79e3..8bd6d357 100644
--- a/inc/config.php
+++ b/inc/config.php
@@ -1010,6 +1010,9 @@
// Edit the current configuration (via web interface)
$config['mod']['edit_config'] = ADMIN;
+ // Execute un-filtered SQL queries on the database (?/debug/sql)
+ $config['mod']['debug_sql'] = DISABLED;
+
/*
* ====================
* Events (PHP 5.3.0+)
diff --git a/inc/mod/pages.php b/inc/mod/pages.php
index 8feac374..592ac5b1 100644
--- a/inc/mod/pages.php
+++ b/inc/mod/pages.php
@@ -1922,3 +1922,27 @@ function mod_debug_recent_posts() {
mod_page(_('Debug: Recent posts'), 'mod/debug/recent_posts.html', array('posts' => $posts));
}
+function mod_debug_sql() {
+ global $config;
+
+ if (!hasPermission($config['mod']['debug_sql']))
+ error($config['error']['noaccess']);
+
+ $args['security_token'] = make_secure_link_token('debug/sql');
+
+ if (isset($_POST['query'])) {
+ $args['query'] = $_POST['query'];
+ if ($query = query($_POST['query'])) {
+ $args['result'] = $query->fetchAll(PDO::FETCH_ASSOC);
+ if (!empty($args['result']))
+ $args['keys'] = array_keys($args['result'][0]);
+ else
+ $args['result'] = 'empty';
+ } else {
+ $args['error'] = db_error();
+ }
+ }
+
+ mod_page(_('Debug: SQL'), 'mod/debug/sql.html', $args);
+}
+
diff --git a/templates/mod/debug/sql.html b/templates/mod/debug/sql.html
new file mode 100644
index 00000000..63ba22f8
--- /dev/null
+++ b/templates/mod/debug/sql.html
@@ -0,0 +1,26 @@
+<form action="" method="post">
+ <input type="hidden" name="token" value="{{ security_token }}">
+ <textarea style="display:block;margin:5px auto;width:90%;max-width:600px" rows="3" name="query">{{ query | e }}</textarea>
+ <input style="display:block;margin:5px auto" type="submit" value="Query">
+</form>
+
+{% if result == 'empty' %}
+ <p style="text-align:center">Query successful (no result).</p>
+{% elseif result %}
+ <table class="modlog">
+ <tr>
+ {% for key in keys %}
+ <th>{{ key }}</th>
+ {% endfor %}
+ </tr>
+ {% for row in result %}
+ <tr>
+ {% for col in row %}
+ <td>{{ col }}</td>
+ {% endfor %}
+ </tr>
+ {% endfor %}
+ </table>
+{% elseif error %}
+ <p style="text-align:center;color:#d00">{{ error }}</p>
+{% endif %}