Domanda

sto sviluppando un'applicazione PHP / MySQL che gestisce più utenti simultanei. Sto pensando al miglior approccio da adottare quando si tratta di bloccare / guardia contro i record che sono attualmente in fase di visto / modificati.

Lo scenario da evitare è di due utenti che visualizzano il record, quello di fare un cambiamento, poi l'altro fare altrettanto -. Con il potenziale che un cambiamento potrebbe sovrascrivere la precedente

Nelle ultime versioni di WordPress che usano un metodo per rilevare questo, ma non sembra del tutto affidabile -. Spesso tornando falsi positivi, almeno nella mia esperienza

presumo una qualche forma di ajax deve essere in atto per 'ping' l'applicazione e farle sapere il record è ancora in fase visualizzato / modificato (in caso contrario, un utente potrebbe semplicemente chiudere il proprio finestra del browser, e poi come sarebbe l'applicazione sapere quello).

Un'altra soluzione ho potuto vedere è quello di controllare l'ultima volta aggiornato quando un record viene inviato per l'aggiornamento, per vedere se nel frattempo è stato aggiornato altrove - e quindi offrire all'utente una scelta di procedere o scartare le proprie modifiche.

Forse sto abbaiare contro l'albero sbagliato in termini di una soluzione - Quali sono i popoli esperienze di attuazione del presente (quello che deve essere un abbastanza comune) requisito

È stato utile?

Soluzione

Vorrei farlo: Conservare il momento dell'ultima modifica nel modulo di modifica. Confronta questa volta su presentazione con il tempo memorizzato nel database. Se sono uguali, bloccare la tabella, aggiornare i dati (insieme con il tempo di modifica) e sbloccare la tavola. Se i tempi sono diversi, informare l'utente su di esso e chiedere per il passo successivo.

Altri suggerimenti

Buona idea con il confronto timestamp. È poco costoso da implementare, ed è un'operazione economico funzionare in produzione. Basta scrivere la logica di restituire all'utente il messaggio di stato che la loro scrittura / aggiornamento non si è verificato perché qualcuno li ha battuto ad esso.

Forse considerare memorizzare il nome utente su ogni aggiornamento in un campo chiamato qualcosa come 'LastUpdateBy', e tornare indietro che per l'utente che ha avuto il loro aggiornamento Preceduto. Solo un po 'nicety per l'utente. Nizza nel senso aziendale, forse non in un ambiente in cui potrebbe non essere appropriato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top