Your example is a bit confusing.
First let me explain why it doesn't work the way you want it to.
You are giving your hidden field a value from $_POST. $_POST only exists once you actually post the form. So on first load of the page, $_POST doesn't exist so $_POST['full_name'] is null.
When you submit the form and there is an error however, the same page reloads but this time $_POST exists since the page reloads after submitting the form.
Here's what is confusing. If on reload $_POST['full_name'] has a value it means you already have a 'full_name' field probably as a text input box. Why then do you want to have a hidden field with the exact same value?
If what you want in this hidden field is the value of a user attribute you need to do 2 things:
1- make sure the user is logged in, else no attributes are available
2- get the user info object to get the attribute value from like so:
$u = new User();
$ui = UserInfo::getByID($u->getUserID());
2- modify the value of the hidden field like so:
value="<?php echo $ui->getAttribute('attribute_handle'); ?>"