From 8a977a019fc43d8008ede81714cda45dcae4765f Mon Sep 17 00:00:00 2001 From: Eirik Th S Date: Mon, 22 Nov 2021 16:33:31 +0100 Subject: [PATCH] Modul 6 verifisering og kommentarer --- modul6/forberedelser.php | 174 +++++++++++++++++++++++++++++++++------ modul6/index6_1.php | 25 +++--- modul6/index6_2.php | 42 +++++----- 3 files changed, 187 insertions(+), 54 deletions(-) diff --git a/modul6/forberedelser.php b/modul6/forberedelser.php index bfb34ff..120adbc 100644 --- a/modul6/forberedelser.php +++ b/modul6/forberedelser.php @@ -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"."
\n"; + } + catch (PDOException $e){ + echo "Greide ikke lage tabell:
\n".$e."
\n"; + } +} +elseif(isset($_POST['lagAktivitetTabell'])){ + try { + $db = getPdoConn(); + $db->exec($aktivitetSQL); + $db = null; + echo "Lagde aktivitetstabell"."
\n"; + } + catch (PDOException $e){ + echo "Greide ikke lage aktivitetstabell:
\n".$e."
\n"; + } +} +elseif(isset($_POST['lagInteresseTabell'])){ + try { + $db = getPdoConn(); + $db->exec($interesseSQL); + $db = null; + echo "Lagde interessetabell!"."
\n"; + } + catch (PDOException $e){ + echo "Greide ikke lage interesse-tabell:
\n".$e."
\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:
\n".$e; + if($e->getCode() == "42S02"){ + echo "Tabellen finnes ikke.
"; + } + else { + echo "SQL-feil:
\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:
\n".$e; + if($e->getCode() == "42S02"){ + echo "Tabellen finnes ikke.
"; + } + else { + echo "SQL-feil:
\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.
"; + } + else { + echo "SQL-feil: ".$e; + } } finally { $db = null; diff --git a/modul6/index6_1.php b/modul6/index6_1.php index b29d7e6..2b1a9d2 100644 --- a/modul6/index6_1.php +++ b/modul6/index6_1.php @@ -1,6 +1,8 @@ @@ -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); - ?> @@ -38,7 +36,7 @@ include 'forberedelser.php'; - + @@ -47,17 +45,19 @@ include 'forberedelser.php'; - - + + $medlem){ + $counter++; echo "\n"; - echo " \n"; + echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; - echo " \n"; - echo " \n"; +// echo " \n"; +// echo " \n"; echo " \n"; echo " \n"; +// echo " \n"; echo "\n"; } ?> diff --git a/modul6/index6_2.php b/modul6/index6_2.php index 1f35eac..e5eb349 100644 --- a/modul6/index6_2.php +++ b/modul6/index6_2.php @@ -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")."
\n"; - try { - echo "
";
-            $medlem->persistMember();
-            echo "
"; - } - 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."
\n"; - foreach (Medlem::$stringNames as $felt){ - echo "Oppdater $felt fra ".$medlem->{$felt}; - if($medlem->set($felt, $_POST[$felt])){ - echo " til ".$_POST[$felt]; - } - echo "
\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."
\n"; - echo "Medlem er ".($medlem->verifyMember()?"gyldig":"ugyldig")."
\n"; + echo "Medlem er ".(empty($medlem->verifyMember())?"gyldig":"ugyldig")."
\n"; echo "Endrede verdier: ".implode(', ', $medlem->endret)."
\n"; echo "
\n"; - echo "Medlem ikke oppdatert..
\n"; + $medlem->updateMemberRow(); + echo "
\n"; + echo "Medlem ikke oppdatert.. Funksjon ikke ferdig implementert.
\n"; die(); } @@ -144,12 +148,12 @@ if(!empty($_POST)){

-

+


ID# Fornavn Etternavn AdresseE-post Fødselsdato KjønnInteresserKursaktiviteter Medlem siden Kontigentstatus
".($medlemID+1)."".($counter)."".($medlem->fornavn ?? '')."".($medlem->etternavn ?? '')."".($medlem->adresse1 ?? ''); @@ -68,10 +68,11 @@ include 'forberedelser.php'; echo " ".($medlem->epost ?? '')."".($medlem->dob->format('d. M Y') ?? '')."".($medlem->kjoenn ?? '')."".($medlem->interesser ?? '')."".($medlem->kursaktiviteter ?? '')."".(implode(', ', $medlem->interesser) ?? '')."".($medlem->kursaktiviteter ?? '')."".($medlem->medlem_siden->format('d. M Y') ?? '')."".($medlem->kontigentstatus ?? '')."