Jak w poniższej tablicy odwołać się do pola 'ilosc' i zmienić jego wartość? Tablica ta przechowuje produkty znajdujące się w koszyku.
Podgląd tablicy:
(
[0] => Towar Object
(
[id:protected] => 126
[nazwa:protected] => Body Pawełek
[cena:protected] => 21.00,21.00,21.00,23.00,23.00
[rozmiar:protected] => 62,68,74,80,86
[opis:protected] => opis
[data_dodania:protected] => 2009-07-17 08:21:21
[small:protected] => galeria/thumb/thumb_1247811681.jpg
[big:protected] => galeria/image/image_1247811681.jpg
[small2:protected] =>
[big2:protected] =>
[second_pict:protected] => n
[active:protected] => t
[dostepnosc:protected] => produkt dostępny
[nowosci:protected] => n
[nowosci_time:protected] => 0
[promocje:protected] => n
[promocje_time:protected] => 0
[kolor:protected] => multikolor
[visits:protected] => 7
[data_aktualizacji:protected] => 2010-10-13 12:31:53
[slowa_kluczowe:protected] =>
[pack_size:protected] => 1
[vat:protected] => 0.22
[kolor2
:protected
] => Array (
[126] => multikolor
)
[ilosc
:protected
] => Array (
[126] => 3
)
[rozmiar2
:protected
] => Array (
[126] => 62
)
[cena2
:protected
] => Array (
[126] => 21.00
)
)
)
W "zwykłej" tablicy byłoby to coś na wzór:
public function refresh($nr) {
if ($nr<0 || $nr>$this->counter()) return 0;
foreach ($this->list as $nr=>$towar) {
if ($towar != NULL) {
$this->list[$nr] = $_POST['ilosc'][$id];
}
}
return $this->list[$nr];
}
==========
Fragmenty kodu
==========
Produkty:
class Towar extends basicElement {
protected $id;
protected $nazwa;
protected $cena;
protected $rozmiar;
protected $opis;
protected $data_dodania;
protected $small;
protected $big;
protected $small2;
protected $big2;
protected $second_pict;
protected $active;
protected $dostepnosc;
protected $nowosci;
protected $nowosci_time;
protected $promocje;
protected $promocje_time;
protected $kolor;
protected $visits;
protected $data_aktualizacji;
protected $slowa_kluczowe;
protected $pack_size;
protected $vat;
protected $kolor2;
protected $ilosc;
protected $rozmiar2;
protected $cena2;
public function __construct($row,$kolor,$ilosc,$rozmiar,$cena) {
$this->id = $row[0];
$this->nazwa = $row[1];
$this->cena = $row[2];
$this->rozmiar = $row[3];
$this->opis = $row[4];
$this->data_dodania = $row[5];
$this->small = $row[6];
$this->big = $row[7];
$this->small2 = $row[8];
$this->big2 = $row[9];
$this->second_pict = $row[10];
$this->active = $row[11];
$this->dostepnosc = $row[12];
$this->nowosci = $row[13];
$this->nowosci_time = $row[14];
$this->promocje = $row[15];
$this->promocje_time = $row[16];
$this->kolor = $row[17];
$this->visits = $row[18];
$this->data_aktualizacji = $row[19];
$this->slowa_kluczowe = $row[20];
$this->pack_size = $row[21];
$this->vat = $this->showVat();
$this->kolor2 = $kolor;
$this->ilosc = $ilosc;
$this->rozmiar2 = $rozmiar;
$this->cena2 = $cena;
}
}
Dodawanie produktu do koszyka:
$ilosc = $_POST['ilosc'];
$kolor = $_POST['kolor'];
$rozmiar = $_POST['rozmiar'];
$rozmiary[$id] = explode(',', $rozmiar[$id]); $rozmiar = array(''.$id.'' => ''.$rozmiary[$id][0].''); $cena = array(''.$id.'' => ''.$rozmiary[$id][1].'');
$query = "SELECT * FROM `towar` WHERE `id`='$id'";
$result = $db->Execute($query);
$row = $result->FetchRow();
$towar = new Towar($row,$kolor,$ilosc,$rozmiar,$cena);
$koszyk->doKoszyka($towar);
koszyk.lib.php
public function doKoszyka($towar) {
$this->push($towar);
return 1;
}
W czym mam problem:
jestem w klasie o nazwie Koszyk i chciałbym za pomocą funkcji refresh() zmienić wartość pola 'ilosc' danego produktu na tą podaną przez użytkownika za pomocą metody $_POST().
Wnioskuję, że trzeba skorzystać z magicznych funkcji __get() oraz __set().
do pliku koszyk.lib.php dopisałem te dwie funkcje:
public function __get($name) {
return $this->list[$name];
}
public function __set($name, $value) {
$this->list[$name] = $value;
}
Ale po wywołaniu __set() moja tablica wygląda następująco:
(
[0] => Towar Object
(
[id:protected] => 126
[nazwa:protected] => Body Pawełek
[cena:protected] => 21.00,21.00,21.00,23.00,23.00
[rozmiar:protected] => 62,68,74,80,86
[opis:protected] => opis
[data_dodania:protected] => 2009-07-17 08:21:21
[small:protected] => galeria/thumb/thumb_1247811681.jpg
[big:protected] => galeria/image/image_1247811681.jpg
[small2:protected] =>
[big2:protected] =>
[second_pict:protected] => n
[active:protected] => t
[dostepnosc:protected] => produkt dostępny
[nowosci:protected] => n
[nowosci_time:protected] => 0
[promocje:protected] => n
[promocje_time:protected] => 0
[kolor:protected] => multikolor
[visits:protected] => 7
[data_aktualizacji:protected] => 2010-10-13 12:31:53
[slowa_kluczowe:protected] =>
[pack_size:protected] => 1
[vat:protected] => 0.22
[kolor2
:protected
] => Array (
[126] => multikolor
)
[ilosc
:protected
] => Array (
[126] => 3
)
[rozmiar2
:protected
] => Array (
[126] => 62
)
[cena2
:protected
] => Array (
[126] => 21.00
)
)
[ilosc:protected] => 15 // zapis po wywołaniu __set()
)
Ktoś pomoże? Pogubiłem się w tym wszystkim. Zaćmienie totalne. Będę wdzięczny za wszelkie wskazówki.