rcarr,
the solution is simplicity itself...one of the fields in the row is the row id or primary key for the table to be updated...you can hide this field or keep it visible but disabled
and the other is that all the elements in the table are arrays
echo "<input type=\"hidden\" name = \"row_id[]\" value = \"$row_id\">";
or
echo "<input name=\"row_id[]\" value=\"$row_id\" DISABLED>";
as for the update, it is pretty simple as well. for speed mysql knows that it only needs to affect changed values, so it will only update changed fields...so:
lets say we have a 3 field data set (row_id, first_name and last_name)
<?
'get the data form the form
$rows=$POST['row_id'];
$fnames=$POST['first_name'];
$lnames=$_POST['last_name'];
//now all of these values are arrays already, so now we cycle
//through the data and update the db
for ($x=0;$x<count($rows);$x++){
$sql="update tablename set first_name=".$fnames[$x].", last_name=".$lnames[$x]." where row_id=".$rows[$x];
$result=$mysql_query($sql) or die ("can't update because ".mysql_error());
} //close loop
?>
other might prefer to use key value pairs to move through the array, but the end result is the same
there are a variety of enhancements that could be made here. you could implement a counter on the client fired by an onChange event in javascript to get a count of how many field where changed and then compare this to the mysql_affected_rows function to see if they are the same...
could try implementing a clientside event to set a hidden value in a row, similar to the above for each row which is set if a value in the row is changed...then check for this value and only update those rows in which this value is set..
hth