开发者

Cannot store checkbox values in array to database for some reason!

Hi I am having an incredibly hard time with what should be a simple issue.

As of CodeIgniter 1.开发者_StackOverflow7, '$this->input->post();' supported arrays but I cannot for get the values into the array for some reason. I have 7 check boxes that store into an array 'services[]' as you can see by this example view:

<?php $servicesdata = array (
         'name' => 'services[]',
         'value' => 'in_home_care',
         );
echo form_checkbox($servicesdata, set_checkbox('services[]', 'in_home_care', FALSE)); ?>

I'm quite certain this is the correct fashion because the forms do validate nicely if something goes wrong. Now I start to have issues when storing the values. I have 7 columns that need to have some sort of value... at this point I don't care but ideally it would be a boolean (a binary would work okay too). Here is what I have so far in my controller that everyone claims should work but just does not:

$c = new Client($servicesdata);
$c->first_name = $this->input->post('first_name', TRUE);
$c->in_home_care = $this->input->post('services[in_home_care]');

You can see the string I put for an example that works perfectly and inserts into a VARCHAR type while the array won't go into the database whatsoever. I feel as if that I am missing something here - namely the 'value' in the array but I'm just not sure where to go from here. Any help would be much appreciated because the only method I can get to work sacrifices my checkbox validation! :(


If your checkbox is unchecked, the value of the checkbox will not be entered into the $_POST array. This is probably where you are having problems.

There are two ways around this. Either have one box checked by default, or use HTML like the following (which may or may not be best practice/valid, but has worked for me in the past).

<input type="hidden" name="services" value="foo" />
<input type="checkbox" name="services" value="in_home_care" />

In the event that the box is not checked, the value "foo" for the name value "services" will be passed to the $_POST array.


First of all, there is some redundancy in your form (I think). You can set the attributes of your checkbox in the array, including whether it is checked or not:

$servicesdata = array (
         'name'    =>  'services[]',
         'value'   =>  'in_home_care',
         'checked' =>  FALSE,
         );
echo form_checkbox($servicesdata);

secondly, because you're naming it in an array, the object needs to be accessed after being assigned to another variable:

$checkbox_array = $this->input->post('services');
$service_type=$checkbox_array[0];//will give you 'in_home_care', [1] would be next in array and so on


A way to store those choices in the db is to create a string out of them and store that.

$this->input->post('colors') ? $colors=implode('-',$this->input->post('colors')) : $colors='';

That checks to see if anything was actually checked in the colors array. If so, create a string out of the array values seperated by dashes. Else assign empty to colors.

Then after you read the db string back:

$profile_data['colors']=explode('-',$row->colors);

Then you can feed those values back into the form inputs.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜