This has nothing to do with Codeigniter, it's just how browsers work, if a checkbox is unchecked no POST data is sent to the server.
So you can either check in the controller for $this->input->post('visible')
(it will return false if the checkbox is unchecheck and whatever you have in value
.
Or you can do a small hack and put an hidden input with the same name and the value as false
before you checkbox.
In your example you should put value="1"
on the checkbox and have a <?=form_hidden('visible', 0)?>
before the checkbox.