2010-07-12 28 views
0

嗨我有一个非常困难的时间应该是一个简单的问题。从CodeIgniter 1.7开始,'$ this-> input-> post();'支持的数组,但我不能因为某些原因将值存入数组中。我有一个存储到一个数组7个复选框“服务[]”,你可以通过这个例子视图中看到:出于某种原因,无法将数组中的复选框值存储到数据库!

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

我很确信这是正确的方式,因为形式也很好的验证,如果出现错误。现在我开始在存储值时遇到问题。我有7列需要有某种价值...在这一点上,我不在乎,但理想情况下它会是一个布尔值(二进制也可以)。以下是我在我的控制器,每个人都声称工作得这么远,但少了点:

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

你可以看到我穿上了完美的作品,并插入到一个VARCHAR类型,而数组赢得一个例子字符串不管进入数据库。我觉得我在这里错过了一些东西 - 也就是阵列中的“价值”,但我不确定该从哪里出发。任何帮助将不胜感激,因为我可以工作的唯一方法牺牲了我的复选框验证! :(

回答

1

如果您的复选框被选中时,复选框的值将不被输入到$ _POST数组中。这可能是哪里出现了问题。

有解决这个问题。无论是两种方法都一个框默认选中,或使用类似下面的HTML(这可能是也可能不是最好的做法/有效的,但在过去的工作对我来说)。

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

在未选中该复选框的情况下,名称值“services”的值“foo”将传递给$ _POST数组。

+0

+1对老问题有趣的方法。 – NotMe 2010-07-13 00:36:21

+0

非常好!基本上,我把你的顶线和添加'[]'服务结束。我打印出阵列,看起来很棒。现在,如果你不介意帮助他们,那么如何将这7个值传递到他们各自的专栏?根据CI手册,我的'post()'方法是正确的,但我没有太多的运气...... – mpoplin 2010-07-13 06:37:39

+0

您可以通过使用set_value()来从您的复选框中获得设定值(我认为你想要的) )函数,即set_value('services []'),然后将其传递给字符串/模型/会话。这里还有更多; http://codeigniter.com/user_guide/libraries/form_validation.html#arraysasfields – 2010-07-13 12:19:21

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 
+0

其实可能有冗余,但我怀疑它会在我创建的数组中,而不是实际的功能。 我很累,但我会明天早上尝试你的第二种方法,并回到你的!谢谢! – mpoplin 2010-07-13 06:38:56

+0

正在您的示例中创建的数组,它只是多余的。您可以从'servicesdata'数组中设置名称,值,然后通过设置名称,值并在'form_checkbox'回声中检查来覆盖它。您的表单代码将按原样工作;问题不在那里,而是在你的控制器中。由于您的复选框名称是一个数组,因此您需要将其分配给一个变量,然后按照我的示例通过变量名和键(例如'$ var [0]')访问这些值。 – stormdrain 2010-07-13 13:39:02

0

在db中存储这些选项的方法是从它们中创建一个字符串并存储它们。

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

检查颜色数组中是否有实际检查的内容。如果是这样,请从由破折号分隔的数组值中创建一个字符串。否则将空赋值为颜色。

你读分贝串后面接着后:

$ profile_data [ '颜色'] =爆炸( ' - ',$行向>色);

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