The changelog feature build into phpMyEdit is very nice and highly recommended that you utilize it. If configured individually in your forms, one changelog table will record the old and new values when records are updated or deleted. Storage of these values may not be elegant, but it's better than not being able to save old and new records. Schema example follows: CREATE TABLE `my_change_log` ( `id` mediumint(6) NOT NULL auto_increment, `updated` timestamp(14) NULL, `user` varchar(50) NOT NULL default '', `host` varchar(255) NOT NULL default '', `operation` varchar(50) NOT NULL default '', `tab` varchar(50) NOT NULL default '', `rowkey` varchar(255) NOT NULL default '', `col` varchar(255) NOT NULL default '', `oldval` text, # could be mediumtext, if mediumtext is used in your project `newval` text, # could be mediumtext, if mediumtext is used in your project PRIMARY KEY (`id`), KEY `tab` (`tab`), KEY `col` (`col`), KEY `updated` (`updated`) ) TYPE=MyISAM ; In your form, set: $opts['logtable'] = 'my_change_log'; ----- Changelog "user" value is extracted in the following order: * $_SERVER['REMOTE_USER'] * $REMOTE_USER Changelog "host" value is extracted in the following order: * $_SERVER['REMOTE_ADDR'] * $REMOTE_ADDR ----- The following example came from a custom PHP project where emulation of phpMyEdit's change log feature was implemented. Syntax below uses MySQL Improved functions mysqli_query instead of mysql_query (adjust to meet your needs). // Select the record to be "backed up" to the change log. $qry = sprintf('SELECT * FROM `%s`.`%s` WHERE `id` = "'.$id.'" LIMIT 1', $opts['db'], $opts['tb']); if(!$res = mysqli_query($cfg['server'][$sn]['link'], $qry)){ echo '
Changelog SELECT query failed:
'.htmlentities($qry).'