piu che una tabella in un database ti conviene creare una classe per ogni tipo di prodotto e ogni volta che che selezioni un prodotto dalla "schermata" istanzi un oggetto della relativa classe e lo memorizzi in sessione. il carrello lo puoi fare con un altra classe. se poi vuoi salvare il carrello nel database serializzi l'oggetto carrello creato e lo salvi in una tabella del db. non ti conviene salvare nel database dei dati ogni volta che selezioni un prodotto anche perche una volta completato l'ordine il carrello si svuota e quindi nn è necessario mantenere i dati in memoria troppo a lungo. ti posto un codice di un progetto che ho realizzato tempo fa. sono delle classi per la gestione di una videoteca online.
Codice PHP:
class Film
{
private $id_film;
private $titolo;
private $regista;
private $anno;
private $genere;
private $durata;
private $prezzo;
private $n_copie;
public function __construct() {}
//set get id_film
public function setIDfilm($id)
{
$this->id_film=$id;
}
public function getIDfilm()
{
return $this->id_film;
}
//set get titolo
public function setTitolo($tit)
{
if ($tit=="") {
$this->titolo="undefined";
}
else $this->titolo=$tit;
}
public function getTitolo()
{
return $this->titolo;
}
//set get regista
public function setRegista($reg)
{
if ($reg=="") {
$this->regista="undefined";
}
else $this->regista = $reg;
}
public function getRegista ()
{
return $this->regista;
}
//set get anno
public function setAnno($year)
{
if ($year=="") {
$this->anno="undefined";
}
else $this->anno=$year;
}
public function getAnno()
{
return $this->anno;
}
//set get genere
public function setGenere($tipologia)
{
if ($tipologia=="") {
$this->genere="undefined";
}
else $this->genere=$tipologia;
}
public function getGenere()
{
return $this->genere;
}
//set get durata
public function setDurata($min)
{
if ($min=="") {
$this->durata="undefined";
}
else $this->durata=$min;
}
public function getDurata()
{
return $this->durata;
}
//set e get copie
public function setCopie($copie)
{
if ($copies=="") {
$this->n_copie="no quantit‡";
}
else $this->n_copie=$copie;
}
public function getCopies()
{
return $this->n_copie;
}
//set e get prezzo
public function setPrezzo($eur)
{
$this->prezzo=$eur;
}
public function getPrezzo()
{
return $this->prezzo;
}
}
Codice PHP:
require_once('film.class.php');
class cart {
private $mov = array();
private $qt = array();
private $numeroarticoli;
public function __construct() {
$this->numeroarticoli = 0;
}
public function getNumeroarticoli() { return $this->numeroarticoli; }
public function getMov() { return $this->mov; }
public function getQt() { return $this->qt; }
public function add_film($mov) {
//Ottengo la lunghezza dell'array
$position=count($this->mov);
$trovato=0;
for ($i=0;$i<count($this->mov);$i++) {
//Verifico se il prodotto è presente nel carrello
if ($this->mov[$i]==$mov) $trovato=1;
}
//Se il prodotto è già presente aggiorno quantità e variante
if ($trovato==1) $this->aggiungi_copia($mov);
else {//altrimenti aggiungo il prodotto al carrello
$this->mov[$position]=$mov;
$this->qt[$position]=1;
$this->numeroarticoli = $this->numeroarticoli + 1;
}
}
public function aggiungi_copia($mov) {
$position = -1;
for ($i=0;$i<count($this->mov);$i++) {
//Prelevo la posizione del prodotto nell'array
if ($this->mov[$i]==$mov) $position=$i;
}
if ($position==-1) echo "Impossibile aggiornare il prodotto,prodotto non trovato!
";
else {
//Aggiorno le informazioni del prodotto
$this->qt[$position]++;
$this->numeroarticoli = $this->numeroarticoli + 1;
}
}
public function delete_film($mov) {
$position = -1;
for ($i=0;$i<count($this->mov);$i++) {
//Prelevo la posizione del prodotto nell'array
if ($this->mov[$i]==$mov) $position=$i;
}
if ($position!=-1) {
$this->numeroarticoli = $this->numeroarticoli -($this->qt[$position]);
$cont=0;
for ($i=0;$i<count($this->mov);$i++) {
if ($this->mov[$i]!=$mov) {
//creo 2 nuovi array in cui andro a copiare $mov, e $qt tutti gli indici meno l'indice da eliminare
$app_mov[$cont]=$this->mov[$i];
$app_qt[$cont]=$this->qt[$i];
$cont++;
}
}
//rimuovo il contenuto degli array
unset($this->mov);
unset($this->qt);
for ($i=0;$i<count($app_mov);$i++) {
//riverso il contenuto degli array sopra creati in $mov e $qt
$this->mov[$i]=$app_mov[$i];
$this->qt[$i]=$app_qt[$i];
}
}
else echo "Impossibile cancellare il prodotto,prodotto non trovato!
";
}
}