Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di grisson
    Registrato dal
    Jul 2006
    Messaggi
    166

    lock database su disponibilità prodotti per e-shop

    sto sviluppando un sito di commercio elettronico per un cliente, e mi è venuta in mente la questione della disponibilità.
    ad esempio:
    nel db per il prodotto XX c'è disponibilità 10.
    l'utente 1 mette nel carrello 5 pezzi del prodotto XX (via php controllo se nel db ci sono piu di 5 pezzi e veod che ce ne sono 10 quindi ok)
    l'utente 2 mette nel carrello 8 pezzi del prod. XX(idem, controllo nel db 8<10 quindi ok)

    i due utenti poi acquistano e mi infetiellano: in totale hanno comprato 13 pezzi di quel prodotto ma io ne ho solo 10.

    Ho letto che è un noto problema risolvibile bloccando le tabelle.

    mi spieghereste i breve come funziona la faccenda?
    perchè non riesco a capire bene il filo logico.
    cioè io blocco la tab quando un utente sceglie la quantita=Y, ma poi io devo levare subito Y dal database o solo ad acquisto ultimato?
    perchè se non lo levo allora posso rimanere fregato comunque...
    ma se la levo e poi l'utente non acquisa nulla allora nel db poi ho un numero come disponibilità che non è reale(in magazzino ne ho di piu)..

    fatemi luce.. :master:
    Contribuisci alla creazione della mappa italiana del wireless: http://www.wirelessmapitalia.net

  2. #2
    Utente di HTML.it L'avatar di grisson
    Registrato dal
    Jul 2006
    Messaggi
    166
    up
    Contribuisci alla creazione della mappa italiana del wireless: http://www.wirelessmapitalia.net

  3. #3
    Bloccare le tabelle? Beh si, è una soluzione antiquata e fattibile, però...

    Sicuramente il problema della disponibilità è molto frequente; bisogna anche dire che sicuramente l'ecommerce che stai sviluppando non è certo Amazon... quindi ... sicuramente è raro che capiteranno due acquisti insieme dello stesso oggetto.

    Molto semplicemente io creerei una tabella cart e una tabella cart_session, nella quale (quest'ultima) viene inserita la sessione del carrello, con l'id di tutti i prodotti e la quantità richiesta.

    Quando fai il check lo fai prima nel magazzino e poi nella tabella cart_session, per controllare che nessun altro stia comprando quel medesimo prodotto.

    Alla fine, una semplice differenza e via
    Sviluppatore CI

    NettusLab Weblog

  4. #4
    Utente di HTML.it L'avatar di grisson
    Registrato dal
    Jul 2006
    Messaggi
    166
    e se poi un utente mette nel carrello ma poi chiude il broser?
    rimane il record nella tabella cart_session e togliendo i prodotti registrati qui dentro avrei una disponibilità minore rispetto a quella reale.

    è fattibile mettere un "timeout" al record? cioè io metto un campo int(10) che mi tiene l'ora ( quella presa da mktime per intenderci) e ad ogni pagina che l'utente visita aggiorno l'ora.
    se l'utente non acquista e chiude il browser, l'ora non viene piu aggiornata e dopo tot minuti posso eliminare questi record.

    l'avevo fatto un po di tempo fa per dare un timeout al login su un altro progetto e funzionava.
    non so però se è una soluzione tamarra o valida
    Contribuisci alla creazione della mappa italiana del wireless: http://www.wirelessmapitalia.net

  5. #5
    Originariamente inviato da grisson
    e se poi un utente mette nel carrello ma poi chiude il broser?
    rimane il record nella tabella cart_session e togliendo i prodotti registrati qui dentro avrei una disponibilità minore rispetto a quella reale.

    è fattibile mettere un "timeout" al record? cioè io metto un campo int(10) che mi tiene l'ora ( quella presa da mktime per intenderci) e ad ogni pagina che l'utente visita aggiorno l'ora.
    se l'utente non acquista e chiude il browser, l'ora non viene piu aggiornata e dopo tot minuti posso eliminare questi record.

    l'avevo fatto un po di tempo fa per dare un timeout al login su un altro progetto e funzionava.
    non so però se è una soluzione tamarra o valida
    E perché no? Devi metterlo per forza un time out magari un bel timestamp! che dopo tot secondi, anche un paio di minuti, chiude tutto.

    Alla fine a te serve il controllo per quei 100 - 200 secondi (che sono gia tantissimi) dove l'utente segue il carrello, se poi lui chiude il browser... affari suoi tu cancelli tutto!

    Questo lo puoi fare in due modi:

    1) con le sessioni PHP (lavoraccio)
    2) con una tabella temporanea di sql, più fattibile.
    Sviluppatore CI

    NettusLab Weblog

  6. #6
    Utente di HTML.it L'avatar di grisson
    Registrato dal
    Jul 2006
    Messaggi
    166
    ok allora provo poi faccio sapere.
    Contribuisci alla creazione della mappa italiana del wireless: http://www.wirelessmapitalia.net

  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    io faccio così...

    --> sessione per raccolta articoli
    --> tabella temporanea quando il cliente arriva al pagamento
    --> da tabella temporanea a ordine se l'acquisto è andato a buon fine, viceversa rimane in temporanea.


    una semplice query svuota la tabella temporanea dove la data ordine è + vecchia di 4 gg addietro



    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  8. #8
    Utente di HTML.it L'avatar di grisson
    Registrato dal
    Jul 2006
    Messaggi
    166
    no io sto implementando il metodo di nettuslab.
    pensandoci un'attimo mi piace un pochino di piu perchè mi leva subito dalla disponibilità dei prodotti quelli che l'utente ha già messo nel carrello, cosi elimino a monte il problema che ho descritto nel primo post.

    non so ma mi ispira di più...
    Contribuisci alla creazione della mappa italiana del wireless: http://www.wirelessmapitalia.net

  9. #9
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    ti dico la verità.. a volte non sono daccordo quando si dice 'affari suoi'.. soprattutto quando un sito come un e-commerce oltre a essere valutato per i prodotti lo è anche per i servizi. se poi mi obblighi a fare tutto in 200 secondi mi scende proprio.. come se il negoziante mi obbligasse a dare un' occhiata ai sui prodotti per max 3 minuti...

    personalmente ho eliminato il problema sessioni limitate .. l' utente in questa maniera può decidere tranquillamente come navigare nel sito senza perdere il carrello in qualsiasi momento ...

    ma ti immagini uno che si legge una scheda articolo lunghissima (3 minuti ci vogliono? ) e che appena torna alla lista articoli perdesse il carrello e dovesse nuovamente andarsi a cercare quello che aveva prima ? diventa di gomma...
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  10. #10
    Utente di HTML.it L'avatar di grisson
    Registrato dal
    Jul 2006
    Messaggi
    166
    si beh in effetti 3 minuti sono da escludere, io proporrei per 1 oretta. però come lo implemento io è 1 ora in cui non viene fatta nessuna operazione sul sito...
    in pratica in ogni pagina metto una funzioncina che se ha qualcosa nel carrello , aggiorna la data del timeout, cosi se non fa nulla( ma proprio nulla, ad ex non ricarica nessuna pagina o chiude il browser) per 1ora o piu il record della sessione viene eliminato.

    io piu di venire in contro all'utente cosi non so cosa fare, devo anche pensare al sito, cioè io faccio la mia parte però anche l'utente deve fare la sua, se poi si lamenta perchè dopo 1 ( ma mettamo anche 2) ore che non fa nulla gli è scaduta la sessione allora non so che dire....
    Contribuisci alla creazione della mappa italiana del wireless: http://www.wirelessmapitalia.net

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.