Napisalem taki skrypcik treningowy, szczerze to praktycznie przepisalem go z ksiazki, niestety w kodzie jak sie okazuje jest sporo bledow a errata online wydaje sie niekompletna. Poproawilem z 3 bledy ale z tym nie potrafie sobie poradzic.
Chodzi o zmiane wartosci w tabeli mysql przez wywolanie odpowiedniej metody w klasie.
Oto kod.
<?php //class.Widget.php class Widget { private $id; Private $name; private $description; private $hDB; private $needsUpdating = false; public function __construct($widgetID) { //parametr widgetID to klucz główny rekordu //w bazie danych zawierajacego dane //tego obiektu //tworzy uchwyt połaczenia i zachowuje go w prywatnej zmiennej skladowej throw new Exception ('Nie mozna polaczyc sie z baza danych.'); } $sql = "SELECT nazwa, opis FROM artykul WHERE nr_artykulu = '$widgetID' "; throw new Exception ("Blad przy wykonywaniu instrukcji wyboru."); } throw new Exception('Szukanego artykulu nie ma w bazie!'); } $this->id = $widgetID; $this->name = $data['nazwa']; $this->description = $data['opis']; } public function getName() { return $this->name; } public function getDescription() { return $this->description; } public function setName($name) { $this->name = $name; $this->needsUpdating = true; } public function setDescription($description) { $this->description = $description; $this->needsUpdating = true; } public function __desctruct() { if(!$this->needsUpdating) { return; } $sql = 'UPDATE artykul SET'; $sql .= "WHERE nr_artykulu = " .$this->id; throw new Exception ('Wystapil blad podczas aktualizacji bazy danych'); } //koniec operacji na bazie danych. Zamkniecie połączenia. } } ?>
A tutaj miejsce inicjalizacji obiketu oraz wywolanie metod :
<?php require_once('class.Widget.php'); try { $objWidget = new Widget(1); $objWidget->setName('Trampki'); $objWidget->setDescription('Trampki o duzym przebiegu!'); } catch (Exception $e) { } ?>
Jak zapewnia autor po kolejnym wywolaniu strony automatycznie powinny zmienic sie wartosci w bazie danych poprzez uzycie metod setName oraz setDescription. Jednak kolejne wywolania nic nie daja, dopiero po wyswietleniu wartosci po instrukcji try...catch widac wyswietla sie zmieniona wartosc , lecz w bazie danych pozostaje bez zmian.