There is a guy I work with here that wrote a function that does just what you are asking. He has a generic change table that has the time the change took place, the date, and the table, then a generic description of what changed.
The function takes the table, primary key field, primary key and an associative array of fields=>values ($_POST). Then the function does a select on the database, retrieves the fields, compares them to the array and any ones that are changed get written on like
field2 was changed from X to Y %%%% field 10 was changed from A to B
The percentages are used as a seperator so that the field can be parsed out and displayed in a nifty table. So thats one solution if you feel like writing it.
I think his function also updates the data table as well as the change table all in one fell swoop.