is115-php/modul8/index8_3.php

161 lines
5.7 KiB
PHP

<?php
include '../common.php';
// Bruker samme tilkoblingsinformasjon som er brukt i Modul 6.
include '../modul6/forberedelser.php';
include 'logger.inc.php';
Logger::log("Lastet modul 8 oppgave 3");
// Tilbakemeldingsholdere:
$err = array();
$msg = array();
// Mappe hvor bildene skal lagres
$medlemsBildeMappe = "medlemmer/";
// Hvis bildet skal lastes opp
if(isset($_POST["submit"], $_POST['medlemid'])){
// Hent filtypen for bildet
$imageFileType = strtolower(pathinfo(basename($_FILES["fileToUpload"]["name"]),PATHINFO_EXTENSION));
// Lag stien bildet skal ha
$target_file = $medlemsBildeMappe . $_POST['medlemid'].".".$imageFileType;
// Loggfør for oppgave 2
Logger::log("Startet opplasting av fil ".$target_file);
// Kontroll om det som er lastet opp er et bilde
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check === false) {
$err[] = "Opplastet fil er ikke et bilde.";
}
// Kontroller filstørrelse
if($_FILES["fileToUpload"]["size"] > 2_000_000){ // 2 000 000 skal være 2MB
$err[] = "Bildets filstørrelse er for stor";
}
// Kontroller filtyper
if($imageFileType != "jpg" && $imageFileType != "png"){
$err[] = "Bildets filformat er ikke tillatt. Kun .jpg og .png er tillatt.";
}
// Loggfør om filen finnes fra før og blir overskrevet
if(file_exists($target_file)){
Logger::log("Medlemmet $_POST[medlemid] hadde allerede et bilde, som nå er skrevet over.");
}
// Hvis ingen feil, last opp bildet
if(empty($err)){
if(move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $target_file)){
$msg[] = "Medlemmets bilde ble lastet opp!";
}
else {
$err[] = "Det skjedde noe galt med opplastingen, prøv på nytt.";
}
}
}
// Hvis et bildet er satt til å slettes
elseif(isset($_POST['fjernBilde'], $_POST['filnavn'])){
// Kjempeenkel sjekk om postens medlemsid finnes i filnavnet. ADVARSEL: kan (nok) misbrukes!!
if(strstr($_POST['filnavn'], $_POST['medlemid']) && !strstr('/', $_POST['filnavn'])){
// unlink sletter filer på filsystemet
if(unlink($medlemsBildeMappe."/".$_POST['filnavn'])){
$msg[] = "Bildet ble slettet!";
Logger::log("Slettet medlemsbilde ".$_POST['filnavn']);
}
}
else {
$err[] = "Bildet ble ikke slettet. Prøv igjen.";
}
}
?><!DOCTYPE html>
<html lang="no">
<head>
<title><?=title();?></title>
<link rel="stylesheet" href="../index.css">
</head>
<body>
<div class="container">
<h1><?=title();?></h1>
<h4><?=getNavigation();?></h4>
<h2>Medlemsliste</h2>
<?php
// Her skriver vi ut feilmeldinger eller suksess-meldinger som er generert. Dette for å få et finere brukergrensesnitt.
if(!empty($err)){
foreach ($err as $e){
echo "<p class='error'>".$e."</p>\n";
}
}
if(!empty($msg)){
foreach ($msg as $m){
echo "<p class='suksess'>".$m."</p>\n";
}
}
?>
</div>
<div style="text-align: center; margin-bottom: 50px;">
<?php
// Henter medlemmer fra modul 6. (Og spør om du vil lage dem i databasen din hvis tabellen ikke finnes)
$medlemmer = hentMedlemmer($_GET['size'] ?? 20, $_GET['page'] ?? 1);
// Lag tabell for medlemmer
if(!empty($medlemmer)){
?>
<table class="table">
<thead>
<tr>
<th>#</th>
<th>Fornavn</th>
<th>Etternavn</th>
<th>Poststed</th>
<th>E-post</th>
<th>Bilde</th>
</tr>
</thead>
<tbody>
<?php
foreach ($medlemmer as $medlemID => $medlem){
echo "<tr>\n";
echo " <td>".($medlem->dbid)."</td>\n";
echo " <td>".($medlem->fornavn ?? '')."</td>\n";
echo " <td>".($medlem->etternavn ?? '')."</td>\n";
echo " <td>".$medlem->poststed."</td>\n";
echo " <td>".($medlem->epost ?? '')."</td>\n";
// Hvis bildet for brukeren finnes i png (deretter jpg) skrives dette ut, sammen med en form for å slette
if(file_exists($medlemsBildeMappe."/".$medlem->dbid.'.png')){
echo "<td>";
echo "<img src='$medlemsBildeMappe/{$medlem->dbid}.png' style='height: 75px;'>";
echo "<form method='post'><input type='hidden' name='medlemid' value='".$medlem->dbid."'><input type='hidden' name='filnavn' value='{$medlem->dbid}.png'><input type='submit' value='Slett bilde' name='fjernBilde'></form>";
echo "</td>";
}
else if(file_exists($medlemsBildeMappe."/".$medlem->dbid.'.jpg')){
echo "<td>";
echo "<img src='$medlemsBildeMappe/{$medlem->dbid}.jpg' style='height: 75px;'>";
echo "<form method='post'><input type='hidden' name='medlemid' value='".$medlem->dbid."'><input type='hidden' name='filnavn' value='{$medlem->dbid}.jpg'><input type='submit' value='Slett bilde' name='fjernBilde'></form>";
echo "</td>";
}
else {
echo " <td>
<form method=\"post\" enctype=\"multipart/form-data\">
<input type='hidden' name='medlemid' value='".$medlem->dbid."'>
Last opp bilde<br>
<input type=\"file\" name=\"fileToUpload\" id=\"fileToUpload\" required>
<input type=\"submit\" value=\"Upload Image\" name=\"submit\">
</form></td>\n";
}
echo "</tr>\n";
}
?>
</tbody>
</table>
<?php } ?>
</div>
</body>
</html>