Calling session_register() will save things as they are at that moment. Since connections are generally not as "persistent" as we wish them to be, the info that the user types in doesn't even reach the server nor the page until they hit the submit button.
By registering it first thing when the page loads, that puts it in place for the next HTTP_SESSION_VARS, but will not put it in the current one. However, it can easily be accessed by HTTP_PUT_VARS, etc. So you should probably do something like
$varname = $HTTP_SESSION_VARS[$varname] ? $HTTP_SESSION_VARS[$varname] : $HTTP_PUT_VARS[$varname];
which would select which ever one has a value; you should obviously do something else if people might want to blank fields out 😉 But this is theoretical solutions we're talking about here...
Otherwise, you can enable gpc_globals and have all your session variables become global, which would take the confusion out of which data is being PUT'd or coming out of a session. But that does have its disadvantages.