Visualizzazione dei risultati da 1 a 6 su 6

Discussione: carrello

  1. #1

    carrello

    Sto imparando a fare un carrello elettronico,mi sono letto tutte le 10 pagine
    di post su questo forum con ricerca (e-commerce) e altre pagina con ricerca (carrello),
    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.

    E' qui che non ho capito come fa a dire che non può più effettuare l'acquisto delle 5 scarpe
    Ho letto anche la pillola 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à?

  2. #2
    Non complicarti troppo la vita... un conto e' mettere nel carrello una quantita' di merce, un altro conto e' acquistarla. Se ci sono 10 scarpe, e due utenti le mettono nel carrello tutte, sara' solo al momento dell'effettivo acquisto che verificherai la disponibilita' residua. Quando il primo utente andra' a confermare l'acquisto (magari dopo aver pagato), a quel punto le 10 unita' verranno scalate dal magazzino, e l'altro utente, al momento della conferma, si vedra' restituito il messaggio "Siamo spiacenti, ma il prodotto e' esaurito" oppure "La quantita' indicata non e' piu' disponibile".

    D'altronde se un utente arriva e compra tutto, c'e' poco da fare... e' arrivato prima lui...

  3. #3
    ok,fino a qui ci sono,alla fine quando vado ad inserire l'acquisto scala il numero dei prodotto dal database quantità.
    Ma come faccio a dire al cliente (che conferma l'acquisto un'attimo dopo) che non c'e' + prodotti?
    come avevo scritto prima con il begin commit e rollback,
    oppure devo rifare delle query di controllo?

  4. #4
    Premettendo che non ho mai affrontato la questione a livello professionale, io farei una roba del genere: usando se vuoi anche il BEGIN-COMMIT-ROLLBACK quando l'utente inizia la procedura di pagamento della transazione, in qualche modo bloccherei momentaneamente l'acquisto di quella merce (magari con un flag sul database del magazzino) in attesa dell'esito della transazione. Se questa e' positiva, scali la quantita' dal magazzino e poi sblocchi la merce.

    In questo modo se due utenti contemporaneamente stanno acquistando un oggetto, il primo che avviera' la procedura di transazione e pagamento mettera' in "standby" la merce che sta acquistando, cosi' l'altro utente, qualora stesse acquistando la medesima merce, dovra' attendere prima la chiusura della prima transazione.

    Dovrai mettere anche una specie di timeout sulla transazione, in modo che il secondo utente non debba attendere un quarto d'ora i comodi del primo utente. Ad ogni modo, se si tratta con le quantita', secondo me e' fondamentale fare in modo che, sulla medesima merce, avvenga una transazione per volta.
    Volendo affinare le cose potresti far avvenire il blocco della merce solo se l'utente in questione ordina un quantitativo di merce che supera la giacenza "virtuale" per quell'oggetto. Nel senso che se un utente ordina 2 oggetti, nel magazzino ce ne sono 10, e l'altro utente ne ordina 3, non c'e' motivo di bloccare la transazione a questo secondo utente, perche' "virtualmente" anche se il primo utente compra gli oggetti che ha messo nel carrello, c'e' sufficiente disponibilita' anche per il secondo.

    Fossi in te pero' attenderei il commento di qualcuno che ha gia' esperienza professionale in tal senso, vista la delicatezza della questione. Nel frattempo spero comuqnue di averti dato qualche spunto di riflessione o idea. ^_^

  5. #5
    Quello che mi hai detto non fa una piega.
    Io non vorrei bloccare le tabelle, e se non ho capito male
    il begin commit e rollback evitano il blocco delle tabelle,
    cioè se un cliente conferma l'acquisto ,e un cliente
    successivo voleva la stessa merce ma non è + disponibile entra in gioco
    il rollback che annulla l'acquisto di quest'ltimo perchè
    il materiale non è + disponibile.
    Volevo sapere se il discorso è giusto,e se per fare questo
    non devo fare altro che aggiungere nella pagina conferma acquisto
    Begin
    query inserimento acquisto merce
    se tutto ok Commit else rollback

  6. #6
    up

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.