/** * CRUD toteutetaan jo täällä. Toteutukset voi toki kirjoittaa * asianomaisessa luokassa uusiksi tarvittaessa. * * <p>Huomaa, ettei tietojen tarkistusta tehdä täällä varsinaisesti * (ks. Tietokantasolun set_arvo()). * Muista toteuttaa tarkistus perityssä luokassa!</p> * * <p>Palauttaa onnistumisen mukaan joko Malliluokkapohja2::$OPERAATIO_ONNISTUI * tai Malliluokkapohja2::$VIRHE.</p> * * @return type */ public function tallenna_uusi() { $palaute = Malliluokkapohja2::$VIRHE; $sarakenimet = $this->tietokantarivi->get_sarakenimet_paitsi_id(); $arvot = $this->tietokantarivi->get_arvot_paitsi_id(); // Käydään ei-id-solut läpi ja ilmoitetaan, jos jollakin eivät tiedot // ole kunnossa. Kunnollisia pitää olla sizeof($sarakenimet) kpl. $kunnolliset = 0; foreach ($this->get_tietokantasolut() as $solu) { if ($solu instanceof Tietokantasolu) { if ($solu->get_sarakenimi() != Malliluokkapohja2::$SARAKENIMI_ID) { if (!$solu->tiedot_ok()) { $this->lisaa_virheilmoitus("'" . $solu->get_sarakenimi() . "'-muuttujan arvo ei ole määritelty " . "(" . $solu->get_arvo() . ")!"); } else { $kunnolliset++; } } } } // Katsotaan, jotta sarakenimien ja arvojen lkm täsmää. // Plus 1 tulee siitä, että id-saraketta ei ole täällä mukana. // Tässä jäädään kiinni myös, ellei jokin arvo ole määritelty, koska // silloin sen sarakenimeä ei palauteta. if ($this->tietokantarivi->get_sarakkeiden_lkm() === sizeof($sarakenimet) + 1 && (sizeof($sarakenimet) === sizeof($arvot) && $kunnolliset == sizeof($sarakenimet))) { $taulu = $this->tk_taulunimi; $tallennuspalaute = $this->tietokantaolio->tallenna_uusi_rivi($taulu, $sarakenimet, $arvot, Malliluokkapohja2::$VIRHE); // Jos onnistui: if ($tallennuspalaute === Tietokantaolio::$HAKU_ONNISTUI) { // Otetaan ylös tallennetun id: $uuden_id = $this->tietokantaolio->hae_viimeksi_tallennetun_id(); if ($uuden_id == 0) { $this->lisaa_virheilmoitus("Virhe Malliluokkapohja2->" . "tallenna_uusi()-metodissa: hae_viimeksi_tallennetun_id()" . " palautti nollan! Ongelma kenties tietokantayhteydessä."); } else { $this->set_id($uuden_id); $this->set_id_tietokanta($uuden_id); $palaute = Malliluokkapohja2::$OPERAATIO_ONNISTUI; } } else { $this->lisaa_virheilmoitus("Tietokantavirhe. Arvot oikein?"); } } else { $this->lisaa_virheilmoitus("Virhe: ei-määritelty " . "arvo estää tallennuksen! <br/> Sarakkeiden" . " lkm = " . $this->tietokantarivi->get_sarakkeiden_lkm() . ", joista kunnollisten lkm = " . $kunnolliset + 1); // +id } return $palaute; }