Add database table prefix support

This commit is contained in:
Bartek Fabiszewski 2017-04-17 22:04:33 +02:00
parent 8d2896a0ba
commit 2f7a1969ce
10 changed files with 64 additions and 28 deletions

View File

@ -48,6 +48,7 @@ $dbhost = ""; // mysql host, eg. localhost
$dbuser = ""; // database user
$dbpass = ""; // database pass
$dbname = ""; // database name
$dbprefix = ""; // optional table names prefix, eg. "ulogger_"
// other
// require login/password authentication

View File

@ -49,6 +49,7 @@
static $dbuser = ""; // database user
static $dbpass = ""; // database pass
static $dbname = ""; // database name
static $dbprefix = ""; // optional table names prefix, eg. "ulogger_"
// require login/password authentication
static $require_authentication = true;
@ -112,6 +113,7 @@
if (isset($dbuser)) { self::$dbuser = $dbuser; }
if (isset($dbpass)) { self::$dbpass = $dbpass; }
if (isset($dbname)) { self::$dbname = $dbname; }
if (isset($dbprefix)) { self::$dbprefix = $dbprefix; }
if (isset($require_authentication)) { self::$require_authentication = (bool) $require_authentication; }
if (isset($public_tracks)) { self::$public_tracks = (bool) $public_tracks; }
if (isset($admin_user)) { self::$admin_user = $admin_user; }

View File

@ -30,6 +30,13 @@
*/
protected static $instance;
/**
* Table names
*
* @var array Array of names
*/
protected static $tables;
/**
* Private constuctor
*
@ -57,8 +64,23 @@
if (!self::$instance) {
$config = new uConfig();
self::$instance = new self($config::$dbhost, $config::$dbuser, $config::$dbpass, $config::$dbname);
self::$tables = [];
$prefix = preg_replace('/[^a-z0-9_]/i', '', $config::$dbprefix);
self::$tables['positions'] = $prefix . "positions";
self::$tables['tracks'] = $prefix . "tracks";
self::$tables['users'] = $prefix . "users";
}
return self::$instance;
}
/**
* Get full table name including prefix
*
* @param string $name Name
* @return string Full table name
*/
public function table($name) {
return self::$tables[$name];
}
}
?>

View File

@ -55,7 +55,7 @@
$query = "SELECT p.id, p.time, p.user_id, p.track_id,
p.latitude, p.longitude, p.altitude, p.speed, p.bearing, p.accuracy, p.provider,
p.comment, p.image_id, u.login, t.name
FROM positions p
FROM `" . self::$db->table('positions') . "` p
LEFT JOIN users u ON (p.user_id = u.id)
LEFT JOIN tracks t ON (p.track_id = t.id)
WHERE id = ? LIMIT 1";
@ -84,7 +84,7 @@
public function add($userId, $trackId, $time, $lat, $lon, $altitude, $speed, $bearing, $accuracy, $provider, $comment, $imageId) {
$positionId = false;
if (!is_null($lat) && !is_null($lon) && !is_null($time) && !empty($userId) && !empty($trackId)) {
$query = "INSERT INTO positions
$query = "INSERT INTO `" . self::$db->table('positions') . "`
(user_id, track_id,
time, latitude, longitude, altitude, speed, bearing, accuracy, provider, comment, image_id)
VALUES (?, ?, FROM_UNIXTIME(?), ?, ?, ?, ?, ?, ?, ?, ?, ?)";
@ -120,7 +120,7 @@
$args[0] .= "i";
$args[2] = &$trackId;
}
$query = "DELETE FROM positions $where";
$query = "DELETE FROM `" . self::$db->table('positions') . "` $where";
$stmt = self::$db->prepare($query);
call_user_func_array([ $stmt, 'bind_param' ], $args);
$stmt->execute();
@ -150,7 +150,7 @@
$query = "SELECT p.id, p.time, p.user_id, p.track_id,
p.latitude, p.longitude, p.altitude, p.speed, p.bearing, p.accuracy, p.provider,
p.comment, p.image_id, u.login, t.name
FROM positions p
FROM `" . self::$db->table('positions') . "` p
LEFT JOIN users u ON (p.user_id = u.id)
LEFT JOIN tracks t ON (p.track_id = t.id)
$where
@ -182,7 +182,7 @@
$query = "SELECT p.id, p.time, p.user_id, p.track_id,
p.latitude, p.longitude, p.altitude, p.speed, p.bearing, p.accuracy, p.provider,
p.comment, p.image_id, u.login, t.name
FROM positions p
FROM `" . self::$db->table('positions') . "` p
LEFT JOIN users u ON (p.user_id = u.id)
LEFT JOIN tracks t ON (p.track_id = t.id)
$where

View File

@ -43,7 +43,8 @@
self::$db = uDb::getInstance();
if (!empty($trackId)) {
$stmt = self::$db->prepare("SELECT id, user_id, name, comment FROM tracks WHERE id = ? LIMIT 1");
$query = "SELECT id, user_id, name, comment FROM `" . self::$db->table('tracks') . "` WHERE id = ? LIMIT 1";
$stmt = self::$db->prepare($query);
$stmt->bind_param('i', $trackId);
$stmt->execute();
$stmt->bind_result($this->id, $this->userId, $this->name, $this->comment);
@ -66,7 +67,7 @@
public function add($userId, $name, $comment = NULL) {
$trackId = false;
if (!empty($userId) && !empty($name)) {
$query = "INSERT INTO tracks (user_id, name, comment) VALUES (?, ?, ?)";
$query = "INSERT INTO `" . self::$db->table('tracks') . "` (user_id, name, comment) VALUES (?, ?, ?)";
$stmt = self::$db->prepare($query);
$stmt->bind_param('iss', $userId, $name, $comment);
$stmt->execute();
@ -92,7 +93,7 @@
return false;
}
// delete track metadata
$query = "DELETE FROM tracks WHERE id = ?";
$query = "DELETE FROM `" . self::$db->table('tracks') . "` WHERE id = ?";
$stmt = self::$db->prepare($query);
$stmt->bind_param('i', $this->id);
$stmt->execute();
@ -122,7 +123,7 @@
if (is_null($comment)) { $comment = $this->comment; }
if ($comment == "") { $comment = NULL; }
if ($this->isValid) {
$query = "UPDATE tracks SET name = ?, comment = ? WHERE id = ?";
$query = "UPDATE `" . self::$db->table('tracks') . "` SET name = ?, comment = ? WHERE id = ?";
$stmt = self::$db->prepare($query);
$stmt->bind_param('ssi', $name, $comment, $this->id);
$stmt->execute();
@ -145,7 +146,7 @@
public function deleteAll($userId) {
$ret = false;
if (!empty($userId)) {
$query = "DELETE FROM tracks WHERE user_id = ?";
$query = "DELETE FROM `" . self::$db->table('tracks') . "` WHERE user_id = ?";
$stmt = self::$db->prepare($query);
$stmt->bind_param('i', $userId);
$stmt->execute();
@ -169,7 +170,7 @@
} else {
$where = "";
}
$query = "SELECT id, user_id, name, comment FROM tracks $where ORDER BY id DESC";
$query = "SELECT id, user_id, name, comment FROM `" . self::$db->table('tracks') . "` $where ORDER BY id DESC";
$result = self::$db->query($query);
if ($result === false) {
return false;

View File

@ -44,7 +44,8 @@
public function __construct($login = NULL) {
self::$db = uDb::getInstance();
if (!empty($login)) {
$stmt = self::$db->prepare("SELECT id, login, password FROM users WHERE login = ? LIMIT 1");
$sql = "SELECT id, login, password FROM `" . self::$db->table('users') . "` WHERE login = ? LIMIT 1";
$stmt = self::$db->prepare($sql);
$stmt->bind_param('s', $login);
$stmt->execute();
$stmt->bind_result($this->id, $this->login, $this->hash);
@ -67,7 +68,7 @@
$userid = false;
if (!empty($login) && !empty($pass) && $this->validPassStrength($pass)) {
$hash = password_hash($pass, PASSWORD_DEFAULT);
$sql = "INSERT INTO users (login, password) VALUES (?, ?)";
$sql = "INSERT INTO `" . self::$db->table('users') . "` (login, password) VALUES (?, ?)";
$stmt = self::$db->prepare($sql);
$stmt->bind_param('ss', $login, $hash);
$stmt->execute();
@ -99,7 +100,7 @@
return false;
}
// remove user
$sql = "DELETE FROM users WHERE id = ?";
$sql = "DELETE FROM `" . self::$db->table('users') . "` WHERE id = ?";
$stmt = self::$db->prepare($sql);
$stmt->bind_param('i', $this->id);
$stmt->execute();
@ -126,7 +127,7 @@
$ret = false;
if ($this->validPassStrength($pass)) {
$hash = password_hash($pass, PASSWORD_DEFAULT);
$sql = "UPDATE users SET password = ? WHERE login = ?";
$sql = "UPDATE `" . self::$db->table('users') . "` SET password = ? WHERE login = ?";
$stmt = self::$db->prepare($sql);
$stmt->bind_param('ss', $hash, $this->login);
$stmt->execute();
@ -188,7 +189,7 @@
* @return array|bool Array of uUser users, false on error
*/
public function getAll() {
$query = "SELECT id, login, password FROM users ORDER BY login";
$query = "SELECT id, login, password FROM `" . self::$db->table('users') . "` ORDER BY login";
$result = self::$db->query($query);
if ($result === false) {
return false;

View File

@ -40,7 +40,7 @@ $langSetup["passfunchack"] = "Please edit 'helpers/user.php' file and uncomment
$langSetup["dorestart"] = "Please restart this script when you are done.";
$langSetup["createconfig"] = "Please create 'config.php' file in root folder. You may start by copying it from 'config.default.php'. Make sure that you adjust config values to match your needs and your database setup.";
$langSetup["nodbsettings"] = "You must provide your database credentials in 'config.php' file (%s)."; // substitutes variable names
$langSetup["scriptdesc"] = "This script will set up tables needed for µlogger. They will be created in your database named %s. Warning, if the tables already exist they will be dropped and recreated, their content will be destroyed."; // substitutes db name
$langSetup["scriptdesc"] = "This script will set up tables needed for µlogger (%s). They will be created in your database named %s. Warning, if the tables already exist they will be dropped and recreated, their content will be destroyed."; // substitutes table names and db name
$langSetup["scriptdesc2"] = "When done the script will ask you to provide user name and password for your µlogger user.";
$langSetup["startbutton"] = "Press to start";
$langSetup["restartbutton"] = "Restart";

View File

@ -37,7 +37,7 @@ $langSetup["passfunchack"] = "Otwórz proszę plik 'helpers/user.php' w edytorze
$langSetup["dorestart"] = "Uruchom ten skrypt ponownie, kiedy zakończysz.";
$langSetup["createconfig"] = "Utwórz proszę plik 'config.php' w głównym folderze. Możesz skopiować jego początkową zawartość z pliku 'config.default.php'. Pamiętaj, żeby dostosować konfiguracje do swoich potrzeb i ustawień bazy danych.";
$langSetup["nodbsettings"] = "Musisz skonfigurować parametry dostępu do bazy danych w pliku 'config.php' (%s).";
$langSetup["scriptdesc"] = "Ten skrypt utworzy tablice niezbędne do działania aplikacji µlogger. Zostaną one utworzone w bazie danych o nazwie %s. Uwaga, jeśli tablice już istnieją, zostaną usunięte i utworzone ponownie, ich zawartość zostanie skasowana.";
$langSetup["scriptdesc"] = "Ten skrypt utworzy tablice niezbędne do działania aplikacji µlogger (%s). Zostaną one utworzone w bazie danych o nazwie %s. Uwaga, jeśli tablice już istnieją, zostaną usunięte i utworzone ponownie, ich zawartość zostanie skasowana.";
$langSetup["scriptdesc2"] = "Następnie skrypt poprosi o utworzenie konta do logowania w aplikacji µlogger.";
$langSetup["startbutton"] = "Naciśnij, aby rozpocząć";
$langSetup["restartbutton"] = "Uruchom ponownie";

View File

@ -80,6 +80,10 @@ if ($mysqli->connect_errno) {
echo "Can't connect to $dbname database : (" . $mysqli->errno . ") " . $mysqli->error . "\n";
exit(1);
}
$prefix = preg_replace('/[^a-z0-9_]/i', '', $dbprefix);
$tPositions = $prefix . "positions";
$tTracks = $prefix . "tracks";
$tUsers = $prefix . "users";
// import data
if (!$users_result = $pt_mysqli->query("SELECT * FROM users ORDER BY ID")) {
@ -87,7 +91,7 @@ if (!$users_result = $pt_mysqli->query("SELECT * FROM users ORDER BY ID")) {
exit(1);
}
if (!($user_insert = $mysqli->prepare("INSERT INTO users (login, password) VALUES (?, ?)"))) {
if (!($user_insert = $mysqli->prepare("INSERT INTO `$tUsers` (login, password) VALUES (?, ?)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error . "\n";
exit(1);
}
@ -142,7 +146,7 @@ function process_user_tracks($user_id) {
exit(1);
}
$tracks_select->store_result();
if (!($track_insert = $mysqli->prepare("INSERT INTO tracks (user_id, name, comment) VALUES (?, ?, ?)"))) {
if (!($track_insert = $mysqli->prepare("INSERT INTO `$tTracks` (user_id, name, comment) VALUES (?, ?, ?)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error . "\n";
exit(1);
}
@ -190,7 +194,7 @@ function process_track($user_id, $old_id, $new_id) {
exit(1);
}
$pos_select->store_result();
if (!($pos_insert = $mysqli->prepare("INSERT INTO positions (time, user_id, track_id, latitude, longitude, altitude, speed, bearing, accuracy, provider, comment, image_id)
if (!($pos_insert = $mysqli->prepare("INSERT INTO `$tPositions` (time, user_id, track_id, latitude, longitude, altitude, speed, bearing, accuracy, provider, comment, image_id)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error . "\n";
exit(1);

View File

@ -33,13 +33,18 @@ require_once(ROOT_DIR . "/lang.php");
$command = isset($_REQUEST['command']) ? $_REQUEST['command'] : NULL;
$prefix = preg_replace('/[^a-z0-9_]/i', '', $config::$dbprefix);
$tPositions = $prefix . "positions";
$tTracks = $prefix . "tracks";
$tUsers = $prefix . "users";
$messages = [];
switch ($command) {
case "setup":
$queries = [];
// positions
$queries[] = "DROP TABLE IF EXISTS `positions`";
$queries[] = "CREATE TABLE `positions` (
$queries[] = "DROP TABLE IF EXISTS `$tPositions`";
$queries[] = "CREATE TABLE `$tPositions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`user_id` int(11) NOT NULL,
@ -59,8 +64,8 @@ switch ($command) {
) ENGINE=InnoDB DEFAULT CHARSET=utf8";
// tracks
$queries[] = "DROP TABLE IF EXISTS `tracks`";
$queries[] = "CREATE TABLE `tracks` (
$queries[] = "DROP TABLE IF EXISTS `$tTracks`";
$queries[] = "CREATE TABLE `$tTracks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
@ -70,8 +75,8 @@ switch ($command) {
) ENGINE=InnoDB DEFAULT CHARSET=utf8";
// users
$queries[] = "DROP TABLE IF EXISTS `users`";
$queries[] = "CREATE TABLE `users` (
$queries[] = "DROP TABLE IF EXISTS `$tUsers`";
$queries[] = "CREATE TABLE `$tUsers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(15) CHARACTER SET latin1 NOT NULL,
`password` varchar(255) CHARACTER SET latin1 NOT NULL DEFAULT '',
@ -160,7 +165,7 @@ switch ($command) {
$messages[] = "<form method=\"post\" action=\"setup.php\"><button>{$langSetup["restartbutton"]}</button></form>";
break;
}
$messages[] = sprintf($langSetup["scriptdesc"], "<b>{$config::$dbname}</b>");
$messages[] = sprintf($langSetup["scriptdesc"], "'$tPositions', '$tTracks', '$tUsers'", "<b>{$config::$dbname}</b>");
$messages[] = $langSetup["scriptdesc2"];
$messages[] = "<form method=\"post\" action=\"setup.php\"><input type=\"hidden\" name=\"command\" value=\"setup\"><button>{$langSetup["startbutton"]}</button></form>";
break;