'."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''.$title.''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo '

'.$h1.'

'."\n"; } // tulostaa XHTML-sivun lopputagit public function tulosta_loppu() { echo ''."\n"; echo ''."\n"; } } // luokka tietokannan käsittelylle class kanta { private $dbh; // konstruktori, jossa kantaan luodaan yhteys function __construct($kanta) { try { $this->dbh = new PDO($kanta); } catch(PDOException $e) { print($e->getMessage()); } } function __destruct() { } // metodi hakee kaikki elokuvat ja niihin liittyvät näyttelijät kannasta // aakkosten mukaan järjestäminen tehdään jo SQL-lauseessa public function hae_elokuvat_ja_nayttelijat() { $sql = $this->dbh->prepare('SELECT Movie.MovieName AS MovieName, Actor.ActorName AS ActorName FROM Movie LEFT OUTER JOIN Participates ON Movie.MovieID = Participates.Movie_MovieID LEFT OUTER JOIN Actor ON Participates.Actor_ActorID = Actor.ActorID ORDER BY Movie.MovieName, Actor.ActorName ASC'); if(!$sql) { print_r($this->dbh->errorInfo()); return false; } $ok = $sql->execute(); if(!$ok) { print_r($sql->errorInfo()); return false; } else { return $sql; } } // metodi hakee kaikki näyttelijät ja niihin liittyvät elokuvat kannasta // aakkosten mukaan järjestäminen tehdään jo SQL-lauseessa public function hae_nayttelijat_ja_elokuvat() { $sql = $this->dbh->prepare('SELECT Actor.ActorName AS ActorName, Movie.MovieName AS MovieName FROM Actor LEFT OUTER JOIN Participates ON Actor.ActorID = Participates.Actor_ActorID LEFT OUTER JOIN Movie ON Participates.Movie_MovieID = Movie.MovieID ORDER BY Actor.ActorName, Movie.MovieName ASC'); if(!$sql) { print_r($this->dbh->errorInfo()); return false; } $ok = $sql->execute(); if(!$ok) { print_r($sql->errorInfo()); return false; } else { return $sql; } } // metodi hakee kaikki näyttelijät kannasta public function hae_nayttelijat() { $sql = $this->dbh->prepare('SELECT * FROM Actor ORDER BY ActorName ASC'); if(!$sql) { print_r($this->dbh->errorInfo()); return false; } $ok = $sql->execute(); if(!$ok) { print_r($sql->errorInfo()); return false; } else { return $sql; } } // metodi hakee kaikki elokuvat kannasta public function hae_elokuvat() { $sql = $this->dbh->prepare('SELECT * FROM Movie ORDER BY MovieName ASC'); if(!$sql) { print_r($this->dbh->errorInfo()); return false; } $ok = $sql->execute(); if(!$ok) { print_r($sql->errorInfo()); return false; } else { return $sql; } } // palauttaa tiedon onko kannassa elokuvia public function onko_elokuvia() { $sql = $this->dbh->prepare('SELECT COUNT(*) FROM Movie'); if(!$sql) { print_r($this->dbh->errorInfo()); return false; } $ok = $sql->execute(); if(!$ok) { print_r($sql->errorInfo()); return false; } else { if($sql->fetchColumn() > 0) { return true; } else { return false; } } } // palauttaa tiedon onko kannassa näyttelijöitä public function onko_nayttelijoita() { $sql = $this->dbh->prepare('SELECT COUNT(*) FROM Actor'); if(!$sql) { print_r($this->dbh->errorInfo()); return false; } $ok = $sql->execute(); if(!$ok) { print_r($sql->errorInfo()); return false; } else { if($sql->fetchColumn() > 0) { return true; } else { return false; } } } // metodi lisää kantaan uuden elokuvan ja kiinnittää siihen valitut näyttelijät // lisättävät tiedot tuodaan parametreinä // rajoitteet (ei saa lisätä kahta samannimistä) hoidetaan suoraan kannassa UNIQUE:n avulla // lisäyksessä käytetään transaktioita public function lisaa_elokuva($leffa,$nayttelijat) { $this->dbh->beginTransaction(); $sql = $this->dbh->prepare('INSERT INTO Movie (MovieName) VALUES (:elokuva)'); if(!$sql) { print_r($this->dbh->errorInfo()); $this->dbh->rollBack(); return false; } $sql->bindParam(":elokuva",trim($leffa)); $ok = $sql->execute(); if(!$ok) { //print_r($sql->errorInfo()); $this->dbh->rollBack(); return false; } $leffaid = $this->dbh->lastInsertID(); foreach($nayttelijat as $nayttelija) { if($nayttelija!=0) { $sql = $this->dbh->prepare('INSERT INTO Participates VALUES (:elokuva, :nayttelija)'); if(!$sql) { print_r($this->dbh->errorInfo()); $this->dbh->rollBack(); return false; } $sql->bindParam(":elokuva",$leffaid); $sql->bindParam(":nayttelija",$nayttelija); $ok = $sql->execute(); if(!$ok) { print_r($sql->errorInfo()); $this->dbh->rollBack(); return false; } } } $this->dbh->commit(); return true; } // metodi lisää kantaan uuden näyttelijän ja kiinnittää siihen valitut elokuvat // lisättävät tiedot tuodaan parametreinä // rajoitteet (ei saa lisätä kahta samannimistä) hoidetaan suoraan kannassa UNIQUE:n avulla // lisäyksessä käytetään transaktioita public function lisaa_nayttelija($nayttelija,$elokuvat) { $this->dbh->beginTransaction(); $sql = $this->dbh->prepare('INSERT INTO Actor (ActorName) VALUES (:nayttelija)'); if(!$sql) { print_r($this->dbh->errorInfo()); $this->dbh->rollBack(); return false; } $sql->bindParam(":nayttelija",trim($nayttelija)); $ok = $sql->execute(); if(!$ok) { //print_r($sql->errorInfo()); $this->dbh->rollBack(); return false; } $nayttelijaid = $this->dbh->lastInsertID(); foreach($elokuvat as $elokuva) { if($elokuva!=0) { $sql = $this->dbh->prepare('INSERT INTO Participates VALUES (:elokuva, :nayttelija)'); if(!$sql) { print_r($this->dbh->errorInfo()); $this->dbh->rollBack(); return false; } $sql->bindParam(":elokuva",$elokuva); $sql->bindParam(":nayttelija",$nayttelijaid); $ok = $sql->execute(); if(!$ok) { print_r($sql->errorInfo()); $this->dbh->rollBack(); return false; } } } $this->dbh->commit(); return true; } // metodi tulostaa elokuvat ja niihin liittyvät näyttelijät kaksitasoisena listana public function tulosta_elokuvat_ja_nayttelijat($sql) { $rivi = $sql->fetch(PDO::FETCH_ASSOC); while($rivi) { $sisalista = false; $leffa = $rivi['MovieName']; echo '
  • '.htmlentities($leffa); if($rivi['ActorName']!="") { echo "\n".''."\n"; } echo '
  • '."\n"; } } // metodi tulostaa näyttelijät ja heihin liittyvät elokuvat kaksitasoisena listana public function tulosta_nayttelijat_ja_elokuvat($sql) { $rivi = $sql->fetch(PDO::FETCH_ASSOC); while($rivi) { $sisalista = false; $nayttelija = $rivi['ActorName']; echo '
  • '.htmlentities($nayttelija); if($rivi['MovieName']!="") { echo "\n".''."\n"; } echo '
  • '."\n"; } } // metodi tulostaa näyttelijät valintalistan kohteina public function tulosta_nayttelijat($sql) { while($rivi = $sql->fetch(PDO::FETCH_ASSOC)) { echo ''."\n"; } } // metodi tulostaa elokuvat valintalistan kohteina public function tulosta_elokuvat($sql) { while($rivi = $sql->fetch(PDO::FETCH_ASSOC)) { echo ''."\n"; } } } ?>