carrello

Sto imparando a fare un carrello elettronico,mi sono letto tutte le pagine

di post su questo forum riguadante carrello e e-commerce

devo dire che incomincio a capire.

Una volta registrato il cliente ,il tutto può avvenire tramite session,dove il cliente inserisce il prodotto nel carrello o lo cancella e finchè non da la conferma dell'acquisto non viene

memorizzato niente nel database.

Un sito di vendita on line può avere 1 o più utenti (spero per lui  :) ) che fanno un'acquisto nello stesso momento.

Una cosa però non ho capito.

Ho un q.tà di 10 scarpe e il clente A ne acquista 7 (le mette solo nel suo carrello)

Nello stesso tempo il cliente B ne acquista 5 (anche lui le mette solo nel suo carrello)

Adesso il cliente A conferma l'acquisto,e poco dopo anche l'utente B conferma l'acquisto ma

le scarpe per lui non ci sono più 5 ma 3 perchè il cliente A ne ha confermate nell'acqisto 7,quidi 10-7=3   :D

E' qui che non ho capito come fa a dire che non può più effettuare l'acquisto delle 5 scarpe al cliente B?

Ho letto vari doc sulle transazioni (BEGIN-COMMIT-ROLLBACK)

In pratica nella pagina di conferma acquisto dovrei mettere

BEGIN

query insert

e se va tutto bene COMMIT altrimenti ROLLBACK

Basta questo per evitare il problema sopra descritto?   

Ma come fa a fare il controllo delle quantità?   :o

inviato 9 anni fa
leoneweb
X 0 X

In una normale applicazione desktop usare le transazioni sarebbe stato sufficiente. Con PHP purtroppo non è così poiché ad ogni pagina visitata il PHP chiude la connessione con il database e quindi le transazioni vanno automaticamente in ROLLBACK.

Ciò che ti consiglio di fare è ignorare il problema ed effettuare il controllo della disponibilità sia quando l'utente seleziona il prodotto, sia quando conclude l'acquisto.

Quando seleziona il prodotto verifichi che la quantità richiesta sia attualmente disponibile.

Quando viene fatto l'acquisto vero e proprio (pagamento) devi ricontrollare la disponibilità del bene che nel frattempo potrebbe essere stata azzerata da un altro acquisto. Lock e transazioni in questo caso funzionano perché tutte le operazioni coinvolte nel pagamento e nell'aggiornamento del magazzino avvengono durante l'esecuzione di un unico script PHP.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ok,quidi alla fine prima di fare la conferma e di conseguenza l'inserimento dei prodotti

acquistati rifaccio un controllo sulle quantità.Invece di mettere il lock table

va bene se utilizzo BEGIN-COMMIT-ROLLBACK

Come avevo scritto nel post precedente

BEGIN

query controllo quantità prodotti

query insert

e se va tutto bene COMMIT altrimenti ROLLBACK

Logicamente tutto questo nella stessa pagina.

Però devo dirti che ancora non capito come funziona questo BEGIN COMMIT ROLLBACK

In prativa sostituiscono il blocco tabelle?

Un'altra ed ultima domanda (spero) :),le session vengono chiuse

ogno volta che passo da una pagina all'altra,ma i cookie no,

quindi potrei usare quest'ultimi no?

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

le transazioni sostituiscono i lock nel senso che proteggono i dati manipolati durante la transazione, quindi nel tuo caso dovrebbe  essere sufficienti

Se altri utenti vogliono interagire con i dati manipolati dalla transazione, questi vengono messi in attesa, finché la transazione non si conclude e rilascia i dati.

Le sessioni non vengono chiuse ad ogni pagina, altrimenti non servirebbero a niente:

http://www.phpnews.it/articoli/php/le-sessioni/

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda