Sure, this is probably 2 small issues.
1) You need to change some stuff in lib/User.class.php
Add
var $promo;
up under
var $is_admin;
load_by_id() needs to set the value of "promo" coming back from the database
get_user_data() needs to set the value of "promo" just like all the other variables in that function
2) Try using this HTML
<?php
$checked = isset($data['promo']) && ($data['promo'] == 1);
?>
<input type="checkbox" name="promo" value="1" <?php $checked ? 'checked="checked"' : '' ?> />
This will work because checkboxes and radio buttons don't even show up in the $_POST if they are not checked. So you can always set the value, but only check the box if the data is set.
Now when it comes back, you should check isset($_POST['promo']) to see if the user checked it or not.