'."\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 '