one user might update the row while the other users look at old data. They might make updates of the old data, thereby overwriting the changes of the first user.
first, ditto on using a solid RDBMS--you didn't mention what you're using ..
second, here's something on the app level you can do to help prevent this:
- put a last_updated (or similarly named) column in your table
- either add a trigger to set last_updated=NOW on any INSERT/UPDATE, or make sure that your code does so
- when data is retrieved for the user, keep track (session, hidden var, etc) of not only the row's pk, but also the last_updated
- when user submits for saving, throw error (or warning screen) if the stored last_updated value for this row is before the current value in the db (meaning someone updated it in the meantime)
Bugzilla used to (may still?) do something similar to this and would throw a "mid-air collision" error message.