/** 
  * CRUD toteutetaan jo täällä. Toteutukset voi toki kirjoittaa
  * asianomaisessa luokassa uusiksi tarvittaessa.
  * 
  * Huomaa, ettei tietojen tarkistusta tehdä täällä varsinaisesti, mutta
  * standarditarkastus tehdään Tietokantasolu-luokassa (ks. Tietokantasolun 
  * set_arvo()).
  * Toteuta tarvittaessa tarkempi tarkistus perityssä luokassa!
  * 
  * Palauttaa onnistumisen mukaan joko Malliluokkapohja::$OPERAATIO_ONNISTUI
  * tai Malliluokkapohja::$VIRHE.
  * 
  * Korjaus 16.3.2015: nyt metodi asettaa onnistuneen tallennuksen jälkeen
  * oliolle kentän $this->olio_loytyi_tietokannasta arvoksi true. Oli 
  * unohtunut näemmä.
  * 
  * @return type 
  */
 public function tallenna_uusi()
 {
     $palaute = Malliluokkapohja::$VIRHE;
     // Jos olio on jo tietokannassa, ei tallenneta uutena:
     if ($this->olio_loytyi_tietokannasta) {
         $this->lisaa_virheilmoitus("Olio on jo tietokannassa!");
         return $palaute;
     }
     // Muussa tapauksessa jatketaan:
     $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() != Malliluokkapohja::$SARAKENIMI_ID) {
                 if (!$solu->tiedot_ok()) {
                     if ($solu->get_arvo() === Pohja::$MUUTTUJAA_EI_MAARITELTY) {
                         $this->lisaa_virheilmoitus("'" . $solu->get_sarakenimi() . "'" . Perustustekstit::$syotteen_tarkistusvirhe);
                     } else {
                         if ($solu->get_arvo() === Pohja::$ARVO_TYHJA) {
                             $this->lisaa_virheilmoitus("'" . $solu->get_sarakenimi() . "'" . Perustustekstit::$muuttujan_arvo_tyhja);
                         } else {
                             $this->lisaa_virheilmoitus("'" . $solu->get_sarakenimi() . "'" . Perustustekstit::$muuttujan_arvo_vaarantyyppinen);
                         }
                     }
                 } 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))) {
         $tallennuspalaute = $this->tietokantaolio->tallenna_rivi($this->tietokantarivi);
         // Jos onnistui:
         if ($tallennuspalaute === Tietokantaolio::$HAKU_ONNISTUI) {
             // Otetaan ylös tallennetun id:
             $uuden_id = mysql_insert_id();
             $this->set_id($uuden_id);
             $this->set_id_tietokanta($uuden_id);
             $this->olio_loytyi_tietokannasta = true;
             $palaute = Malliluokkapohja::$OPERAATIO_ONNISTUI;
         } else {
             $this->lisaa_virheilmoitus("Tietokantavirhe uuden tallennuksessa." . " Arvot oikein? " . " Tietokantakysely: " . $tallennuspalaute);
             // Testausta
         }
     } else {
         /* Tämä voi tulla lähinnä testaajalle, joten viesti voi auttaa.*/
         $this->lisaa_virheilmoitus(Perustustekstit::$virhe_arvo_vaarantyyppinen);
     }
     return $palaute;
 }