If I'm understanding correctly, you want to use your own select form to update a post's published status instead of the publish/unpublish buttons? Something like this would work for that:
function save_my_data($post_id){
if($_POST['publish'] == 'yes' && get_post_status($post_id) != 'publish'){ //whatever your post variable is
remove_action('save_post', 'save_my_data'); //if you don't unhook the function you'll have an infinite loop
wp_publish_post($post_id);
add_action('save_post', 'save_my_data'); //rehook the function
}
if($_POST['publish']) == 'no' && get_post_status($post_id) == 'publish'){
remove_action('save_post', 'save_my_data'); //if you don't unhook the function you'll have an infinite loop
wp_update_post(array(
'ID' => $post_id,
'post_status' => 'draft'
));
add_action('save_post', 'save_my_data'); //rehook the function
}
}
You would probably want to add some error handling and optimize it a little bit. You also might want to account for the other post statuses outlined here: http://codex.wordpress.org/Post_Status#Default_Statuses