tutorial carrello della spesa in php

zoc

Nuovo Utente
7 Mar 2010
23
0
0
ciao a tutti...
ho seguito il vostro tutorial sul carrello della spesa in php. Complimenti è fatto molto bene ed è molto capibile!

Pero' ho una domanda. Come posso fare nel caso dovessi registrare una taglia e un colore di un prodotto?
Ho visto che voi passate solo gli id all'array di sessione.

Grazie mille per la disponibilità!
 
La cosa diventa un po' più difficile. Praticamente hai bisogno di inserire un intero array come sessione. Quindi la sessione carrello conterrà una stringa trattata con la funzione serialize() che converte un array in una stringa, e poi quando hai bisogno di visualizzare i dati li trasformi di nuovo con unserialize() che effettua l'operazione opposta. Se ti serve un esempio pratico fammi sapere!
 
se mi passassi un esempio saresti gentilissimo!!!
perchè ora come ora sono in alto mare!

grazie mille!
 
mitico ale!!!!
io pensavo ad una cosa...
ma se mettiamo dei "delimitatori".... nel senso che gli elementi inseriti nell array sono:

11*giallo*XL, 12*verde*XS, 16*blu*M

cosi facendo la gestione dovrebbe rimanere la stessa, solo che quando vai a recuperare l'id devi spezzare la stringa.

È una boiata o può funzionare?
Inoltre mi chiedevo quanto potesse essere utile, invece di memorizzare tutto nella session, di inserire nel db l'ordine anche durante il riempimento, invece di farlo solo dopo la conferma ultima prima del pagamento.

grazie mille!
 
Dunque, il sistema che tu proponi non è molto efficiente e presenta alcune limitazioni. Pensa ad esempio se hai un prodotto il cui nome contiene il carattere speciale che usi come delimitatore. La sessione verrebbe completamente sballata e ci potrebbero essere gravi conseguenze. Per questo PHP mette a disposizione le funzioni di serializzazione (serialize() e unserialize()). Esse si occupano di convertire qualsiasi oggetto in una stringa e viceversa, in modo che possa essere memorizzato anche dove normalmente non sarebbe consentito (un file di testo, un database...). Inoltre sono assolutamente sicure e non c'è rischio che succeda ciò di cui ho parlato qualche riga sopra.

Per quanto riguarda la memorizzazione dell'ordine sul database: sì, si potrebbe fare, e sarebbe anche più efficiente e professionale, ma non penso che ne valga la pena. Innanzitutto dovresti prepararti a priori per molte problematiche. Metti che l'utente inserisca nel carrello 100 prodotti, e poi chiuda la pagina? I dati rimarrebbero nel database ad occupare spazio, e a lungo andare potrebbe causare seri problemi. Quindi dovresti implementare un sistema che fa automaticamente scadere gli ordini non manipolati da un certo periodo di tempo. Non è complesso, però è una cosa lunga e dispendiosa in termini di tempo. Usare le sessioni invece è veloce, pratico (vengono distrutte appena l'utente chiude il browser), ed efficiente.
 
si infatti, anche io sono daccordo con te... per un sistema fatto solo di id, taglie e colori la sessione risulta la cosa migliore...
se posso darti una mano per realizzare la cosa sono a tua disposizione!
 
ciao Alessandro, mi è venuta un'idea. La condivido con voi cosi se è valida la porto avanti.

Ma se noi recuperiamo il carrello per esempio cosi:

Codice:
$carrello = array ('11' => array ('taglia' => 'XL',  'colore' => 'rosso'),
	'14' => array ('taglia' => 'S', 'colore' => 'verde'));

e poi manteniamo il sistema del vostro carrello con le varie funzioni esistenti.... dici che può risolvere la cosa?

ciao e grazie!
 
ciao Alessandro, mi è venuta un'idea. La condivido con voi cosi se è valida la porto avanti.

Ma se noi recuperiamo il carrello per esempio cosi:

Codice:
$carrello = array ('11' => array ('taglia' => 'XL',  'colore' => 'rosso'),
	'14' => array ('taglia' => 'S', 'colore' => 'verde'));

e poi manteniamo il sistema del vostro carrello con le varie funzioni esistenti.... dici che può risolvere la cosa?

ciao e grazie!
sembra che possa essere la via più semplice

P.S: per caso sei di Bologna?
 
e allora mi sa che seguo questa strada perchè la scadenza arrivaaaaa!!!
non sono di bologna, ma ci sono stato un po' di volte :)

ciao ciao
 
ragazzi ho fatto e funziona...
ecco il codice inerente al file function.php

PHP:
$id = $_POST['id'];
$colore = $_POST['colore'];
$taglia = $_POST['taglia'];
$quantita = $_POST['quantita'];

$carrello = $_SESSION['carrello'];

if (@isset($_GET['action']))
{
	$action = $_GET['action'];
	
	switch ($action)
	{
		
		case 'aggiungi':
		
			if ($carrello)
			{
				// aggiungo un elemento all'array
				$carrello[] = array ('id' => $id, 'colore' => $colore, 'taglia' => $taglia, 'quantita' => $quantita );
				
			} else {
				
				// creo l'array 'carrello'
				$carrello = array (array ('id' => $id, 'colore' => $colore, 'taglia' => $taglia, 'quantita' => $quantita ));
				
			}
		
		break;
		
		
		case 'cancella':
		
			$prod_id = $_GET['prod_id'];
			unset ($carrello[$prod_id]);
			
		break;
			
	}

}

// riempio di nuovo il carrello
$_SESSION['carrello'] = $carrello;

manca l'aggiornamento, ma il numero dei prodotti l'ho messo dove uno seleziona le taglie e i colori...

grazie per l'aiuto!!
 
metti un controllo di validazione sui dati inviati per post (magari con htmlenties), giusto per sicurezza :)
 
ok perfetto.... secondo te è il caso di farlo anche se non sono dati inseriti in campi ma sono a tendina e già controllati in javascript?

grazie!
 
si, è sempre meglio controllare tutto quello che arriva per POST o GET
 
Anche perché esistono plugin per Firefox (come Firebug) che consentono di modificare il codice HTML di una pagina anche durante la sua esecuzione. Quindi si possono modificare anche i valori dei campi dei menù a tendina!
 
ultimo dubbio.
Ma htmlentities fa tutti i controlli del caso o devo anche usare il trim, addslashes ecc..??

grazie mille mila!
 
secondo te è giusto formattarle così?

$valore = trim(addslashes(stripslashes($_POST['valore'])));

grazie!
 
ma usando addslashes poi nel momento del recupero bisogna andare a usare lo stripslashes... se invece faccio addslashes(stripslashes($_POST['valore']))
non prendo due piccioni con un fava?
 

Discussioni simili