119 lines
2.8 KiB
PHP
Executable File
119 lines
2.8 KiB
PHP
Executable File
<?php
|
|
|
|
function createDB($db_name = 'guestbook.db'): SQLite3 {
|
|
// Can't create table if it already exists
|
|
$exists = file_exists($db_name);
|
|
$db = new SQLite3($db_name);
|
|
|
|
if(!$exists) {
|
|
$db->exec('CREATE TABLE user
|
|
(id_user INTEGER PRIMARY KEY,
|
|
username TEXT NOT NULL UNIQUE,
|
|
password TEXT)'
|
|
);
|
|
$db->exec('CREATE TABLE message
|
|
(id_msg INTEGER PRIMARY KEY,
|
|
id_user INT,
|
|
content TEXT NOT NULL,
|
|
date INT,
|
|
FOREIGN KEY (id_user) REFERENCES user (id_user))'
|
|
);
|
|
}
|
|
|
|
return $db;
|
|
}
|
|
|
|
function getMessages(SQLite3 $db, array $filter = [], int $limit = 25) {
|
|
// Apply filters
|
|
$append_string = '';
|
|
$verb = 'WHERE';
|
|
|
|
foreach($filter as $key => $value) {
|
|
$to_append = match($key) {
|
|
'id_user' => "$verb $key = :$key",
|
|
// TODO
|
|
};
|
|
if($to_append) {
|
|
$append_string .= " $to_append";
|
|
$verb = 'AND';
|
|
}
|
|
}
|
|
|
|
// Prepare statement
|
|
$query = 'SELECT * FROM message' . $append_string;
|
|
//var_dump($query);
|
|
$statement = $db->prepare($query);
|
|
|
|
foreach($filter as $key => $value) {
|
|
$statement->bindParam($key, $value);
|
|
}
|
|
|
|
$result = $statement->execute();
|
|
$notnull = true;
|
|
$ret = [];
|
|
while($notnull) {
|
|
$arr = $result->fetchArray(SQLITE3_ASSOC);
|
|
//var_dump($arr);
|
|
if($arr !== false) {
|
|
$ret[] = $arr;
|
|
}
|
|
else $notnull = false;
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
function storeMessage(SQLite3 $db, string $content, ?int $user_id = null) : bool {
|
|
$query = 'INSERT INTO message(id_user, content, date)
|
|
VALUES (:id_user, :content, :date)';
|
|
|
|
$date = (new DateTime('now'))->getTimestamp();
|
|
$statement = $db->prepare($query);
|
|
$statement->bindParam(':id_user', $user_id);
|
|
$statement->bindParam(':content', $content);
|
|
$statement->bindParam(':date', $date);
|
|
$statement->execute();
|
|
return ($db->changes() > 0);
|
|
}
|
|
|
|
function storeUser(SQLite3 $db, string $username, string $password) : bool {
|
|
$query = 'INSERT INTO user(username, password)
|
|
VALUES (:username, :password)';
|
|
|
|
$statement = $db->prepare($query);
|
|
$statement->bindParam(':username', $username);
|
|
$statement->bindParam(':password', $password);
|
|
$statement->execute();
|
|
return ($db->changes() > 0);
|
|
}
|
|
|
|
function deleteMessage(SQLite3 $db, int $message_id) : int {
|
|
$query = 'DELETE FROM message
|
|
WHERE id_msg = :id_msg';
|
|
|
|
$statement = $db->prepare($query);
|
|
$statement->bindParam(':id_msg', $message_id);
|
|
$result = $statement->execute();
|
|
if($result === false) {
|
|
return -1;
|
|
}
|
|
// Number of changed rows
|
|
return $db->changes();
|
|
}
|
|
|
|
function userFromMessage(SQLite3 $db, int $message_id) {
|
|
$query = 'SELECT user.id_user, user.username
|
|
FROM user, message
|
|
WHERE message.id_user = user.id_user
|
|
AND message.id_msg = :id_msg';
|
|
|
|
$statement = $db->prepare($query);
|
|
$statement->bindParam(':id_msg', $message_id);
|
|
$result = $statement->execute();
|
|
|
|
|
|
$array = $result->fetchArray();
|
|
if(!$array) return null;
|
|
return ['id' => $array['id_user'], 'username' => $array['username']];
|
|
}
|