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"; } } elseif(isset($_POST['lagBrukerTabell'])){ try { $db = getPdoConn(); $db->exec($brukerSQL); $db = null; echo "Lagde brukertabell!"."
\n"; } catch (PDOException $e){ echo "Greide ikke lage bruker-tabell:
\n".$e."
\n"; } } 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 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"); public string $rolle = "Standard"; //TODO: Implementer roller public int $dbid; public string $fornavn = ''; public string $etternavn = ''; public string $adresse1 = ''; public string $adresse2 = ''; public int $postnummer; public string $poststed = ''; public string $mobilnummer = ''; public string $epost = ''; public DateTime $dob; public string $kjoenn = ''; public array $interesser = array(); public string $kursaktiviteter = ''; public DateTime $medlem_siden; public string $kontigentstatus = ''; public $endret = array(); public static function getFromId($dbid): Medlem { return hentMedlem($dbid); } public function set($felt, $verdi){ if($this->{$felt} != $verdi){ $this->{$felt} = $verdi; $this->endret[] = $felt; return true; } return false; } public function get($felt){ return $this->${$felt}; } 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) && !empty($this->postnummer) && !empty($this->epost) && !empty($this->dob) && !empty($this->kjoenn) && !empty($this->medlem_siden) && !empty($this->kontigentstatus);*/ } public function persistMember(){ if(empty($this->verifyMember())){ $db = getPdoConn(); if(hentPoststed($this->postnummer) === false){ if(empty($this->poststed)){ throw new InvalidArgumentException("Kan ikke lage et poststed som ikke finnes. Sjekk at medlemmet har et oppgitt poststed."); } $kommuneStmt = $db->prepare("INSERT INTO Postnummer VALUES (?,?)"); $kommuneStmt->bindValue(1, $this->postnummer); $kommuneStmt->bindValue(2, $this->poststed); $kommuneStmt->execute(); } $insertSQL = "INSERT INTO Medlem (fornavn, etternavn, adresse, postnummer, mobilnummer, epost, dob, kjoenn, kontigentStatus, medlemStart) VALUES (?,?,?,?,?,?,?,?,?,?);"; $statement = $db->prepare($insertSQL); $statement->bindValue(1, $this->fornavn); $statement->bindValue(2, $this->etternavn); $statement->bindValue(3, $this->adresse1 . "\n" . $this->adresse2); $statement->bindValue(4, $this->postnummer); $statement->bindValue(5, $this->mobilnummer); $statement->bindValue(6, $this->epost); $statement->bindValue(7, $this->dob->format("Y-m-d")); $statement->bindValue(8, $this->kjoenn); $statement->bindValue(9, $this->kontigentstatus); $statement->bindValue(10, $this->medlem_siden->format("Y-m-d")); $statement->execute(); } } public function updateMemberRow(){ // $db = getPdoConn(); $updateSQLValues = array(); foreach ($this->endret as $key => $value){ $updateSQLValues[] = "$value = ?"; } $sql = "UPDATE Medlem SET ".implode(', ', $updateSQLValues); $sql .= " WHERE medlemId = ?"; echo $sql; // $statement = $db->prepare($sql); // LOOP // $statement->bindParam() } } function hentPoststed($postnummer) { 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] ?? false; } function hentMedlem($dbid){ return hentMedlemmer(null, null, $dbid)[$dbid]; } 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, 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 lengre oppe. $db = getPdoConn(); // 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); 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']; $medlem->etternavn = $row['etternavn']; $adresser = explode('\n', $row['adresse']); $medlem->adresse1 = $adresser[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']; $medlem->kontigentstatus = $row['kontigentStatus']; $medlem->medlem_siden = DateTime::createFromFormat('Y-m-d', $row['medlemStart'] ); $medlemmer[$medlem->dbid] = $medlem; } } catch (PDOException $e){ if($e->getCode() == "42S02"){ echo "Tabellen finnes ikke.
"; } else { echo "SQL-feil:
\n".var_dump($e); } } finally { $db = null; return $medlemmer; } } class Aktivitet { public int $dbid; public string $navn; public string $beskrivelse; public int $ansvarlig; public ?DateTime $start = null; public ?DateTime $slutt = null; public function __construct($dbid, $navn, $beskrivelse, $ansvarlig, $start, $slutt){ $this->dbid = $dbid ?? 0; $this->navn = $navn; $this->beskrivelse = $beskrivelse; $this->ansvarlig = $ansvarlig; $this->start = $start ?? null; $this->slutt = $slutt ?? null; } } function hentAktivitet($id = false, $all = false){ $aktiviteter = array(); $where = array(); if($id){ $where[] = "aktivitetId = ?"; } if(!$all){ $where[] = "slutt > now()"; } $sql = "SELECT * FROM Aktivitet"; if(!empty($where)){ $sql .= " WHERE ".implode(' AND ', $where); } try { $db = getPdoConn(); $stmt = $db->prepare($sql); if($id){ $stmt->bindValue(1, $id); } $stmt->execute(); $stmt->setFetchMode(PDO::FETCH_ASSOC); $res = $stmt->fetchAll(); foreach ($res as $row){ $start = DateTime::createFromFormat('Y-m-d H:i:s', $row['start']) ?? null; $slutt = DateTime::createFromFormat('Y-m-d H:i:s', $row['slutt']) ?? null; $aktiviteter[] = new Aktivitet( $row['aktivitetId'], $row['navn'], $row['beskrivelse'], $row['ansvarligId'], $start, $slutt ); } } catch (PDOException $e){ if($e->getCode() == "42S02"){ echo "Tabellen finnes ikke.
"; } else { echo "SQL-feil:
\n".$e; } } finally { $db = null; } if($id && count($aktiviteter) == 1){ return $aktiviteter[0]; } return $aktiviteter; } class Interesse { public string $navn; public array $medlemmer; public function __construct($navn){ $this->navn = $navn; } } function hentInteresser(){ $interesser = array(); $hentInteresseSQL = " SELECT i.interesseId, i.navn, ir.medlemId FROM Interesse i LEFT OUTER JOIN Interesse_register ir on ir.interesseId = i.interesseId ORDER BY i.navn "; try { $db = getPdoConn(); $stmt = $db->prepare($hentInteresseSQL); $stmt->execute(); $stmt->setFetchMode(PDO::FETCH_ASSOC); foreach($stmt->fetchAll() as $row){ if(!isset($interesser[$row['interesseId']])){ $interesser[$row['interesseId']] = new Interesse($row['navn']); } if(!isset($interesser[ $row['interesseId'] ]->medlemmer)){ $interesser[ $row['interesseId'] ]->medlemmer = array(); } if($row['medlemId']){ $interesser[$row['interesseId']]->medlemmer[] = $row['medlemId']; } } } catch (PDOException $e){ if($e->getCode() == "42S02"){ echo "Tabellen finnes ikke.
"; } else { echo "SQL-feil: ".$e; } } finally { $db = null; } return $interesser; }