Modul 6 verifisering og kommentarer

master
Eirik Th S 2021-11-22 16:33:31 +01:00
parent 746b5b3278
commit 8a977a019f
3 changed files with 187 additions and 54 deletions

View File

@ -2,6 +2,7 @@
require 'database.php'; require 'database.php';
DEFINE('SELECTED', 'selected'); DEFINE('SELECTED', 'selected');
$tabellSQL = " $tabellSQL = "
CREATE OR REPLACE TABLE Postnummer ( CREATE OR REPLACE TABLE Postnummer (
postnummer INT(4) NOT NULL PRIMARY KEY, postnummer INT(4) NOT NULL PRIMARY KEY,
@ -22,8 +23,90 @@ CREATE OR REPLACE TABLE Medlem (
medlemStart DATE NOT NULL, medlemStart DATE NOT NULL,
FOREIGN KEY (postnummer) REFERENCES Postnummer(postnummer) 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 { function getPdoConn(): PDO {
$conn = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_BASE . "", DB_USER, DB_PASS); $conn = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_BASE . "", DB_USER, DB_PASS);
@ -33,7 +116,7 @@ function getPdoConn(): PDO {
} }
class Medlem { 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 $intFields = array("postnummer");
public static $dateFields = array("dob", "medlem_siden"); public static $dateFields = array("dob", "medlem_siden");
@ -72,8 +155,38 @@ class Medlem {
return $this->${$felt}; return $this->${$felt};
} }
public function verifyMember():bool{ public function verifyMember() {
return $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->fornavn) &&
!empty($this->etternavn) && !empty($this->etternavn) &&
!empty($this->adresse1) && !empty($this->adresse1) &&
@ -82,11 +195,11 @@ class Medlem {
!empty($this->dob) && !empty($this->dob) &&
!empty($this->kjoenn) && !empty($this->kjoenn) &&
!empty($this->medlem_siden) && !empty($this->medlem_siden) &&
!empty($this->kontigentstatus); !empty($this->kontigentstatus);*/
} }
public function persistMember(){ public function persistMember(){
if($this->verifyMember()){ if(empty($this->verifyMember())){
$db = getPdoConn(); $db = getPdoConn();
if(hentPoststed($this->postnummer) === false){ if(hentPoststed($this->postnummer) === false){
@ -99,7 +212,6 @@ class Medlem {
$kommuneStmt->execute(); $kommuneStmt->execute();
} }
$insertSQL = "INSERT INTO Medlem (fornavn, etternavn, adresse, postnummer, mobilnummer, epost, dob, kjoenn, kontigentStatus, medlemStart) VALUES (?,?,?,?,?,?,?,?,?,?);"; $insertSQL = "INSERT INTO Medlem (fornavn, etternavn, adresse, postnummer, mobilnummer, epost, dob, kjoenn, kontigentStatus, medlemStart) VALUES (?,?,?,?,?,?,?,?,?,?);";
$statement = $db->prepare($insertSQL); $statement = $db->prepare($insertSQL);
@ -115,19 +227,12 @@ class Medlem {
$statement->bindValue(9, $this->kontigentstatus); $statement->bindValue(9, $this->kontigentstatus);
$statement->bindValue(10, $this->medlem_siden->format("Y-m-d")); $statement->bindValue(10, $this->medlem_siden->format("Y-m-d"));
echo $statement->queryString;
$statement->execute(); $statement->execute();
// var_dump($statement);
} }
// '{$this->fornavn}', '{$this->etternavn}', '{$this->adresse1}\n{$this->adresse2}'
} }
public function updateMemberRow(){ public function updateMemberRow(){
$db = getPdoConn(); // $db = getPdoConn();
$updateSQLValues = array(); $updateSQLValues = array();
foreach ($this->endret as $key => $value){ foreach ($this->endret as $key => $value){
@ -136,6 +241,7 @@ class Medlem {
$sql = "UPDATE Medlem SET ".implode(', ', $updateSQLValues); $sql = "UPDATE Medlem SET ".implode(', ', $updateSQLValues);
$sql .= " WHERE medlemId = ?"; $sql .= " WHERE medlemId = ?";
echo $sql;
// $statement = $db->prepare($sql); // $statement = $db->prepare($sql);
@ -166,41 +272,47 @@ function hentMedlem($dbid){
return hentMedlemmer(null, null, $dbid)[$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; $sideStart = $side?($side-1)*$perSide:0;
$medlemmer = array(); $medlemmer = array();
$order = array(); $order = array();
$hentMedlemmerSQL = " $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 FROM Medlem m
INNER JOIN Postnummer p ON m.postnummer = p.postnummer 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){ if($medlemId > 0){
$hentMedlemmerSQL .= " WHERE `medlemId` = ?"; $hentMedlemmerSQL .= " WHERE `medlemId` = ?";
} }
else { else {
// Tillater dynamisk sortering
$order[] = "etternavn"; $order[] = "etternavn";
$order[] = "fornavn"; $order[] = "fornavn";
$hentMedlemmerSQL .= "ORDER BY ".implode(', ', $order)." LIMIT $sideStart,$perSide"; $hentMedlemmerSQL .= "ORDER BY ".implode(', ', $order)." LIMIT $sideStart,$perSide";
} }
try { try {
// Åpne databasetilkobling som definert // Åpne databasetilkobling som definert lengre oppe.
$db = getPdoConn(); $db = getPdoConn();
// Prepare and execute statement // Forbered spørringen
$statement = $db->prepare($hentMedlemmerSQL); $statement = $db->prepare($hentMedlemmerSQL);
// Hvis det er spesifisert en medlemsId legges verdien inn her
if($medlemId > 0){ if($medlemId > 0){
$statement->bindValue(1,$medlemId); $statement->bindValue(1,$medlemId);
} }
// Utfør spørringen
$statement->execute(); $statement->execute();
// Fetchmode FETCH_ASSOC for å få med keys-verdiene // Fetchmode FETCH_ASSOC for å få med keys-verdiene
$statement->setFetchMode(PDO::FETCH_ASSOC); $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 = new Medlem();
$medlem->dbid = $row['medlemId']; $medlem->dbid = $row['medlemId'];
$medlem->fornavn = $row['fornavn']; $medlem->fornavn = $row['fornavn'];
@ -210,6 +322,7 @@ function hentMedlemmer($perSide = 20, $side = 1, $medlemId = 0){
$medlem->adresse2 = $adresser[1] ?? ''; $medlem->adresse2 = $adresser[1] ?? '';
$medlem->postnummer = $row['postnummer']; $medlem->postnummer = $row['postnummer'];
$medlem->poststed = $row['poststed']; $medlem->poststed = $row['poststed'];
$medlem->mobilnummer = $row['mobilnummer'] ?? '';
$medlem->epost = $row['epost']; $medlem->epost = $row['epost'];
$medlem->dob = DateTime::createFromFormat('Y-m-d', $row['dob'] ); $medlem->dob = DateTime::createFromFormat('Y-m-d', $row['dob'] );
$medlem->kjoenn = $row['kjoenn']; $medlem->kjoenn = $row['kjoenn'];
@ -220,7 +333,12 @@ function hentMedlemmer($perSide = 20, $side = 1, $medlemId = 0){
} }
} }
catch (PDOException $e){ 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 { } finally {
$db = null; $db = null;
return $medlemmer; return $medlemmer;
@ -284,7 +402,12 @@ function hentAktivitet($id = false, $all = false){
} }
} }
catch (PDOException $e){ 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 { finally {
$db = null; $db = null;
@ -333,7 +456,12 @@ function hentInteresser(){
} }
} }
catch (PDOException $e){ 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 { finally {
$db = null; $db = null;

View File

@ -1,6 +1,8 @@
<?php <?php
include '../common.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'; include 'forberedelser.php';
?><!DOCTYPE html> ?><!DOCTYPE html>
@ -20,13 +22,9 @@ include 'forberedelser.php';
// Tom matrise som skal holde Medlem-objekter. // Tom matrise som skal holde Medlem-objekter.
$medlemmer = array(); $medlemmer = array();
// Sidetall, i tilfelle det er kjempemange medlemmer. (Standard 20 per side, side 1) // Se funksjonen i forberedelser.php
$perPage = $_GET['size'] ?? 20; // Parametrene er sidetall, i tilfelle det er kjempemange medlemmer. (Standard 20 per side, side 1)
$pageStart = $_GET['page']?($_GET['page']-1)*$perPage:0;
// Se funkjson i forberedelser.php
$medlemmer = hentMedlemmer($_GET['size'] ?? 20, $_GET['page'] ?? 1); $medlemmer = hentMedlemmer($_GET['size'] ?? 20, $_GET['page'] ?? 1);
?> ?>
</div> </div>
@ -38,7 +36,7 @@ include 'forberedelser.php';
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
<th>ID</th> <th>#</th>
<th>Fornavn</th> <th>Fornavn</th>
<th>Etternavn</th> <th>Etternavn</th>
<th>Adresse</th> <th>Adresse</th>
@ -47,17 +45,19 @@ include 'forberedelser.php';
<th>E-post</th> <th>E-post</th>
<th>Fødselsdato</th> <th>Fødselsdato</th>
<th>Kjønn</th> <th>Kjønn</th>
<th>Interesser</th> <!-- <th>Interesser</th>-->
<th>Kursaktiviteter</th> <!-- <th>Kursaktiviteter</th>-->
<th>Medlem siden</th> <th>Medlem siden</th>
<th>Kontigentstatus</th> <th>Kontigentstatus</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<?php <?php
$counter = 0;
foreach ($medlemmer as $medlemID => $medlem){ foreach ($medlemmer as $medlemID => $medlem){
$counter++;
echo "<tr>\n"; echo "<tr>\n";
echo " <td>".($medlemID+1)."</td>\n"; echo " <td>".($counter)."</td>\n";
echo " <td>".($medlem->fornavn ?? '')."</td>\n"; echo " <td>".($medlem->fornavn ?? '')."</td>\n";
echo " <td>".($medlem->etternavn ?? '')."</td>\n"; echo " <td>".($medlem->etternavn ?? '')."</td>\n";
echo " <td>".($medlem->adresse1 ?? ''); echo " <td>".($medlem->adresse1 ?? '');
@ -68,10 +68,11 @@ include 'forberedelser.php';
echo " <td>".($medlem->epost ?? '')."</td>\n"; echo " <td>".($medlem->epost ?? '')."</td>\n";
echo " <td>".($medlem->dob->format('d. M Y') ?? '')."</td>\n"; echo " <td>".($medlem->dob->format('d. M Y') ?? '')."</td>\n";
echo " <td>".($medlem->kjoenn ?? '')."</td>\n"; echo " <td>".($medlem->kjoenn ?? '')."</td>\n";
echo " <td>".($medlem->interesser ?? '')."</td>\n"; // echo " <td>".(implode(', ', $medlem->interesser) ?? '')."</td>\n";
echo " <td>".($medlem->kursaktiviteter ?? '')."</td>\n"; // echo " <td>".($medlem->kursaktiviteter ?? '')."</td>\n";
echo " <td>".($medlem->medlem_siden->format('d. M Y') ?? '')."</td>\n"; echo " <td>".($medlem->medlem_siden->format('d. M Y') ?? '')."</td>\n";
echo " <td>".($medlem->kontigentstatus ?? '')."</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"; echo "</tr>\n";
} }
?> ?>

View File

@ -32,28 +32,30 @@ if(!empty($_POST)){
$medlem->dob = DateTime::createFromFormat('Y-m-d', $_POST['dob']); $medlem->dob = DateTime::createFromFormat('Y-m-d', $_POST['dob']);
$medlem->medlem_siden = DateTime::createFromFormat('Y-m-d', $_POST['medlem_siden']); $medlem->medlem_siden = DateTime::createFromFormat('Y-m-d', $_POST['medlem_siden']);
echo "Verified? ".($medlem->verifyMember()?"yes":"no")."<br>\n";
try { if(empty($err)){
echo "<pre>"; $err = $medlem->verifyMember();
$medlem->persistMember(); if(!empty($err)){
echo "</pre>"; $err[] = "Medlem er ikke lagt til!";
} }
catch (InvalidArgumentException $e){ else {
echo $e; try {
$medlem->persistMember();
$msg[] = "Medlemmet er lagt til!";
$_POST = null;
}
catch (InvalidArgumentException $e){
echo $e;
}
}
} }
} }
else { else {
// OPPDATER MEDLEM [ikke ferdig]
$medlem = Medlem::getFromId($_POST['bruker_id']); $medlem = Medlem::getFromId($_POST['bruker_id']);
echo $medlem->fornavn." ".$medlem->etternavn."<br>\n";
foreach (Medlem::$stringNames as $felt){ foreach (Medlem::$stringNames as $felt){
echo "Oppdater $felt fra ".$medlem->{$felt}; $medlem->set($felt, $_POST[$felt]);
if($medlem->set($felt, $_POST[$felt])){
echo " til ".$_POST[$felt];
}
echo "<br>\n";
} }
foreach (Medlem::$intFields as $felt){ foreach (Medlem::$intFields as $felt){
$medlem->set($felt, (int) $_POST[$felt]); $medlem->set($felt, (int) $_POST[$felt]);
@ -63,10 +65,12 @@ if(!empty($_POST)){
} }
echo $medlem->fornavn." ".$medlem->etternavn."<br>\n"; 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 "Endrede verdier: ".implode(', ', $medlem->endret)."<br>\n";
echo "<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(); die();
} }
@ -144,12 +148,12 @@ if(!empty($_POST)){
</select> </select>
</label> </label>
</p> </p>
<p> <!--<p>
<label>Interesser:<br><textarea name="interesser"><?=$_POST['interesser'] ?? '';?></textarea></label> <label>Interesser:<br><textarea name="interesser"><?=$_POST['interesser'] ?? '';?></textarea></label>
</p> </p>
<p> <p>
<label>Kursaktiviteter:<br><textarea name="kursaktiviteter"><?=$_POST['kursaktiviteter'] ?? '';?></textarea></label> <label>Kursaktiviteter:<br><textarea name="kursaktiviteter"><?=$_POST['kursaktiviteter'] ?? '';?></textarea></label>
</p> </p>-->
<p> <p>
<label>Medlem siden:* <input type="date" name="medlem_siden" value="<?=$_POST['medlem_siden'] ?? date('Y-m-d');?>"></label><br> <label>Medlem siden:* <input type="date" name="medlem_siden" value="<?=$_POST['medlem_siden'] ?? date('Y-m-d');?>"></label><br>
<label> <label>