Witam
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);
print "Nazwa artykułu: " . $objWidget->getName(). "<br>\n"; print "Opis artykulu: " . $objWidget->getDescription(). "<br>\n";
$objWidget->setName('Trampki');
$objWidget->setDescription('Trampki o duzym przebiegu!');
} catch (Exception $e) {
die ("Wystapil problem: " . $e->getMessage()); }
?>
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.
Ten post edytował Wolfie 12.03.2009, 20:03:47