Hirdetés

Új hozzászólás Aktív témák

  • Speeedfire

    félisten

    Ismét oop, ismét szívás van vele. Konkrétan a __destruct() függvénnyel.
    Elvileg a kód ha jól tudom amikor végzett az objektumokkal akkor megvizsgálja, hogy van-e __destruct() rész ha van akkor végrehajtja.
    Jelen esetben van, célja elvileg az lenne hogyha futás közben módosult valami adat akkor azt visszaírja az adatbázisba. De ez sajnos nem akar összejönni.

    "Real-time"-ban átírja az adatot, de nem módosítja...illetve ha beillsztek még egy try() catch() blokkot akkor errort is dob...

    Ma a kód az előzőnek a tovább bővített változata:

    class Felhasznalo2 {

    private $_tulajdonsagok;
    private $_hAB;
    private $_modositottTulajdonsagok;

    public function __construct($felh_azon) {
    $this->_tulajdonsagok = array();
    $this->_modositottTulajdonsagok = array();
    $this->_tulajdonsagok['azon'] = null;
    $this->_tulajdonsagok['felhnev'] = null;
    $this->_tulajdonsagok['valodinev'] = null;

    $this->_hAB = mysql_connect('localhost','root','');
    if(!is_resource($this->_hAB)) {
    throw new Exception('Az adatbazis kapcsolat nem hozhato letre!');
    }

    $kapcsolodas = mysql_select_db('oop', $this->_hAB);
    if(!$kapcsolodas) {
    throw new Exception('Az adatbazis nem hasznalhato');
    }

    $sql = 'select * from felhasznalo where azon = '.$felh_azon.'';
    $eredmeny = mysql_query($sql, $this->_hAB);

    if(!mysql_num_rows($eredmeny)) {
    throw new Exception('Az adatbazisban nincs '.$felh_azon.' azonositoju felhasznalo');
    }

    $sor = mysql_fetch_assoc($eredmeny);

    $this->_tulajdonsagok['azon'] = $sor['azon'];
    $this->_tulajdonsagok['felhnev'] = $sor['felhnev'];
    $this->_tulajdonsagok['valodinev'] = $sor['valodinev'];
    }

    function __get($tulajdonsagnev) {
    if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
    throw new Exception('Ervenytelen tulajdonsag-érték!');
    }
    if(method_exists($this, $tulajdonsagnev. 'Lekerdezes')) {
    return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));
    }
    else {
    return $this->_tulajdonsagok[$tulajdonsagnev];
    }
    }

    function __set($tulajdonsagnev, $ertek) {
    if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
    throw new Exception('Ervenytelen tulajdonsag-ertek');
    }
    if(method_exists($this, $tulajdonsagnev . 'Beallitas')) {
    return call_user_func(array($this, $tulajdonsagnev . 'Beallitas'), $ertek);
    }
    else {
    if($this->_tulajdonsagok[$tulajdonsagnev] != $ertek && !in_array($tulajdonsagnev, $this->_modositottTulajdonsagok)) {
    $this->_modositottTulajdonsagok[] = $tulajdonsagnev;
    }

    $this->_tulajdonsagok[$tulajdonsagnev] = $ertek;

    }
    }

    function azonBeallitas($ertek) {
    throw new Exception('A felhasznalodi azonositot nem lehet megvaltoztatni!');
    }

    function koszontes() {
    echo 'Szia! '.$this->valodinev.' vagyok! A felhasználói azonositom '.$this->azon.'! A nickem '.$this->felhnev.' !<br/>';
    }

    function __destruct() {
    if(sizeof($this->_modositottTulajdonsagok)) {
    $sql = 'update felhasznalo set';

    $utasitasBeallitas = array();
    foreach($this->_modositottTulajdonsagok as $tul) {
    $utasitasBeallitas[] = $tul .' = ' . $this->_tulajdonsagok[$tul];
    }

    $sql .= join(', ', $utasitasBeallitas);

    $sql .= 'where azon = '. $this->azon;

    $hEredm = mysql_query($sql, $this->_hAB);
    }

    mysql_close($this->_hAB);
    }
    }

    try {

    $obj = new Felhasznalo2(1);
    $obj->valodinev = 'Tóth Szabi';
    $obj->koszontes();

    }

    catch (Exception $e) {
    echo 'Hiba: ', $e->getMessage(), "\n";
    }

    Ha hozzáfűzöm még ezt is:

    try {

    $obj2 = new Felhasznalo2(2);
    $obj2->koszontes();

    }

    catch (Exception $e) {
    echo 'Hiba: ', $e->getMessage(), "\n";
    }

    Akkor hibát ír ki nekem:

    Warning: mysql_query(): 3 is not a valid MySQL-Link resource in D:\munka\web\!!!oop\index.php on line 279

    Warning: mysql_close(): 3 is not a valid MySQL-Link resource in D:\munka\web\!!!oop\index.php on line 282

    Az sql tábla:

Új hozzászólás Aktív témák