예제 #1
0
 /** 
  * 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&auml;&auml;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&auml;.");
             } 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&auml;&auml;ritelty " . "arvo est&auml;&auml; tallennuksen! <br/> Sarakkeiden" . " lkm = " . $this->tietokantarivi->get_sarakkeiden_lkm() . ", joista kunnollisten lkm = " . $kunnolliset + 1);
         // +id
     }
     return $palaute;
 }