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.
ID | +# | Fornavn | Etternavn | Adresse | @@ -47,17 +45,19 @@ include 'forberedelser.php';E-post | Fødselsdato | Kjønn | -Interesser | -Kursaktiviteter | + +Medlem siden | Kontigentstatus | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
".($medlemID+1)." | \n"; + echo "".($counter)." | \n"; echo "".($medlem->fornavn ?? '')." | \n"; echo "".($medlem->etternavn ?? '')." | \n"; echo "".($medlem->adresse1 ?? ''); @@ -68,10 +68,11 @@ include 'forberedelser.php'; echo " | ".($medlem->epost ?? '')." | \n"; echo "".($medlem->dob->format('d. M Y') ?? '')." | \n"; echo "".($medlem->kjoenn ?? '')." | \n"; - echo "".($medlem->interesser ?? '')." | \n"; - echo "".($medlem->kursaktiviteter ?? '')." | \n"; +// echo "".(implode(', ', $medlem->interesser) ?? '')." | \n"; +// echo "".($medlem->kursaktiviteter ?? '')." | \n"; echo "".($medlem->medlem_siden->format('d. M Y') ?? '')." | \n"; echo "".($medlem->kontigentstatus ?? '')." | \n"; +// echo "\n"; echo " |