Modul 6 oppgave 1

master
Eirik Th S 2021-11-03 23:15:59 +01:00
parent 83ea06327d
commit 801ea4071d
5 changed files with 243 additions and 0 deletions

6
modul6/database.php Normal file
View File

@ -0,0 +1,6 @@
<?php
define("DB_HOST", "localhost");
define("DB_USER", "brukernavn");
define("DB_PASS", "passord");
define("DB_BASE", "database");

76
modul6/forberedelser.php Normal file
View File

@ -0,0 +1,76 @@
<?php
require 'database.php';
$tabellSQL = "
CREATE OR REPLACE TABLE Postnummer (
postnummer INT(4) NOT NULL PRIMARY KEY,
poststed VARCHAR(30) NOT NULL
);
CREATE OR REPLACE TABLE Medlem (
medlemId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
fornavn VARCHAR(40) NOT NULL,
etternavn VARCHAR(40) NOT NULL,
adresse VARCHAR(40) NOT NULL,
postnummer INT(4) NOT NULL,
epost VARCHAR(100) NOT NULL UNIQUE,
dob DATE NOT NULL,
kjoenn ENUM('M', 'F', 'O') NOT NULL,
kontigentStatus ENUM('BETALT', 'IKKE_BETALT') NOT NULL DEFAULT 'IKKE_BETALT',
medlemStart DATE NOT NULL,
FOREIGN KEY (postnummer) REFERENCES Postnummer(postnummer)
);
";
function getPdoConn(): PDO {
$conn = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_BASE . "", DB_USER, DB_PASS);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $conn;
}
class Medlem {
public string $rolle = "Standard";
public int $dbid;
public string $fornavn = '';
public string $etternavn = '';
public string $adresse1 = '';
public string $adresse2 = '';
public int $postnummer;
public string $poststed = '';
public string $epost = '';
public DateTime $dob;
public string $kjoenn = '';
public string $interesser = '';
public string $kursaktiviteter = '';
public DateTime $medlem_siden;
public string $kontigentstatus = '';
public function set($felt, $verdi){
$this->${$felt} = $verdi;
}
public function get($felt){
return $this->${$felt};
}
}
// Caching av poststed
$poststed = array();
function hentPoststed($postnummer): string {
global $poststed;
if(!$poststed[ $postnummer ]){
$db = getPdoConn();
$stmt = $db->prepare("SELECT postnummer, poststed FROM Postnummer WHERE postnummer = ?");
$stmt->execute([$postnummer]);
foreach ($stmt as $row){
$poststed[$row['postnummer']] = $row['poststed'];
}
}
return $poststed[$postnummer] ?? "Ukjent";
}

1
modul6/index.php Symbolic link
View File

@ -0,0 +1 @@
../modul1/index.php

127
modul6/index6_1.php Normal file
View File

@ -0,0 +1,127 @@
<?php
include '../common.php';
include 'forberedelser.php';
?><!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
$medlemmer = array();
$perPage = $_GET['size'] ?? 20;
$pageStart = $_GET['page']?($_GET['page']-1)*$perPage:0;
// Åpne databasetilkobling som definert i forberedelser.php
$db = null;
try {
$db = getPdoConn();
}
catch (PDOException $e){
die("Fikk ikke koblet til: <br>\n".$e);
}
$hentMedlemmer = "
SELECT medlemId, fornavn, etternavn, adresse, m.postnummer, p.poststed, epost, dob, kjoenn, kontigentStatus, medlemStart
FROM Medlem m
INNER JOIN Postnummer p ON m.postnummer = p.postnummer
ORDER BY etternavn, fornavn
LIMIT $pageStart,$perPage
";
try {
$statement = $db->prepare($hentMedlemmer);
$statement->execute();
$statement->setFetchMode(PDO::FETCH_ASSOC);
$resultat = $statement->fetchAll();
foreach ($resultat as $key => $row){
$medlem = new Medlem();
$medlem->dbid = $row['medlemId'];
$medlem->fornavn = $row['fornavn'];
$medlem->etternavn = $row['etternavn'];
$medlem->adresse1 = $row['adresse'];
$medlem->postnummer = $row['postnummer'];
$medlem->poststed = $row['poststed'];
$medlem->epost = $row['epost'];
$medlem->dob = DateTime::createFromFormat('Y-m-d', $row['dob'] );
$medlem->kjoenn = $row['kjoenn'];
$medlem->kontigentstatus = $row['kontigentStatus'];
$medlem->medlem_siden = DateTime::createFromFormat('Y-m-d', $row['medlemStart'] );
array_push($medlemmer, $medlem);
}
}
catch (PDOException $e){
echo "SQL-feil: <br>\n".$e;
} finally {
$db = null;
}
?>
</div>
<div style="text-align: center; margin-bottom: 50px;">
<?php
// Koden er ganske lik den brukt i modul 4 oppgave 3.
if(!empty($medlemmer)){
?>
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>Fornavn</th>
<th>Etternavn</th>
<th>Adresse</th>
<th>Postnummer/-sted</th>
<th>Mobilnummer</th>
<th>E-post</th>
<th>Fødselsdato</th>
<th>Kjønn</th>
<th>Interesser</th>
<th>Kursaktiviteter</th>
<th>Medlem siden</th>
<th>Kontigentstatus</th>
</tr>
</thead>
<tbody>
<?php
foreach ($medlemmer as $medlemID => $medlem){
echo "<tr>\n";
echo " <td>".($medlemID+1)."</td>\n";
echo " <td>".($medlem->fornavn ?? '')."</td>\n";
echo " <td>".($medlem->etternavn ?? '')."</td>\n";
echo " <td>".($medlem->adresse1 ?? '');
if(!empty($medlem->adresse2)){ echo "<br>".$medlem->adresse2; } // Skriver inn adresselinje 2 hvis aktuelt
echo "</td>\n";
echo " <td>{$medlem->postnummer} {$medlem->poststed}</td>\n";
echo " <td>".($medlem->mobilnummer ?? '')."</td>\n";
echo " <td>".($medlem->epost ?? '')."</td>\n";
echo " <td>".($medlem->dob->format('d. M Y') ?? '')."</td>\n";
echo " <td>".($medlem->kjoenn ?? '')."</td>\n";
echo " <td>".($medlem->interesser ?? '')."</td>\n";
echo " <td>".($medlem->kursaktiviteter ?? '')."</td>\n";
echo " <td>".($medlem->medlem_siden->format('d. M Y') ?? '')."</td>\n";
echo " <td>".($medlem->kontigentstatus ?? '')."</td>\n";
echo "</tr>\n";
}
?>
</tbody>
</table>
<?php } ?>
</div>
</body>
</html>

33
modul6/index6_2.php Normal file
View File

@ -0,0 +1,33 @@
<?php
include '../common.php';
include 'forberedelser.php';
?><!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
echo hentPoststed(4614)."<br>\n";
echo hentPoststed(4614)."<br>\n";
echo hentPoststed(4462)."<br>\n";
echo hentPoststed(4614)."<br>\n";
echo hentPoststed(4462)."<br>\n";
echo hentPoststed(4614)."<br>\n";
echo hentPoststed(4615)."<br>\n";
?>
</div>
</body>
</html>