Arrays 由于某些原因,无法将数组中的复选框值存储到数据库!

Arrays 由于某些原因,无法将数组中的复选框值存储到数据库!,arrays,forms,codeigniter,post,checkbox,Arrays,Forms,Codeigniter,Post,Checkbox,嗨,我有一个难以置信的困难的时间与什么应该是一个简单的问题 从CodeIgniter 1.7开始,“$this->input->post();”支持数组,但由于某种原因,我无法将值放入数组中。我有7个复选框,它们存储在一个数组“services[]”中,您可以从这个示例视图中看到: <?php $servicesdata = array ( 'name' => 'services[]', 'value' => 'in_home_care',

嗨,我有一个难以置信的困难的时间与什么应该是一个简单的问题

从CodeIgniter 1.7开始,“$this->input->post();”支持数组,但由于某种原因,我无法将值放入数组中。我有7个复选框,它们存储在一个数组“services[]”中,您可以从这个示例视图中看到:

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

您可以看到我为一个示例输入的字符串,该字符串工作正常,插入到VARCHAR类型中,而数组不会进入数据库。我觉得好像我在这里遗漏了什么东西——即数组中的“值”,但我不确定从这里可以走到哪里。任何帮助都将不胜感激,因为我唯一能使用的方法就是牺牲我的复选框验证!:(

如果未选中复选框,复选框的值将不会输入到$\u POST数组中。这可能是您遇到问题的地方

有两种方法可以解决这个问题。或者默认选中一个复选框,或者像下面这样使用HTML(这可能是最好的做法/可能不是有效的,但在过去对我有效)



如果未选中该框,则名称值“services”的值“foo”将传递给$\u POST数组。

首先,表单中存在一些冗余(我认为)。您可以在数组中设置复选框的属性,包括是否选中:

$servicesdata = array (
         'name'    =>  'services[]',
         'value'   =>  'in_home_care',
         'checked' =>  FALSE,
         );
echo form_checkbox($servicesdata);
其次,由于您在数组中命名对象,因此需要在将对象分配给另一个变量后访问该对象:

$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

在数据库中存储这些选项的一种方法是从它们中创建一个字符串并存储该字符串

$this->input->post('colors')?$colors=内爆('-',$this->input->post('colors')):$colors=''

检查颜色数组中是否实际检查了任何内容。如果是,请从以破折号分隔的数组值中创建一个字符串。否则,为颜色指定空值

然后在读回db字符串后:

$profile_data['colors']=分解('-',$row->colors)


然后,您可以将这些值反馈到表单输入中。

太好了!基本上,我将您的顶行添加到了服务结束处的“[]”。我打印出了数组,它看起来很棒。如果您不介意帮忙的话,现在如何将这7个值传递到各自的列中呢?根据CI手册my'post()'方法是正确的,但我还没有太多的运气…您可以使用set_value()函数,即set_value('services[]),从复选框中获取设置值(我认为您想要的)然后将其传递给string/model/session。这里还有更多内容;实际上可能存在冗余,但我怀疑它可能存在于我创建的数组中,而不是实际的函数中。我很累,但明天早上我将尝试您的第二种方法并与您联系!谢谢!在您的示例中创建的数组工作正常,只是冗余。您设置了来自
servicesdata
数组的name、value,然后通过在
form_checkbox
echo中设置name、value和checked来覆盖它。您的表单代码将按原样工作;问题不在这里,而是在您的控制器中。由于您的复选框名称是数组,您需要将其分配给一个变量,然后通过该变量访问这些值根据我的示例,名称和键(例如,
$var[0]
)。
$servicesdata = array (
         'name'    =>  'services[]',
         'value'   =>  'in_home_care',
         'checked' =>  FALSE,
         );
echo form_checkbox($servicesdata);
$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