Show sourcecode
The following files exists in this folder. Click to view.
Webserver1/Ovningar/Slutprojekt/
.env
DEBUG/
Media/
account.js
account.php
callback_log.txt
change_account_details.php
composer.json
composer.lock
forgot_pass.php
forgot_pass_new_pass.php
header.php
index.php
login.php
mediaplayer.php
node_modules/
package-lock.json
package.json
signup.php
style.css
upload.js
upload_callback.php
upload_callback_simulated.php
upload_chunk.php
upload_errors.log
upload_form.php
upload_handler.php
upload_success.log
vendor/
verify_file.php
verifypage.php
account.php
409 lines UTF-8 Windows (CRLF)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
<?php
session_start();
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if (isset($_GET['logout']) && $_GET['logout'] == 1) {
$_SESSION = [];
}
$user_id = $_SESSION["userId"] ?? null;
if (!$user_id) {
header("Location:login.php");
exit;
}
/**
* @var PDO $dbconn
* @var bool $local
* @var class DBManager
*/
include('../../incl/dbconnection.php');
$dbmanager = new DBManager();
$update_title = $_POST['update-title'] ?? null;
$update_desc = $_POST['update-desc'] ?? null;
$update_row_id = $_POST['update-row-id'] ?? null;
$IS_ADMIN = $_SESSION['isAdmin'] ?: false;
// Admin SQL konsol
if ($IS_ADMIN) {
$sql = $_POST['ADMIN-SQL'] ?? null;
if ($sql) {
try {
// Kolla om det är en SELECT
if (stripos(trim($sql), 'select') === 0) {
$stmt = $dbconn->query($sql);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<pre>";
print_r($rows);
echo "</pre>";
} else {
$affected = $dbconn->exec($sql);
echo "Påverkade rader: " . $affected;
}
} catch (PDOException $e) {
echo "Fel: " . $e->getMessage();
}
}
}
if (isset($_POST['delete'])) {
$delete_row_id = $_POST['update-row-id'] ?? null;
if ($delete_row_id == "-1" || !$delete_row_id) {
echo "Felaktigt id.";
} else {
// Fetch the file paths before deleting
$media_row = $dbmanager->fetch_from_table(
["href_video", "href_thumb"],
"bay_media",
["id" => $delete_row_id]
);
if (count($media_row) > 0) {
$href_video = $media_row[0]['href_video'];
$href_thumb = $media_row[0]['href_thumb'];
// Delete the files if they exist
if ($href_video && file_exists($href_video)) {
unlink($href_video);
}
if ($href_thumb && file_exists($href_thumb)) {
unlink($href_thumb);
}
}
$dbmanager->remove_from_table("bay_media", ["id" => $delete_row_id]);
$_SESSION['flash_msg'] = "Raderade video med id $delete_row_id.";
header("Location: account.php", true, 303);
exit;
}
}
if ($update_title || $update_desc) {
if ($update_row_id == "-1") {
echo "Något gick fel, ogiltigt id. Inga ändringar har gjorts.";
} else {
$dbmanager->update_table_values(
"bay_media",
[
"title" => $update_title,
"description" => $update_desc
],
[
"id" => $update_row_id
]
);
$_SESSION['flash_msg'] = "Ändrade rad med id $update_row_id.";
// PRG
header("Location: account.php", true, 303);
exit;
}
}
?>
<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Konto</title>
<link rel="stylesheet" href="style.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<style>
table,
tbody,
thead,
td {
border: 1px solid white;
}
tr:not(:has(th)) {
cursor: pointer;
}
tr:not(:has(th)):hover {
background-color: rgb(71, 77, 97);
}
</style>
</head>
<body>
<?php include("./header.php") ?>
<?php
if (isset($_SESSION['flash_msg'])) {
echo $_SESSION['flash_msg'];
unset($_SESSION['flash_msg']);
}
?>
<main id="accountpage-main">
<div>
<h1>Hallå där, <?php echo $_SESSION['username']; ?></h1>
<p>Vill du byta lösenord? <a style="background-color:lightgray" href="change_account_details.php">Byt lösenord</a></p>
<p>Vill du logga ut? <a style="background-color:lightgray" href="account.php?logout=1">Logga ut</a></p>
<h2>Dina uppladdade videos</h2>
<table id="uploaded-media-table">
<thead>
<tr>
<th>
ID
</th>
<th>
MEDIA_ID
</th>
<th>
TITEL
</th>
<th>
BESKRIVNING
</th>
<th>
VÄNTAR PÅ GODKÄNNANDE?
</th>
</tr>
</thead>
<tbody>
<?php
$uploads = $dbmanager->fetch_from_table(
["*"],
"bay_media",
[
"uploaded_by_user_id" => $_SESSION['userId']
]
);
if (count($uploads) == 0) {
echo "Du har inte laddat upp något än!";
} else {
foreach ($uploads as $row) {
?>
<tr class="row"
data-row_id="<?php echo $row['id']; ?>"
data-href_thumb="<?php echo $row['href_thumb']; ?>"
data-title="<?php echo $row['title']; ?>"
data-desc="<?php echo $row['description']; ?>">
<?php
foreach ($row as $colname => $colval) {
if (in_array($colname, ['href_video', 'href_thumb', 'uploaded_by_user_id'])) {
continue;
}
$val = $colval;
if ($colname == "hidden") {
$val = $colval ? "JA" : "NEJ";
}
?>
<td><?php echo $val ?></td>
<?php
}
?>
</tr>
<?php
}
}
?>
</tbody>
</table>
</div>
<form id="manage-window" class="hidden" method="post">
<input id="update-row-id" name="update-row-id" type="hidden">
<a id="manage-videolink" href="">
<img id="manage-thumb" src="" alt="Tumnagel på video">
</a>
<div class="row">
<label for="update-title">Titel:</label>
<input id="update-title" maxlength="50" name="update-title" type="text">
</div>
<div class="row">
<label for="update-desc">Beskrivning:</label>
<textarea id="update-desc" maxlength="300" name="update-desc" type="text" rows="5"></textarea>
</div>
<input type="submit" value="Uppdatera">
<input type="submit" name="delete" id="delete-btn" value="Ta bort">
</form>
<div id="watched-media-table">
<h2>Din titthistorik</h2>
<table>
<thead>
<tr>
<th>
VIDEO
</th>
<th>
SKAPAD AV
</th>
<th>
SENAST KOLLAT
</th>
</tr>
</thead>
<tbody>
<?php
$watched = $dbmanager->fetch_from_table(
[
"bay_watch_history.last_watched",
"m.title",
"m.id",
"u.username"
],
"bay_watch_history",
[
"user_id" => $user_id
],
[
[
"type" => "INNER",
"table" => "bay_media",
"alias" => "m",
"condition" => "bay_watch_history.media_id = m.id"
],
[
"type" => "INNER",
"table" => "bay_users",
"alias" => "u",
"condition" => "m.uploaded_by_user_id = u.id"
]
],
-1,
"bay_watch_history.last_watched DESC"
);
if (count($watched) == 0) {
echo "Du har inte kollat på något än!";
} else {
foreach ($watched as $row) {
?>
<tr class="row"
data-row_id="<?php echo $row['id']; ?>">
<td>
<?php echo $row['title']; ?>
</td>
<td>
<?php echo $row['username']; ?>
</td>
<td>
<?php echo $row['last_watched']; ?>
</td>
</tr>
<?php
}
}
?>
</tbody>
</table>
</div>
<?php
if (isset($_SESSION['isAdmin']) && $_SESSION['isAdmin'] == true):
?>
<form method="post" style="grid-column: span 2;">
<div>
<h2>Ännu ej godkända videos</h2>
<table>
<thead>
<tr>
<th>
ID
</th>
<th>
MEDIA_ID
</th>
<th>
TITEL
</th>
<th>
BESKRIVNING
</th>
<th>
VÄNTAR PÅ GODKÄNNANDE?
</th>
</tr>
</thead>
<tbody>
<?php
$uploads = $dbmanager->fetch_from_table(
["*"],
"bay_media",
[
"hidden" => 1
]
);
if (count($uploads) == 0) {
echo "Du har inte laddat upp något än!";
} else {
foreach ($uploads as $row) {
?>
<tr class="row unapproved"
data-row_id="<?php echo $row['id']; ?>"
data-href_thumb="<?php echo $row['href_thumb']; ?>"
data-title="<?php echo $row['title']; ?>"
data-desc="<?php echo $row['description']; ?>">
<?php
foreach ($row as $colname => $colval) {
if (in_array($colname, ['href_video', 'href_thumb', 'uploaded_by_user_id'])) {
continue;
}
$val = $colval;
if ($colname == "hidden") {
$val = $colval ? "JA" : "NEJ";
}
?>
<td><?php echo $val ?></td>
<?php
}
?>
</tr>
<?php
}
}
?>
</tbody>
</table>
</div>
<textarea name="ADMIN-SQL" id="ADMIN-SQL" cols="60" rows="10"
placeholder="Möjlighet till att köra SQL kod (VAR FÖRSIKTIG!)
För att godkänna video:
UPDATE bay_media SET hidden=0 WHERE id=<id>"></textarea>
<input type="submit" id="execute-SQL-btn" value="Kör SQL">
</form>
<script>
const execBtn = document.getElementById("execute-SQL-btn");
const SQLInput = document.getElementById("ADMIN-SQL");
const unapprovedRows = document.querySelectorAll("tr.row.unapproved");
execBtn.addEventListener("click", (e) => {
const SQLCode = SQLInput.value;
if (!confirm("Du har valt att köra kommandot: " + SQLCode + "\nÄr du säker?")) {
e.preventDefault();
}
if (SQLCode.match('/DELETE|DROP|TRUNCATE/gi')) {
if (!confirm("Ditt kommando kommer att ta bort värden eller en hel tabell, är du helt säker på att du vill fortsätta?")) {
e.preventDefault();
}
}
});
unapprovedRows.forEach(row => {
row.addEventListener("click", () => {
window.location.href = MediaplayerURL + row.dataset.row_id || "";
})
});
</script>
<?php
endif
?>
</main>
<script src="account.js"></script>
</body>
</html>