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.