Compare commits
2 Commits
746b5b3278
...
d36d353ce2
Author | SHA1 | Date |
---|---|---|
Eirik Th S | d36d353ce2 | |
Eirik Th S | 8a977a019f |
|
@ -28,7 +28,7 @@ function getModuleName($input): string {
|
|||
|
||||
<?php
|
||||
foreach($dir as $item){
|
||||
if(stristr($item, '.php') || stristr($item, '.pdf')){
|
||||
if((stristr($item, '.php') || stristr($item, '.pdf')) && !stristr($item, '.inc.php')){
|
||||
echo "<p><a href='$item'>".getModuleName($item)."</a></p>\n";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
require 'database.php';
|
||||
|
||||
DEFINE('SELECTED', 'selected');
|
||||
|
||||
$tabellSQL = "
|
||||
CREATE OR REPLACE TABLE Postnummer (
|
||||
postnummer INT(4) NOT NULL PRIMARY KEY,
|
||||
|
@ -22,8 +23,90 @@ CREATE OR REPLACE TABLE Medlem (
|
|||
medlemStart DATE NOT NULL,
|
||||
FOREIGN KEY (postnummer) REFERENCES Postnummer(postnummer)
|
||||
);
|
||||
|
||||
INSERT INTO Postnummer VALUES (4462, 'Hovsherad'), (4614, 'Kristiansand');
|
||||
|
||||
INSERT INTO Medlem VALUES
|
||||
(NULL, 'Jens', 'Jensen', 'Brødgata 12', 4462, '12345678', 'jens@jensen.org', '2000-11-19', 'M', 'BETALT', '2019-11-11'),
|
||||
(NULL, 'Per', 'Persen', 'Per Gaten', 4614, '87654321', 'perper@pearson.org', '1996-01-18', 'O', 'BETALT', '2019-11-12'),
|
||||
(NULL, 'Lina', 'Linn', 'Linjegata 72', 4614, '12341234', 'linn@linnea.no', '2002-07-26', 'F', 'BETALT', '2019-11-13')
|
||||
;";
|
||||
|
||||
$aktivitetSQL = "CREATE OR REPLACE TABLE Aktivitet (
|
||||
aktivitetId int auto_increment primary key,
|
||||
navn varchar(40) not null,
|
||||
beskrivelse varchar(500) default '' null,
|
||||
ansvarligId int not null,
|
||||
start datetime not null,
|
||||
slutt datetime not null,
|
||||
constraint aktivitet_ansvarlig_FK foreign key (ansvarligId) references Medlem (medlemId)
|
||||
);
|
||||
|
||||
INSERT INTO Aktivitet VALUES
|
||||
(NULL, 'Kino', 'Kinodag i kristiansand woho', 1, '2021-07-07 19:00', '2021-07-07 21:00'),
|
||||
(NULL, 'Tur', 'Tur til kina', 1, '2021-12-07 19:00', '2022-03-07 21:00'),
|
||||
(NULL, 'Turnering', 'Fotball Turnering', 1, '2022-07-07 19:00', '2022-07-07 21:00');
|
||||
";
|
||||
|
||||
$interesseSQL = "
|
||||
CREATE OR REPLACE TABLE Interesse (
|
||||
interesseId int auto_increment primary key,
|
||||
navn varchar(30) not null
|
||||
);
|
||||
CREATE OR REPLACE TABLE Interesse_register (
|
||||
medlemId int not null,
|
||||
interesseId int not null,
|
||||
primary key (medlemId, interesseId),
|
||||
constraint interesse_medlem_FK foreign key (medlemId) references Medlem (medlemId),
|
||||
constraint interesse_FK foreign key (interesseId) references Interesse (interesseId)
|
||||
);
|
||||
INSERT INTO Interesse VALUES
|
||||
(NULL, 'Biljard'),
|
||||
(NULL, 'Bordtennis'),
|
||||
(NULL, 'Dans'),
|
||||
(NULL, 'Musikk');
|
||||
|
||||
INSERT INTO Interesse_register VALUES
|
||||
(1, 1), (1, 2),
|
||||
(2, 1), (2, 2), (2, 4),
|
||||
(3, 2), (3, 3)
|
||||
;";
|
||||
|
||||
if(isset($_POST['lagMedlemTabell'])){
|
||||
try {
|
||||
$db = getPdoConn();
|
||||
$db->exec($tabellSQL);
|
||||
$db = null;
|
||||
echo "Lagde medlemstabell"."<br>\n";
|
||||
}
|
||||
catch (PDOException $e){
|
||||
echo "Greide ikke lage tabell:<br>\n".$e."<br>\n";
|
||||
}
|
||||
}
|
||||
elseif(isset($_POST['lagAktivitetTabell'])){
|
||||
try {
|
||||
$db = getPdoConn();
|
||||
$db->exec($aktivitetSQL);
|
||||
$db = null;
|
||||
echo "Lagde aktivitetstabell"."<br>\n";
|
||||
}
|
||||
catch (PDOException $e){
|
||||
echo "Greide ikke lage aktivitetstabell:<br>\n".$e."<br>\n";
|
||||
}
|
||||
}
|
||||
elseif(isset($_POST['lagInteresseTabell'])){
|
||||
try {
|
||||
$db = getPdoConn();
|
||||
$db->exec($interesseSQL);
|
||||
$db = null;
|
||||
echo "Lagde interessetabell!"."<br>\n";
|
||||
}
|
||||
catch (PDOException $e){
|
||||
echo "Greide ikke lage interesse-tabell:<br>\n".$e."<br>\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getPdoConn(): PDO {
|
||||
$conn = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_BASE . "", DB_USER, DB_PASS);
|
||||
|
||||
|
@ -33,7 +116,7 @@ function getPdoConn(): PDO {
|
|||
}
|
||||
|
||||
class Medlem {
|
||||
public static $stringNames = array("fornavn", "etternavn", "adresse1", "adresse2", "poststed", "mobilnummer", "epost", "kjoenn", "interesser", "kursaktiviteter", "kontigentstatus");
|
||||
public static $stringNames = array("fornavn", "etternavn", "adresse1", "adresse2", "poststed", "mobilnummer", "epost", "kjoenn", "kontigentstatus"); // Tatt ut fra tidligere "interesser", "kursaktiviteter",
|
||||
public static $intFields = array("postnummer");
|
||||
public static $dateFields = array("dob", "medlem_siden");
|
||||
|
||||
|
@ -72,8 +155,38 @@ class Medlem {
|
|||
return $this->${$felt};
|
||||
}
|
||||
|
||||
public function verifyMember():bool{
|
||||
return
|
||||
public function verifyMember() {
|
||||
$err = array();
|
||||
|
||||
$fields = array("fornavn", "etternavn", "adresse1", "postnummer", "poststed");
|
||||
foreach($fields as $field){
|
||||
// Her brukes en metode som lar deg sjekke variabler fra en liste. ${ } lar deg sette inn andre variabler som da blir variabel-navnet.
|
||||
if($this->{$field} == ""){
|
||||
$err[] = "Feltet '".$field."' er tomt eller ugyldig.";
|
||||
}
|
||||
}
|
||||
|
||||
if($this->epost == ""){
|
||||
$err[] = "Epost-adressen mangler.";
|
||||
}
|
||||
elseif(!strpos($this->epost, '@') && !strpos($this->epost, '.')){
|
||||
$err[] = "Epost-adressen er ikke gylid.";
|
||||
}
|
||||
|
||||
if($this->dob->diff( new DateTime() )->days < 1){
|
||||
$err[] = "Medlemmet er født i dag. Sjekk om fødselsdatoen er riktig.";
|
||||
}
|
||||
|
||||
if(!in_array($this->kjoenn, array("M","F","O"))){
|
||||
$err[] = "Vennligst velg et kjønn.";
|
||||
}
|
||||
|
||||
if(!in_array($this->kontigentstatus, array('BETALT', 'IKKE_BETALT'))){
|
||||
$err[] = "Vennligst før inn om kontigenten er betalt.";
|
||||
}
|
||||
return $err;
|
||||
|
||||
/*return
|
||||
!empty($this->fornavn) &&
|
||||
!empty($this->etternavn) &&
|
||||
!empty($this->adresse1) &&
|
||||
|
@ -82,11 +195,11 @@ class Medlem {
|
|||
!empty($this->dob) &&
|
||||
!empty($this->kjoenn) &&
|
||||
!empty($this->medlem_siden) &&
|
||||
!empty($this->kontigentstatus);
|
||||
!empty($this->kontigentstatus);*/
|
||||
}
|
||||
|
||||
public function persistMember(){
|
||||
if($this->verifyMember()){
|
||||
if(empty($this->verifyMember())){
|
||||
$db = getPdoConn();
|
||||
|
||||
if(hentPoststed($this->postnummer) === false){
|
||||
|
@ -99,7 +212,6 @@ class Medlem {
|
|||
$kommuneStmt->execute();
|
||||
}
|
||||
|
||||
|
||||
$insertSQL = "INSERT INTO Medlem (fornavn, etternavn, adresse, postnummer, mobilnummer, epost, dob, kjoenn, kontigentStatus, medlemStart) VALUES (?,?,?,?,?,?,?,?,?,?);";
|
||||
|
||||
$statement = $db->prepare($insertSQL);
|
||||
|
@ -115,19 +227,12 @@ class Medlem {
|
|||
$statement->bindValue(9, $this->kontigentstatus);
|
||||
$statement->bindValue(10, $this->medlem_siden->format("Y-m-d"));
|
||||
|
||||
echo $statement->queryString;
|
||||
|
||||
$statement->execute();
|
||||
|
||||
// var_dump($statement);
|
||||
}
|
||||
|
||||
// '{$this->fornavn}', '{$this->etternavn}', '{$this->adresse1}\n{$this->adresse2}'
|
||||
|
||||
}
|
||||
|
||||
public function updateMemberRow(){
|
||||
$db = getPdoConn();
|
||||
// $db = getPdoConn();
|
||||
|
||||
$updateSQLValues = array();
|
||||
foreach ($this->endret as $key => $value){
|
||||
|
@ -136,6 +241,7 @@ class Medlem {
|
|||
$sql = "UPDATE Medlem SET ".implode(', ', $updateSQLValues);
|
||||
|
||||
$sql .= " WHERE medlemId = ?";
|
||||
echo $sql;
|
||||
|
||||
// $statement = $db->prepare($sql);
|
||||
|
||||
|
@ -166,41 +272,47 @@ function hentMedlem($dbid){
|
|||
return hentMedlemmer(null, null, $dbid)[$dbid];
|
||||
}
|
||||
|
||||
function hentMedlemmer($perSide = 20, $side = 1, $medlemId = 0){
|
||||
function hentMedlemmer($perSide = 20, $side = 1, $medlemId = 0): array {
|
||||
$sideStart = $side?($side-1)*$perSide:0;
|
||||
$medlemmer = array();
|
||||
$order = array();
|
||||
|
||||
$hentMedlemmerSQL = "
|
||||
SELECT medlemId, fornavn, etternavn, adresse, m.postnummer, p.poststed, epost, dob, kjoenn, kontigentStatus, medlemStart
|
||||
SELECT medlemId, fornavn, etternavn, adresse, m.postnummer, p.poststed, mobilnummer, epost, dob, kjoenn, kontigentStatus, medlemStart
|
||||
FROM Medlem m
|
||||
INNER JOIN Postnummer p ON m.postnummer = p.postnummer
|
||||
";
|
||||
|
||||
// Hvis det er spesifisert en medlemsid legges en WHERE til i SQL-spørringen
|
||||
if($medlemId > 0){
|
||||
$hentMedlemmerSQL .= " WHERE `medlemId` = ?";
|
||||
}
|
||||
else {
|
||||
// Tillater dynamisk sortering
|
||||
$order[] = "etternavn";
|
||||
$order[] = "fornavn";
|
||||
$hentMedlemmerSQL .= "ORDER BY ".implode(', ', $order)." LIMIT $sideStart,$perSide";
|
||||
}
|
||||
|
||||
try {
|
||||
// Åpne databasetilkobling som definert
|
||||
// Åpne databasetilkobling som definert lengre oppe.
|
||||
$db = getPdoConn();
|
||||
|
||||
// Prepare and execute statement
|
||||
// Forbered spørringen
|
||||
$statement = $db->prepare($hentMedlemmerSQL);
|
||||
// Hvis det er spesifisert en medlemsId legges verdien inn her
|
||||
if($medlemId > 0){
|
||||
$statement->bindValue(1,$medlemId);
|
||||
}
|
||||
// Utfør spørringen
|
||||
$statement->execute();
|
||||
|
||||
// Fetchmode FETCH_ASSOC for å få med keys-verdiene
|
||||
$statement->setFetchMode(PDO::FETCH_ASSOC);
|
||||
$resultat = $statement->fetchAll();
|
||||
|
||||
foreach ($resultat as $row){
|
||||
foreach ($statement->fetchAll() as $row){
|
||||
// Defineres et nytt objekt per Medlem-klassen. (Se lengre oppe)
|
||||
// Deretter settes alle verdiene inn
|
||||
$medlem = new Medlem();
|
||||
$medlem->dbid = $row['medlemId'];
|
||||
$medlem->fornavn = $row['fornavn'];
|
||||
|
@ -210,6 +322,7 @@ function hentMedlemmer($perSide = 20, $side = 1, $medlemId = 0){
|
|||
$medlem->adresse2 = $adresser[1] ?? '';
|
||||
$medlem->postnummer = $row['postnummer'];
|
||||
$medlem->poststed = $row['poststed'];
|
||||
$medlem->mobilnummer = $row['mobilnummer'] ?? '';
|
||||
$medlem->epost = $row['epost'];
|
||||
$medlem->dob = DateTime::createFromFormat('Y-m-d', $row['dob'] );
|
||||
$medlem->kjoenn = $row['kjoenn'];
|
||||
|
@ -220,7 +333,12 @@ function hentMedlemmer($perSide = 20, $side = 1, $medlemId = 0){
|
|||
}
|
||||
}
|
||||
catch (PDOException $e){
|
||||
echo "SQL-feil: <br>\n".$e;
|
||||
if($e->getCode() == "42S02"){
|
||||
echo "Tabellen finnes ikke. <form method='post'><input type='submit' name='lagMedlemTabell' value='Lage den?'></form>";
|
||||
}
|
||||
else {
|
||||
echo "SQL-feil: <br>\n".var_dump($e);
|
||||
}
|
||||
} finally {
|
||||
$db = null;
|
||||
return $medlemmer;
|
||||
|
@ -284,7 +402,12 @@ function hentAktivitet($id = false, $all = false){
|
|||
}
|
||||
}
|
||||
catch (PDOException $e){
|
||||
echo "SQL-feil: <br>\n".$e;
|
||||
if($e->getCode() == "42S02"){
|
||||
echo "Tabellen finnes ikke. <form method='post'><input type='submit' name='lagAktivitetTabell' value='Lage den?'></form>";
|
||||
}
|
||||
else {
|
||||
echo "SQL-feil: <br>\n".$e;
|
||||
}
|
||||
}
|
||||
finally {
|
||||
$db = null;
|
||||
|
@ -333,7 +456,12 @@ function hentInteresser(){
|
|||
}
|
||||
}
|
||||
catch (PDOException $e){
|
||||
echo "SQL-feil: ".$e;
|
||||
if($e->getCode() == "42S02"){
|
||||
echo "Tabellen finnes ikke. <form method='post'><input type='submit' name='lagInteresseTabell' value='Lage den?'></form>";
|
||||
}
|
||||
else {
|
||||
echo "SQL-feil: ".$e;
|
||||
}
|
||||
}
|
||||
finally {
|
||||
$db = null;
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<?php
|
||||
include '../common.php';
|
||||
|
||||
// Forberedelser er en fil med funksjoner og klasser for diverse brukte metoder. De er lagt der for å lettere kunne
|
||||
// bruke dem flere steder, og så er det mye ryddigere.
|
||||
include 'forberedelser.php';
|
||||
|
||||
?><!DOCTYPE html>
|
||||
|
@ -20,13 +22,9 @@ include 'forberedelser.php';
|
|||
// Tom matrise som skal holde Medlem-objekter.
|
||||
$medlemmer = array();
|
||||
|
||||
// Sidetall, i tilfelle det er kjempemange medlemmer. (Standard 20 per side, side 1)
|
||||
$perPage = $_GET['size'] ?? 20;
|
||||
$pageStart = $_GET['page']?($_GET['page']-1)*$perPage:0;
|
||||
|
||||
// Se funkjson i forberedelser.php
|
||||
// Se funksjonen i forberedelser.php
|
||||
// Parametrene er sidetall, i tilfelle det er kjempemange medlemmer. (Standard 20 per side, side 1)
|
||||
$medlemmer = hentMedlemmer($_GET['size'] ?? 20, $_GET['page'] ?? 1);
|
||||
|
||||
?>
|
||||
</div>
|
||||
|
||||
|
@ -38,7 +36,7 @@ include 'forberedelser.php';
|
|||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>#</th>
|
||||
<th>Fornavn</th>
|
||||
<th>Etternavn</th>
|
||||
<th>Adresse</th>
|
||||
|
@ -47,17 +45,19 @@ include 'forberedelser.php';
|
|||
<th>E-post</th>
|
||||
<th>Fødselsdato</th>
|
||||
<th>Kjønn</th>
|
||||
<th>Interesser</th>
|
||||
<th>Kursaktiviteter</th>
|
||||
<!-- <th>Interesser</th>-->
|
||||
<!-- <th>Kursaktiviteter</th>-->
|
||||
<th>Medlem siden</th>
|
||||
<th>Kontigentstatus</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$counter = 0;
|
||||
foreach ($medlemmer as $medlemID => $medlem){
|
||||
$counter++;
|
||||
echo "<tr>\n";
|
||||
echo " <td>".($medlemID+1)."</td>\n";
|
||||
echo " <td>".($counter)."</td>\n";
|
||||
echo " <td>".($medlem->fornavn ?? '')."</td>\n";
|
||||
echo " <td>".($medlem->etternavn ?? '')."</td>\n";
|
||||
echo " <td>".($medlem->adresse1 ?? '');
|
||||
|
@ -68,10 +68,11 @@ include 'forberedelser.php';
|
|||
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>".(implode(', ', $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 " <td><form action='index6_2.php'><input type='hidden' name='memberid' value='".$medlem->dbid."'><input type='submit' value='Rediger...'></form></td>\n";
|
||||
echo "</tr>\n";
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -32,28 +32,30 @@ if(!empty($_POST)){
|
|||
$medlem->dob = DateTime::createFromFormat('Y-m-d', $_POST['dob']);
|
||||
$medlem->medlem_siden = DateTime::createFromFormat('Y-m-d', $_POST['medlem_siden']);
|
||||
|
||||
echo "Verified? ".($medlem->verifyMember()?"yes":"no")."<br>\n";
|
||||
|
||||
try {
|
||||
echo "<pre>";
|
||||
$medlem->persistMember();
|
||||
echo "</pre>";
|
||||
}
|
||||
catch (InvalidArgumentException $e){
|
||||
echo $e;
|
||||
if(empty($err)){
|
||||
$err = $medlem->verifyMember();
|
||||
if(!empty($err)){
|
||||
$err[] = "Medlem er ikke lagt til!";
|
||||
}
|
||||
else {
|
||||
try {
|
||||
$medlem->persistMember();
|
||||
$msg[] = "Medlemmet er lagt til!";
|
||||
$_POST = null;
|
||||
}
|
||||
catch (InvalidArgumentException $e){
|
||||
echo $e;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// OPPDATER MEDLEM [ikke ferdig]
|
||||
$medlem = Medlem::getFromId($_POST['bruker_id']);
|
||||
|
||||
echo $medlem->fornavn." ".$medlem->etternavn."<br>\n";
|
||||
|
||||
foreach (Medlem::$stringNames as $felt){
|
||||
echo "Oppdater $felt fra ".$medlem->{$felt};
|
||||
if($medlem->set($felt, $_POST[$felt])){
|
||||
echo " til ".$_POST[$felt];
|
||||
}
|
||||
echo "<br>\n";
|
||||
$medlem->set($felt, $_POST[$felt]);
|
||||
}
|
||||
foreach (Medlem::$intFields as $felt){
|
||||
$medlem->set($felt, (int) $_POST[$felt]);
|
||||
|
@ -63,10 +65,12 @@ if(!empty($_POST)){
|
|||
}
|
||||
|
||||
echo $medlem->fornavn." ".$medlem->etternavn."<br>\n";
|
||||
echo "Medlem er ".($medlem->verifyMember()?"gyldig":"ugyldig")."<br>\n";
|
||||
echo "Medlem er ".(empty($medlem->verifyMember())?"gyldig":"ugyldig")."<br>\n";
|
||||
echo "Endrede verdier: ".implode(', ', $medlem->endret)."<br>\n";
|
||||
echo "<br>\n";
|
||||
echo "Medlem ikke oppdatert..<br>\n";
|
||||
$medlem->updateMemberRow();
|
||||
echo "<br>\n";
|
||||
echo "Medlem ikke oppdatert.. Funksjon ikke ferdig implementert.<br>\n";
|
||||
|
||||
die();
|
||||
}
|
||||
|
@ -144,12 +148,12 @@ if(!empty($_POST)){
|
|||
</select>
|
||||
</label>
|
||||
</p>
|
||||
<p>
|
||||
<!--<p>
|
||||
<label>Interesser:<br><textarea name="interesser"><?=$_POST['interesser'] ?? '';?></textarea></label>
|
||||
</p>
|
||||
<p>
|
||||
<label>Kursaktiviteter:<br><textarea name="kursaktiviteter"><?=$_POST['kursaktiviteter'] ?? '';?></textarea></label>
|
||||
</p>
|
||||
</p>-->
|
||||
<p>
|
||||
<label>Medlem siden:* <input type="date" name="medlem_siden" value="<?=$_POST['medlem_siden'] ?? date('Y-m-d');?>"></label><br>
|
||||
<label>
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
<?php
|
||||
|
||||
class Auth {
|
||||
private bool $isLoggedIn = false;
|
||||
|
||||
public static function checkLogin(): bool {
|
||||
// Start SESSION hvis den ikke alt er startet.
|
||||
if(!isset($_SESSION)){
|
||||
session_start();
|
||||
}
|
||||
|
||||
return isset($_SESSION['id'], $_SESSION['brukernavn'], $_SESSION['agent']) && $_SESSION['agent'] === md5($_SERVER['HTTP_USER_AGENT']);
|
||||
}
|
||||
|
||||
|
||||
public static function requireLogin(){
|
||||
if(!self::checkLogin()){
|
||||
header("Location: /modul7/login.php");
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws LoginException
|
||||
*/
|
||||
public static function doLogin(string $brukernavn, string $passord){
|
||||
if(empty($brukernavn) || empty($passord)){
|
||||
throw new LoginException("Ugyldige input-felt"); // Vag beskrivelse da disse vil bli verifisert først av HTML5
|
||||
}
|
||||
|
||||
try {
|
||||
// Hent bruker fra database med passende epost
|
||||
$bruker = Bruker::hentFraEpost($brukernavn);
|
||||
|
||||
if($bruker !== null && password_verify($passord, $bruker->passord)){
|
||||
// valid login
|
||||
echo "VALID";
|
||||
|
||||
// Start en session
|
||||
session_start();
|
||||
|
||||
// Lagre id og epost i en SESSION-variabeler
|
||||
$_SESSION['id'] = $bruker->dbid;
|
||||
$_SESSION['brukernavn'] = $bruker->epost;
|
||||
|
||||
// Eksta sikkerhet. Hindrer at noen kan ta cookien fra noens nettleser og bruke i en annen nettleser. (versjon må matche 100% for å være gyldig)
|
||||
$_SESSION['agent'] = md5($_SERVER['HTTP_USER_AGENT']);
|
||||
}
|
||||
else {
|
||||
throw new LoginException("Feil brukernavn og/eller passord. Prøv igjen eller kontakt administrator.");
|
||||
}
|
||||
}
|
||||
catch (PDOException $e){
|
||||
throw new LoginException("SQL-feil: ".$e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class LoginException extends RuntimeException {
|
||||
public function __construct($message = "", $code = 0, Throwable $previous = null){
|
||||
parent::__construct($message, $code, $previous);
|
||||
}
|
||||
}
|
||||
|
||||
class Bruker {
|
||||
public int $dbid;
|
||||
public string $epost;
|
||||
public string $passord;
|
||||
|
||||
public static function hentFraEpost(string $epost): ?Bruker{
|
||||
$hentBrukerSQL = "SELECT * FROM Bruker WHERE epost = ?";
|
||||
|
||||
$db = getPdoConn(); // DATABASE-tilkobling
|
||||
|
||||
$stmt = $db->prepare($hentBrukerSQL);
|
||||
$stmt->bindValue(1, $epost);
|
||||
$stmt->execute();
|
||||
|
||||
$stmt->setFetchMode(PDO::FETCH_ASSOC);
|
||||
|
||||
if($stmt->rowCount() != 1){
|
||||
return null;
|
||||
}
|
||||
|
||||
foreach($stmt->fetchAll() as $row){
|
||||
$bruker = new Bruker();
|
||||
$bruker->dbid = $row['brukerId'];
|
||||
$bruker->epost = $row['epost'];
|
||||
$bruker->passord = $row['passord'];
|
||||
|
||||
return $bruker;
|
||||
}
|
||||
$db = null;
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
include '../common.php';
|
||||
include '../modul6/forberedelser.php';
|
||||
include 'Auth.inc.php';
|
||||
Auth::requireLogin();
|
||||
|
||||
//echo password_hash("Passord1234", PASSWORD_DEFAULT);
|
||||
?><!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>Autentisering</h2>
|
||||
|
||||
<h3>Hjem-siden</h3>
|
||||
<p>Kun innloggede har tilgang her!</p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1 @@
|
|||
../modul1/index.php
|
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
include '../common.php';
|
||||
// Bruker database-tilkobling fra forrige modul
|
||||
include '../modul6/forberedelser.php';
|
||||
include "Auth.inc.php";
|
||||
|
||||
$msg = array();
|
||||
$err = array();
|
||||
|
||||
if(!empty($_POST)){
|
||||
try {
|
||||
Auth::doLogin($_POST['brukernavn'], $_POST['passord']);
|
||||
header("Location: Hjem.php");
|
||||
}
|
||||
catch (LoginException $e){
|
||||
$err[] = $e->getMessage();
|
||||
}
|
||||
}
|
||||
?><!DOCTYPE html>
|
||||
<html lang="no">
|
||||
<head>
|
||||
<title><?=title();?></title>
|
||||
<link rel="stylesheet" href="../index.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container">
|
||||
<h1>Modul 7 - Autentisering</h1>
|
||||
<h4><?=getNavigation();?></h4>
|
||||
<h2>Login</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";
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<form method="post">
|
||||
<p>
|
||||
<label for="brukernavn">Brukernavn:</label>
|
||||
<input type="text" id="brukernavn" name="brukernavn">
|
||||
</p>
|
||||
<p>
|
||||
<label for="passord">Passord:</label>
|
||||
<input type="password" id="passord" name="passord">
|
||||
</p>
|
||||
<p>
|
||||
<input type="submit" value="Logg inn...">
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue