Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema per aggiornare il db.....

    Ciao a tutti, sto cercando di programmare il sito di un negozio on-line che vende cappelli pagabili tramite paypal.Ho strutturato un magazzino che tiene il conto del numero di cappelli rimasti, ogni volta che viene fatta una richiesta si controllano le giacenze e ,nel caso in cui la disponibilita' e' maggiore o uguale alla richiesta, si procede con il pagamento altrimenti no.Appare evidente che l'aggiornamento delle mie giacenze lo devo fare dopo che l'utente che effettivamente pagato, per far cio', poiche paypal ti da la possibilita' di decidere la pagina dove ridirigere il cliente dopo aver effettuato il pagamento, redigo il cliente ad una pagina di "ringraziamenti" che in realta' mi aggiorna le giacence nel magazzino. Se le disponibilita' ci sono avremo queste fasi:

    richiesta N cappelli => controllo disponibilita' => pagamento N cappelli => aggiornamento giacenza

    Ora i miei problemi sono 2:

    1)Nel mio magazzino rimangono 10 cappelli. L'utente pippo decide di comprare 10 cappelli, invia la richiesta, viene fatto il controllo nel magazzino ed inizia la procedura di pagamento. Mentre pippo sta immettendo i dati per pagare arriva paperino che chiede anche lui 10 cappelli, poiche' il db non e' stato ancora aggiornato il controllo della disponibilita' risulta TRUE ed anche paperino comincia ad immettere i dati per pagare.Contemporaneamente pippo ha finito di pagare ed e' arrivato alla famosa pagina di "ringraziamenti" quindi mi ha aggiornato il magazzino a 0;successivamente anche paperino finisce le procedure di pagamento ad arriva alla pagina di "ringraziamenti" risultato? Ho venduto 10 cappelli a pippo e 10 a paperino avendone solo 10 in magazzino; come posso evitare questo spiacevole inconveniente?

    2)Nel mio magazzino ci sono 1000 cappelli. L'utente pippo compra 10 cappelli segue tutta la procedura ed arriva alla famosa pagina di "ringraziamenti" ma che in realta' mi aggiorna il magazzino sottraendo i 10 cappelli di pippo dai 1000 rimasti dal magazzino (900).Ora il mio buon pippo cosa fa? comincia a premere F5 a "rotella" aggiornando la pagina ogni volta e sottraendo 10 cappelli dal magazzino senza averli comprati.........Come risolvo questo problema?


    Vi ringrazio anticipatamente per i vostri interventi

  2. #2
    Help please

  3. #3
    Puoi provare ad usare una tabella del DB di appoggio, dove mettere le transsazioni in attesa di pagamento.

    Mi spiego.
    Quando arriva il cliente, non va a vedere quanta giacenza c'è nel magazzino, ma prende il dato da una tabella in cui legge le giacenza di magazzino meno le richieste in attesa di pagamento.

    Che te ne sembra come idea?
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  4. #4
    mmmm.....ed il primo che comincia a comprare i cappelli vede nel db originale?.....non e' che mi potresti far vedere con un esempio? grazie cmq adesso ci penso e ci lavoro sopra

  5. #5
    Ho poco tempo per scriverti codice, ma ti spiego per blocchi come intenderei io questo procedimento.

    Un utente vuole vedere cosa c'è in catalogo => query al DB ufficiale estrapoli la quantità disponibile per quell'oggetto.
    Con quella quantità vai a popolare il DB di appoggio che dovrà avere (tra gli altri) i seguenti campi:

    codice:
    » identificativo_item
    » quantita_in_magazzino
    » quantita_richiesta
    » data_richiesta
    » metodo_di_pagamento
    Perché ho messo questi campi come fondamentali.
    Se un secondo utente visualizza e basta il catalogo, è giusto che gli si mostri la quantità disponibile per ogni oggetto (query alla tabella ufficiale).
    Se però vuole acquistarne uno (o più) filtri la disponibilità in base al metodo di pagamento scelto dall'utente che ha già fatto un acquisto (query alla tabella di appoggio).

    Nel caso il primo utente abbia pagato PayPal o Carta di Credito, quindi istantaneamente, aggiorni direttamente la tabella ufficiale con le nuove quantità (ed il secondo saprà già) il numero di pezzi disponibili.
    In caso il primo utente voglia pagare con bollettino postale, con bonifico o che so io, attendi che la transazione del primo utente si risolva in un modo o nell'altro, ed al secondo utente mandi un messaggio di "disponibile a giorni".
    Così, se la prima transazione in coda va a buon fine il secondo cliente sa già che deve attendere qualche giorno.
    Se la prima trattativa non si conclude dopo un periodo x (nel caso del bonifico 5 giorni), puoi tranquillamente cancellare la trattativa in sospeso e procedere con la seconda.
    Ad ogni modo, ogni volta che concludi una trattativa, vai ad aggiornare il DB ufficiale delle quantità.

    Forse è un po' macchinoso come metodo, ma lo trovo un meccanismo chiaro e trasparente per gli utenti di questo sito di e-commerce.

    Se poi nel sito metti in qualche modo le policy di vendita, ogni utente sa come ragiona il venditore e decide autonomamente se quelle regole gli vanno bene o meno.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  6. #6
    Invece sul fatto di non far fare "aggiorna" sulla pagina hai qualche consiglio da darmi?

  7. #7
    Intendi il problema che se uno fa il refresh della pagina poi alla fine si rischia di avere dei doppioni nel DB, vero?

    Beh... di solito si fa una piccola magia.
    Una volta aggiornato il DB, dopo le istruzioni per la query di update, al posto di mandare un messaggio di cortesia si fa un redirect ad una nuova pagina dove viene mostrato il messaggio con l'avvenuta transazione.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

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.