Modul 8
parent
8cab32e726
commit
0d09e76c73
|
@ -75,7 +75,7 @@ pre {
|
|||
border-collapse: collapse;
|
||||
}
|
||||
.table tr:nth-child(2n) {
|
||||
background-color: #0002;
|
||||
background-color: #fff2;
|
||||
}
|
||||
|
||||
.interesse-wrapper {
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
../modul1/index.php
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
$modul = substr($_SERVER['REQUEST_URI'],-2,1);
|
||||
|
||||
function getModuleName($input): string {
|
||||
$oppg = substr($input, -5, 1);
|
||||
if(is_numeric($oppg)){
|
||||
return "Oppgave $oppg";
|
||||
}
|
||||
return explode('.', $input)[0];
|
||||
}
|
||||
?><!DOCTYPE html>
|
||||
<html lang="no">
|
||||
<head>
|
||||
<title>IS-115 - Webprogrammering i PHP</title>
|
||||
<link rel="stylesheet" href="../index.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>IS-115 - Webprogrammering i PHP</h1>
|
||||
<h3>
|
||||
Modul <?=$modul;?>
|
||||
</h3>
|
||||
<h5>
|
||||
<strong><a href="../">Tilbake til alle moduler</a></strong>
|
||||
</h5>
|
||||
|
||||
<?php
|
||||
$dir = array(
|
||||
"index8_1.php",
|
||||
"index8_2.php",
|
||||
"index8_3.php",
|
||||
"index8_4.php",
|
||||
"index8_5.php"
|
||||
);
|
||||
foreach($dir as $item){
|
||||
echo "<p><a href='$item'>".getModuleName($item)."</a></p>\n";
|
||||
}
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,7 +1,10 @@
|
|||
<?php
|
||||
include '../common.php';
|
||||
|
||||
// Logger for oppgave 2
|
||||
include 'logger.inc.php';
|
||||
Logger::log("Lastet modul 8 oppgave 1");
|
||||
|
||||
?><!DOCTYPE html>
|
||||
<html lang="no">
|
||||
<head>
|
||||
|
@ -36,20 +39,23 @@ Logger::log("Lastet modul 8 oppgave 1");
|
|||
// Scan nåværende mappe med scandir();
|
||||
$katalog = array_diff( scandir("./"), array('..','.'));
|
||||
|
||||
// For hver fil i mappa gjøres sjekker:
|
||||
foreach ($katalog as $fil){
|
||||
echo "<tr>";
|
||||
echo " <td>$fil</td>";
|
||||
$type = filetype($fil);
|
||||
echo " <td>".$type.($type == "file"?' ('.mime_content_type($fil).')':'')."</td>";
|
||||
echo " <td>".filStr(filesize($fil))."</td>";
|
||||
echo " <td>".date('d.m.y H:i', filemtime($fil))."</td>";
|
||||
echo " <td>".(is_readable($fil)?"Ja":"Nei")."</td>";
|
||||
echo " <td>".(is_writable($fil)?"Ja":"Nei")."</td>";
|
||||
echo " <td>".(is_executable($fil)?"Ja":"Nei")."</td>";
|
||||
echo " <td>$fil</td>"; // FILNAVNET
|
||||
$type = pathinfo($fil, PATHINFO_EXTENSION); // Fil-endelse
|
||||
if(filetype($fil) == "dir"){ $type = "mappe"; } // Hvis $fil er en mappe så skrives det
|
||||
echo " <td>".$type."</td>";
|
||||
echo " <td>".filStr(filesize($fil))."</td>"; // Skriver fint hvor stor filen er
|
||||
echo " <td>".date('d.m.y H:i', filemtime($fil))."</td>"; // Skriver datoen for når filen ble sist endret
|
||||
echo " <td>".(is_readable($fil)?"Ja":"Nei")."</td>"; // Sjekk om filen er lesbar
|
||||
echo " <td>".(is_writable($fil)?"Ja":"Nei")."</td>"; // Sjekk om filen er skrivbar
|
||||
echo " <td>".(is_executable($fil)?"Ja":"Nei")."</td>"; // Sjekk om filen er kjørbar
|
||||
echo "</tr>\n";
|
||||
}
|
||||
|
||||
function filStr(int $str){
|
||||
// Kunne gått høyere, men ikke aktuelt i dette scenarioet
|
||||
if($str / 1024 / 1024 > 1){ return round($str/1024/1024, 1)." MB"; }
|
||||
else if($str / 1024 > 0){ return round($str/1024, 1)." KB"; }
|
||||
else {
|
||||
|
|
|
@ -3,12 +3,25 @@ ini_set('display_errors',1);
|
|||
|
||||
include '../common.php';
|
||||
include 'logger.inc.php';
|
||||
//Logger::log("Lastet modul 8 oppgave 2");
|
||||
|
||||
if(!empty($_POST)){
|
||||
if(isset($_POST['doOne'])) {
|
||||
Logger::log("Gjorde noe");
|
||||
}
|
||||
else {
|
||||
Logger::log("Gjorde noe annet!");
|
||||
}
|
||||
}
|
||||
?><!DOCTYPE html>
|
||||
<html lang="no">
|
||||
<head>
|
||||
<title><?=title();?></title>
|
||||
<link rel="stylesheet" href="../index.css">
|
||||
<style>
|
||||
.table th {
|
||||
padding-right: 10px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
@ -17,9 +30,23 @@ include 'logger.inc.php';
|
|||
<h4><?=getNavigation();?></h4>
|
||||
<h2>Loggfunksjon</h2>
|
||||
|
||||
<table class="table">
|
||||
<caption><strong>Siste 10 loggmeldinger:</strong></caption>
|
||||
<?php
|
||||
Logger::sisteMeldinger();
|
||||
$logg = Logger::sisteMeldinger();
|
||||
foreach ($logg as $l){
|
||||
echo "<tr>";
|
||||
echo " <th>$l[0]</th>";
|
||||
echo " <td>$l[1]</td>";
|
||||
echo "</tr>\n";
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
|
||||
<form method="post">
|
||||
<input type="submit" name="doOne" value="Gjør noe">
|
||||
<input type="submit" name="doTwo" value="Gjør noe annet">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
|
|
@ -0,0 +1,161 @@
|
|||
<?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>
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
// Hvis ikke medlem-id er sendt med forespørselen så videresend brukeren til oppgave-siden
|
||||
if(!isset($_GET['medlemid'])){
|
||||
header("Location: index8_4.php");
|
||||
}
|
||||
|
||||
$medlemsBildeMappe = "medlemmer/";
|
||||
$mid = $_GET['medlemid'];
|
||||
|
||||
include 'logger.inc.php';
|
||||
Logger::log("Startet nedlasting av bildet til medlem $mid");
|
||||
|
||||
|
||||
// Sjekk om png-filen eksisterer
|
||||
if(file_exists($medlemsBildeMappe."/".$mid.'.png')) {
|
||||
// Set header med innholdet
|
||||
header('Content-Type: image/png');
|
||||
$ext = ".png";
|
||||
}
|
||||
// Sjekk om jpg-filen eksisterer
|
||||
else if(file_exists($medlemsBildeMappe."/".$mid.'.jpg')){
|
||||
header('Content-Type: image/jpeg');
|
||||
$ext = ".jpg";
|
||||
}
|
||||
|
||||
// 'Fortell' nettleseren at filen skal lastes ned
|
||||
header('Content-Disposition: attachment; filename="'.$mid.$ext.'"');
|
||||
|
||||
// Skriv ut filens innhold
|
||||
echo file_get_contents($medlemsBildeMappe."/".$mid.$ext);
|
|
@ -0,0 +1,77 @@
|
|||
<?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 4");
|
||||
|
||||
$medlemsBildeMappe = "medlemmer/";
|
||||
|
||||
?><!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>
|
||||
</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";
|
||||
|
||||
echo "<td>";
|
||||
if(file_exists($medlemsBildeMappe."/".$medlem->dbid.'.png')){
|
||||
echo "<img src='$medlemsBildeMappe/{$medlem->dbid}.png' style='height: 75px;'>";
|
||||
echo "<a href='index8_4-download.php?medlemid=".$medlem->dbid."'><button>Last ned...</button></a>";
|
||||
}
|
||||
else if(file_exists($medlemsBildeMappe."/".$medlem->dbid.'.jpg')){
|
||||
echo "<img src='$medlemsBildeMappe/{$medlem->dbid}.jpg' style='height: 75px;'>";
|
||||
echo "<a href='index8_4-download.php?medlemid=".$medlem->dbid."'><button>Last ned...</button></a>";
|
||||
}
|
||||
else {
|
||||
echo " Medlemmet har ikke et bilde.\n";
|
||||
}
|
||||
echo "</td>\n";
|
||||
|
||||
echo "</tr>\n";
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -3,27 +3,29 @@ define('LOGGFIL', 'log.log');
|
|||
|
||||
class Logger {
|
||||
public static function log($melding){
|
||||
|
||||
if(!file_exists(LOGGFIL)){
|
||||
file_put_contents(LOGGFIL,'');
|
||||
}
|
||||
|
||||
$nesteRad = time().":\t ".$melding;
|
||||
file_put_contents(LOGGFIL, file_get_contents(LOGGFIL)."\n".$nesteRad);
|
||||
}
|
||||
|
||||
|
||||
public static function sisteMeldinger($antall = 10){
|
||||
$logOut = array();
|
||||
|
||||
if(!file_exists(LOGGFIL)){ return $logOut; }
|
||||
|
||||
$logg = explode("\n", file_get_contents(LOGGFIL));
|
||||
|
||||
for($i = count($logg)-1-$antall; $i < count($logg)-1; $i++){
|
||||
for($i = count($logg)-$antall; $i < count($logg); $i++){
|
||||
if($i > 0){
|
||||
$loggRad = explode(":\t", $logg[$i], 2);
|
||||
echo "<i>".date('d. M H:i:s', $loggRad[0])."</i> ".$loggRad[1]."<br>";
|
||||
}
|
||||
else {
|
||||
// break;
|
||||
$logOut[] = array(date('d. M - H:i:s', $loggRad[0]), $loggRad[1]);
|
||||
}
|
||||
}
|
||||
return $logOut;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue